Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Source: https://gist.githubusercontent.com/NotNite/79ab1e5501e1ef109e8030059356b1b8/raw/c2102bf5ff74275ac44c2200d5121bfff652fd49/hook.dll.c
- /* This file was generated by the Hex-Rays decompiler.
- Copyright (c) 2007-2020 Hex-Rays <[email protected]>
- Detected compiler: Visual C++
- */
- #include <windows.h>
- #include <defs.h>
- #include <stdarg.h>
- //-------------------------------------------------------------------------
- // Function declarations
- int sub_180001000();
- __int64 sub_180001010(__int64 a1, __int64 a2, __int64 a3, ...);
- __int64 sub_180001040(__int64 a1, __int64 a2, __int64 a3, ...);
- __int64 __fastcall sub_180001070(__int64 a1, __int64 a2);
- const char *__fastcall sub_1800010B0(__int64 a1);
- void *__fastcall sub_1800010D0(void *Block, char a2);
- __int64 __fastcall sub_180001120(_QWORD *a1);
- _QWORD *__fastcall sub_180001140(_QWORD *a1);
- // void __noreturn Concurrency::cancel_current_task(void); idb
- __int64 __fastcall sub_180001190(__int64 a1, __int64 a2);
- __int64 __fastcall sub_1800011D0(__int64 a1, __int64 a2);
- void __noreturn sub_180001210();
- _QWORD *__fastcall sub_180001230(_QWORD *a1);
- // void __noreturn Concurrency::cancel_current_task(void); idb
- __int64 __fastcall sub_180001280(__int64 a1, __int64 a2);
- void __fastcall sub_1800012C0(__int64 a1);
- _QWORD *__fastcall sub_1800012F0(_QWORD *a1, char a2);
- _QWORD *__fastcall sub_180001320(_QWORD *a1, char a2);
- _QWORD *__fastcall sub_180001350(_QWORD *a1, char a2);
- void *__fastcall sub_180001380(void *Block, char a2);
- void *__fastcall sub_180001410(void *Block, char a2);
- _QWORD *__fastcall sub_1800014D0(_QWORD *a1, char a2);
- __int64 __fastcall sub_180001500(__int64 a1, __int64 a2, __int64 a3);
- __int64 __fastcall Java_dev_neko_nekoclient_api_windows_WindowsHook_retrieveClipboardFiles(__int64 a1);
- __int64 __fastcall Java_dev_neko_nekoclient_api_windows_WindowsHook_retrieveMSACredentials(__int64 a1);
- __int64 __fastcall sub_180001A80(__int64 a1, __int64 a2, __int64 a3);
- __int64 __fastcall sub_1800020A0(__int64 a1);
- __int64 __fastcall sub_180002100(__int64 a1, __int64 a2, __int64 a3);
- _QWORD *__fastcall sub_180002150(const _Collvec *a1, _QWORD *a2, const wchar_t *a3, const wchar_t *a4);
- __int64 __fastcall sub_180002300(const _Collvec *a1, const wchar_t *a2, const wchar_t *a3, const wchar_t *a4, wchar_t *a5);
- __int64 __fastcall sub_180002350(__int64 a1);
- _QWORD *__fastcall sub_1800023C0(_QWORD *a1, _WORD *a2);
- void __fastcall sub_180002510(__int64 a1);
- _QWORD *__fastcall sub_180002570(_QWORD *a1, _BYTE *a2);
- void __fastcall sub_180002690(__int64 a1);
- void *__fastcall sub_1800026C0(void *Block, char a2);
- __int64 __fastcall sub_180002710(__int64 *a1);
- __int64 *__fastcall sub_180002790(__int64 *a1, unsigned __int16 *a2);
- void *__fastcall sub_180002960(void *Src, unsigned __int64 a2, __int64 a3, __int64 a4);
- void __fastcall sub_180002B50(struct _Collvec **a1);
- bool __fastcall sub_180002D30(__int64 a1, __int64 a2, __int64 a3, __int64 *a4, int a5);
- _QWORD *__fastcall sub_180002EF0(const void **a1, _BYTE *a2, _QWORD *a3);
- __int64 __fastcall sub_180003080(_QWORD *a1);
- void __fastcall sub_1800030E0(_QWORD *a1);
- void __fastcall sub_180003160(_QWORD *a1);
- __int64 __fastcall sub_180003210(_QWORD *a1);
- __int64 __fastcall sub_180003270(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, int a6, int a7, int a8);
- void __noreturn sub_1800033B0();
- __int64 __fastcall sub_1800033D0(__int64 a1);
- __int64 __fastcall sub_180003430(__int64 a1);
- __int64 __fastcall sub_180003490(struct _Collvec **a1, __int64 a2);
- __int64 __fastcall sub_1800036C0(__int64 a1);
- __int64 __fastcall sub_180003850(__int64 **a1);
- __int128 *__fastcall sub_1800038B0(unsigned __int64 *a1, unsigned __int64 a2);
- __int128 *__fastcall sub_180003A40(__int64 *a1, __int128 *a2, __int128 *a3, signed __int64 a4, char *a5);
- _OWORD *__fastcall sub_180003C00(unsigned __int64 *a1, _OWORD *a2, _QWORD *a3, _QWORD *a4);
- void __noreturn sub_180003E70();
- __int64 __fastcall sub_180003E90(__int64 *a1, _QWORD *a2, unsigned __int64 a3);
- void __fastcall __noreturn sub_1800040C0(__int64 a1, unsigned int a2);
- __int16 __fastcall sub_1800040D0(unsigned __int16 **a1);
- char __fastcall sub_1800043A0(__int64 a1);
- __int64 __fastcall sub_180004600(__int64 a1, __int64 a2);
- _OWORD *__fastcall sub_1800046B0(__int64 a1, int a2);
- bool __fastcall sub_180004740(__int64 a1, __int64 a2);
- char *__fastcall sub_180004D30(__int64 a1, unsigned __int64 a2);
- _QWORD *__fastcall sub_180004EA0(_QWORD *a1, _QWORD *a2);
- unsigned __int64 __fastcall sub_180004F50(unsigned __int64 *a1, unsigned __int64 a2);
- char __fastcall sub_180004FE0(__int64 a1);
- _OWORD *__fastcall sub_1800055C0(__int64 a1, int a2);
- __int64 __fastcall sub_180005650(__int64 a1, __int64 a2);
- __int64 __fastcall sub_180005A00(__int64 a1, __int64 a2, char a3, int a4);
- char __fastcall sub_180005D40(__int64 *a1, __int64 a2);
- bool __fastcall sub_180005F70(__int64 a1);
- bool __fastcall sub_180006050(unsigned __int16 **a1);
- __int16 *__fastcall sub_1800060F0(__int16 *a1, __int16 *a2, __int16 *a3, __int16 *a4, __int64 *a5, __int16 a6);
- char *__fastcall sub_180006230(__int64 a1, unsigned __int64 a2, _DWORD *a3);
- char *__fastcall sub_1800063C0(unsigned __int64 *a1, char *a2, unsigned __int64 a3);
- char *__fastcall sub_180006510(unsigned __int64 *a1, char *a2, unsigned __int64 a3);
- _QWORD *__fastcall sub_180006650(_QWORD *a1, _QWORD *a2);
- __int64 __fastcall sub_180006740(__int64 *a1, __int16 a2);
- void *__fastcall sub_1800067F0(void *Block, char a2);
- size_t __fastcall sub_180006900(unsigned __int64 *a1, unsigned __int64 a2);
- int __fastcall sub_180006990(__int64 a1);
- char __fastcall sub_180006AC0(__int64 a1);
- char __fastcall sub_180006C50(__int64 a1);
- __int64 __fastcall sub_180007010(__int64 a1);
- __int64 __fastcall sub_1800072A0(__int64 a1, unsigned __int16 a2);
- __int64 __fastcall sub_1800073C0(void **a1, __int64 a2, char a3);
- __int64 __fastcall sub_180007800(unsigned __int16 a1, unsigned int *a2, _QWORD *a3);
- bool __fastcall sub_180007BC0(__int64 a1, unsigned int a2);
- char __fastcall sub_180007CD0(__int64 a1, char a2);
- int __fastcall sub_180007DE0(__int64 a1);
- char __fastcall sub_180007F60(__int64 a1);
- __int64 __fastcall sub_180008520(__int64 a1, unsigned __int8 a2);
- __int64 __fastcall sub_180008630(__int64 a1);
- int __fastcall sub_1800086D0(__int64 a1, __int64 a2);
- __int64 __fastcall sub_1800087E0(_QWORD *a1, int a2, int a3, unsigned __int8 a4);
- __int64 __fastcall sub_180008B10(_QWORD *a1, __int64 a2, _BYTE *a3, _BYTE *a4);
- __int64 __fastcall sub_180008D90(__int64 a1, unsigned __int64 a2, __int64 a3, const void *a4);
- __int64 __fastcall sub_180008EF0(__int64 a1);
- void *__fastcall sub_180008F50(void *Block, char a2);
- void __fastcall sub_180008FA0(__int64 a1, int a2);
- __int64 __fastcall sub_1800090C0(__int64 a1);
- void __fastcall sub_1800094A0(__int64 a1, __int64 a2, unsigned __int16 a3);
- char __fastcall sub_1800096C0(__int64 a1, unsigned __int16 a2, char a3);
- __int64 __fastcall sub_1800097A0(__int64 a1, unsigned __int16 *a2, unsigned __int16 *a3, char a4);
- __int16 __fastcall sub_180009910(__int64 a1, int a2);
- void __fastcall sub_180009B70(__int64 a1, __int16 *a2, __int16 *a3, unsigned int a4);
- void __fastcall sub_180009D50(__int64 a1, __int16 *a2, __int16 *a3, unsigned int a4, __int64 *a5);
- __int64 __fastcall sub_180009E30(_QWORD *a1, __int64 a2, _BYTE *a3, _BYTE *a4);
- _QWORD *__fastcall sub_18000A09C(__int64 a1);
- const __m128i *__fastcall sub_18000A0E0(const __m128i *a1, const __m128i *a2, __int16 a3);
- // void __cdecl _security_check_cookie(uintptr_t StackCookie);
- void __cdecl j_j_free(void *Block);
- _QWORD *__fastcall sub_18000A1F8(_QWORD *a1, char a2);
- void *__fastcall sub_18000A224(size_t Size);
- __int64 __fastcall sub_18000A260(__int64 a1, int a2, __int64 a3);
- __int64 __fastcall sub_18000A2B0(__int64 a1, __int64 a2);
- __int64 __fastcall sub_18000A3C8(char a1);
- __int64 __fastcall sub_18000A44C(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); // idb
- // BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved);
- char sub_18000A5C0();
- char sub_18000A5FC();
- bool sub_18000A630();
- char sub_18000A648();
- char sub_18000A670();
- int __fastcall sub_18000A688(__int64 a1, int a2, __int64 a3, void (__fastcall *a4)(__int64, _QWORD, __int64), unsigned int ExceptionNum, struct _EXCEPTION_POINTERS *ExceptionPtr);
- void sub_18000A6E8();
- char sub_18000A718();
- char __fastcall sub_18000A72C(int a1);
- char __fastcall sub_18000A778(unsigned int a1);
- bool __fastcall sub_18000A804(__int64 a1);
- char __fastcall sub_18000A89C(char a1);
- char __fastcall sub_18000A8C0(__int64 a1, char a2);
- _onexit_t __fastcall sub_18000A8EC(_onexit_t Function);
- // int __cdecl atexit(void (__cdecl *)());
- // __int64 __fastcall _GSHandlerCheckCommon(_QWORD, _QWORD, _QWORD); weak
- __int64 sub_18000A9C0();
- BOOL __fastcall sub_18000AB6C(struct _EXCEPTION_POINTERS *ExceptionInfo);
- BOOL __fastcall sub_18000ABA0(DWORD64 a1);
- struct _IMAGE_RUNTIME_FUNCTION_ENTRY *__fastcall sub_18000AC74(PCONTEXT ContextRecord);
- _QWORD *__fastcall sub_18000ACF0(_QWORD *a1);
- // void __noreturn Concurrency::cancel_current_task(void); idb
- __int64 sub_18000AD30();
- // BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
- void sub_18000AE00();
- __int64 sub_18000AE10();
- void *sub_18000AE1C();
- void *sub_18000AE24();
- _QWORD *sub_18000AE2C();
- void *sub_18000AE48();
- void sub_18000AE50();
- void __fastcall sub_18000AE58(unsigned int a1);
- void sub_18000AFA4();
- void sub_18000AFE0();
- __int64 sub_18000B01C();
- // bool __uncaught_exception(void); idb
- // __int64 __fastcall _CxxFrameHandler4(_QWORD, _QWORD, _QWORD, _QWORD); weak
- // __int64 __fastcall _std_type_info_destroy_list(_QWORD); weak
- // void *__cdecl memset(void *, int Val, size_t Size);
- // int __cdecl callnewh(size_t Size);
- // void *__cdecl malloc(size_t Size);
- // void __cdecl initterm(_PVFV *First, _PVFV *Last);
- // int __cdecl initterm_e(_PIFV *First, _PIFV *Last);
- // int __cdecl seh_filter_dll(unsigned int ExceptionNum, struct _EXCEPTION_POINTERS *ExceptionPtr);
- // errno_t __cdecl configure_narrow_argv(_crt_argv_mode mode);
- // int __cdecl initialize_narrow_environment();
- // int __cdecl initialize_onexit_table(_onexit_table_t *Table);
- // int __cdecl register_onexit_function(_onexit_table_t *Table, _onexit_t Function);
- // int __cdecl execute_onexit_table(_onexit_table_t *Table);
- // int __cdecl crt_atexit(_PVFV Function);
- // void __cdecl cexit();
- char sub_18000B0A4();
- __int64 sub_18000B0A8();
- __int64 __fastcall sub_18000B0AC(__int64 a1, __int64 a2, __int64 a3, __int64 a4);
- // int __cdecl memcmp(const void *Buf1, const void *Buf2, size_t Size);
- // void *__cdecl memcpy(void *, const void *Src, size_t Size);
- // void *__cdecl memmove(void *, const void *Src, size_t Size);
- __int64 __fastcall guard_dispatch_icall_nop(); // weak
- __int64 __fastcall sub_18000B180(__int64 a1, __int64 a2);
- void __fastcall sub_18000B1A6(__int64 a1, __int64 a2);
- __int64 __fastcall sub_18000B1D0(__int64 a1, __int64 a2);
- void __fastcall sub_18000B2D0(__int64 a1, __int64 a2);
- void __fastcall sub_18000B2F0(__int64 a1, __int64 a2);
- void __fastcall sub_18000B316(__int64 a1, __int64 a2);
- void __fastcall sub_18000B340(__int64 a1, __int64 a2);
- __int64 __fastcall sub_18000B426(__int64 a1, __int64 a2);
- void sub_18000B4E0();
- // __int64 __fastcall std::_Xregex_error(_QWORD); weak
- // __int64 __fastcall std::ctype<wchar_t>::_Getcat(_QWORD, _QWORD); weak
- // __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD, _QWORD); weak
- // __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD); weak
- // __int64 __fastcall std::ctype<wchar_t>::is(_QWORD, _QWORD, _QWORD); weak
- // void std::locale::facet::~facet(std::locale::facet *__hidden this); weak
- // _QWORD std::locale::facet::facet(std::locale::facet *__hidden this, unsigned __int64); weak
- // __int64 __fastcall std::locale::id::operator unsigned __int64(_QWORD); weak
- // void std::_Xbad_alloc(void); weak
- // struct _Collvec *std::_Locinfo::_Getcoll(std::_Locinfo *__hidden this, struct _Collvec *__return_ptr __struct_ptr retstr); weak
- // void std::_Locinfo::~_Locinfo(std::_Locinfo *__hidden this); weak
- // _QWORD std::_Locinfo::_Locinfo(std::_Locinfo *__hidden this, const char *); weak
- // _QWORD std::_Lockit::_Lockit(std::_Lockit *__hidden this, _DWORD); weak
- // void std::_Lockit::~_Lockit(std::_Lockit *__hidden this); weak
- // void __stdcall __noreturn std::_Xlength_error(const char *); weak
- // struct std::locale::_Locimp *__stdcall static std::locale::_Init(bool); weak
- // __int64 std::locale::_Getgloballocale(void); weak
- // __int64 __fastcall _std_exception_copy(_QWORD); weak
- // __int64 __fastcall _std_exception_destroy(_QWORD); weak
- //-------------------------------------------------------------------------
- // Data declarations
- // extern BOOL (__stdcall *CredEnumerateW)(LPCWSTR Filter, DWORD Flags, DWORD *Count, PCREDENTIALW **Credential);
- // extern void (__stdcall *CredFree)(PVOID Buffer);
- // extern PRUNTIME_FUNCTION (__stdcall *RtlLookupFunctionEntry)(ULONG64 ControlPc, PULONG64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
- // extern PEXCEPTION_ROUTINE (__stdcall *RtlVirtualUnwind)(ULONG HandlerType, ULONG64 ImageBase, ULONG64 ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PULONG64 EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
- // extern LONG (__stdcall *UnhandledExceptionFilter)(struct _EXCEPTION_POINTERS *ExceptionInfo);
- // extern BOOL (__stdcall *GlobalUnlock)(HGLOBAL hMem);
- // extern HANDLE (__stdcall *GetCurrentProcess)();
- // extern BOOL (__stdcall *TerminateProcess)(HANDLE hProcess, UINT uExitCode);
- // extern BOOL (__stdcall *IsProcessorFeaturePresent)(DWORD ProcessorFeature);
- // extern BOOL (__stdcall *QueryPerformanceCounter)(LARGE_INTEGER *lpPerformanceCount);
- // extern LPVOID (__stdcall *GlobalLock)(HGLOBAL hMem);
- // extern LPTOP_LEVEL_EXCEPTION_FILTER (__stdcall *SetUnhandledExceptionFilter)(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
- // extern DWORD (__stdcall *GetCurrentProcessId)();
- // extern DWORD (__stdcall *GetCurrentThreadId)();
- // extern void (__stdcall *GetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime);
- // extern void (__stdcall *InitializeSListHead)(PSLIST_HEADER ListHead);
- // extern BOOL (__stdcall *IsDebuggerPresent)();
- // extern void (__stdcall *RtlCaptureContext)(PCONTEXT ContextRecord);
- // extern _UNKNOWN std::collate<wchar_t>::id; weak
- // extern _UNKNOWN std::ctype<wchar_t>::id; weak
- // extern int (__cdecl *Wcscoll)(const wchar_t *, const wchar_t *, const wchar_t *, const wchar_t *, const _Collvec *);
- // extern size_t (__cdecl *Wcsxfrm)(wchar_t *String1, wchar_t *End1, const wchar_t *, const wchar_t *, const _Collvec *);
- // extern BOOL (__stdcall *IsClipboardFormatAvailable)(UINT format);
- // extern BOOL (__stdcall *CloseClipboard)();
- // extern UINT (__stdcall *EnumClipboardFormats)(UINT format);
- // extern int (__stdcall *GetClipboardFormatNameA)(UINT format, LPSTR lpszFormatName, int cchMaxCount);
- // extern HANDLE (__stdcall *GetClipboardData)(UINT uFormat);
- // extern BOOL (__stdcall *OpenClipboard)(HWND hWndNewOwner);
- // extern char *(__cdecl *strchr)(const char *Str, int Val);
- // extern void (__cdecl *free)(void *Block);
- // extern void *(__cdecl *realloc)(void *Block, size_t Size);
- // extern void (__cdecl __noreturn *invalid_parameter_noinfo_noreturn)();
- __int64 (__fastcall *_guard_dispatch_icall_fptr)(_QWORD, _QWORD, _QWORD) = &guard_dispatch_icall_nop; // weak
- const _PVFV qword_18000C2D0 = NULL; // idb
- const _PVFV qword_18000C2E0 = NULL; // idb
- const _PIFV First = NULL; // idb
- const _PIFV Last = NULL; // idb
- __int128 xmmword_18000C320 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFi64; // weak
- void *type_info::`vftable' = &sub_18000A1F8; // weak
- const struct _EXCEPTION_POINTERS ExceptionInfo = { &dword_180010420, &ContextRecord }; // idb
- void *std::exception::`vftable' = &sub_1800010D0; // weak
- void *std::bad_alloc::`vftable' = &sub_1800010D0; // weak
- void *std::bad_array_new_length::`vftable' = &sub_1800010D0; // weak
- char *off_18000C650 = "alnum"; // weak
- void *std::_Node_str<wchar_t>::`vftable' = &sub_180008F50; // weak
- void *std::_Node_class<wchar_t,std::regex_traits<wchar_t>>::`vftable' = &sub_1800067F0; // weak
- void *std::collate<wchar_t>::`vftable' = &sub_1800026C0; // weak
- void *std::_Node_rep::`vftable' = &sub_1800014D0; // weak
- void *std::_Node_end_rep::`vftable' = &sub_180001350; // weak
- void *std::_Node_if::`vftable' = &sub_180001410; // weak
- void *std::_Node_endif::`vftable' = &sub_1800012F0; // weak
- void *std::_Node_back::`vftable' = &sub_180001350; // weak
- void *std::_Node_capture::`vftable' = &sub_180001350; // weak
- void *std::_Node_assert::`vftable' = &sub_180001380; // weak
- void *std::_Node_end_group::`vftable' = &sub_180001350; // weak
- void *std::_Root_node::`vftable' = &sub_180001320; // weak
- void *std::_Node_base::`vftable' = &sub_1800012F0; // weak
- _BYTE byte_18000C8E0[256] =
- {
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 0,
- 0,
- 0,
- 1,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- }; // weak
- void *std::bad_cast::`vftable' = &sub_1800010D0; // weak
- __int128 xmmword_18000CA00 = 0x70000000000000000i64; // weak
- void (*qword_18000D9F8[2])(void) = { NULL, NULL }; // weak
- void (*qword_18000DA08)(void) = NULL; // weak
- int dword_180010008 = 1; // weak
- int dword_18001000C = 2; // weak
- __int64 qword_180010010 = 524288i64; // weak
- __int64 qword_180010018 = 33554432i64; // weak
- __int64 qword_180010020 = -47936899621427i64; // weak
- uintptr_t _security_cookie = 47936899621426ui64;
- void *Block = NULL; // idb
- int dword_1800103CC = 0; // weak
- int dword_1800103D0 = 0; // weak
- __int64 qword_1800103D8 = 0i64; // weak
- char byte_1800103E0 = '\0'; // weak
- char byte_1800103E1 = '\0'; // weak
- _onexit_table_t Table = { NULL, NULL, NULL }; // idb
- _onexit_table_t stru_180010400; // idb
- int dword_180010418; // weak
- int dword_180010420; // weak
- int dword_180010424; // weak
- __int64 qword_180010430; // weak
- int dword_180010438; // weak
- _UNKNOWN unk_180010440; // weak
- _CONTEXT ContextRecord; // idb
- union _SLIST_HEADER stru_180010990; // weak
- _UNKNOWN unk_1800109A0; // weak
- _UNKNOWN unk_1800109A8; // weak
- int dword_1800109B0; // weak
- __int64 qword_1800109B8; // weak
- __int64 qword_1800109C0; // weak
- _UNKNOWN unk_1800109D0; // weak
- //----- (0000000180001000) ----------------------------------------------------
- int sub_180001000()
- {
- return atexit(sub_18000B4E0);
- }
- //----- (0000000180001010) ----------------------------------------------------
- __int64 sub_180001010(__int64 a1, __int64 a2, __int64 a3, ...)
- {
- va_list va; // [rsp+48h] [rbp+20h] BYREF
- va_start(va, a3);
- return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(*(_QWORD *)a1 + 232i64))(
- a1,
- a2,
- a3,
- (__int64 *)va);
- }
- //----- (0000000180001040) ----------------------------------------------------
- __int64 sub_180001040(__int64 a1, __int64 a2, __int64 a3, ...)
- {
- va_list va; // [rsp+48h] [rbp+20h] BYREF
- va_start(va, a3);
- return (*(__int64 (__fastcall **)(__int64, __int64, __int64, __int64 *))(*(_QWORD *)a1 + 280i64))(
- a1,
- a2,
- a3,
- (__int64 *)va);
- }
- //----- (0000000180001070) ----------------------------------------------------
- __int64 __fastcall sub_180001070(__int64 a1, __int64 a2)
- {
- *(_QWORD *)a1 = &std::exception::`vftable';
- *(_OWORD *)(a1 + 8) = 0i64;
- _std_exception_copy(a2 + 8);
- return a1;
- }
- // 18000C1B0: using guessed type __int64 __fastcall _std_exception_copy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- //----- (00000001800010B0) ----------------------------------------------------
- const char *__fastcall sub_1800010B0(__int64 a1)
- {
- const char *result; // rax
- result = "Unknown exception";
- if ( *(_QWORD *)(a1 + 8) )
- return *(const char **)(a1 + 8);
- return result;
- }
- //----- (00000001800010D0) ----------------------------------------------------
- void *__fastcall sub_1800010D0(void *Block, char a2)
- {
- *(_QWORD *)Block = &std::exception::`vftable';
- _std_exception_destroy((char *)Block + 8);
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C1E8: using guessed type __int64 __fastcall _std_exception_destroy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- //----- (0000000180001120) ----------------------------------------------------
- __int64 __fastcall sub_180001120(_QWORD *a1)
- {
- *a1 = &std::exception::`vftable';
- return _std_exception_destroy(a1 + 1);
- }
- // 18000C1E8: using guessed type __int64 __fastcall _std_exception_destroy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- //----- (0000000180001140) ----------------------------------------------------
- _QWORD *__fastcall sub_180001140(_QWORD *a1)
- {
- a1[2] = 0i64;
- a1[1] = "bad array new length";
- *a1 = &std::bad_array_new_length::`vftable';
- return a1;
- }
- // 18000C3A0: using guessed type void *std::bad_array_new_length::`vftable';
- //----- (0000000180001190) ----------------------------------------------------
- __int64 __fastcall sub_180001190(__int64 a1, __int64 a2)
- {
- *(_QWORD *)a1 = &std::exception::`vftable';
- *(_OWORD *)(a1 + 8) = 0i64;
- _std_exception_copy(a2 + 8);
- *(_QWORD *)a1 = &std::bad_array_new_length::`vftable';
- return a1;
- }
- // 18000C1B0: using guessed type __int64 __fastcall _std_exception_copy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- // 18000C3A0: using guessed type void *std::bad_array_new_length::`vftable';
- //----- (00000001800011D0) ----------------------------------------------------
- __int64 __fastcall sub_1800011D0(__int64 a1, __int64 a2)
- {
- *(_QWORD *)a1 = &std::exception::`vftable';
- *(_OWORD *)(a1 + 8) = 0i64;
- _std_exception_copy(a2 + 8);
- *(_QWORD *)a1 = &std::bad_alloc::`vftable';
- return a1;
- }
- // 18000C1B0: using guessed type __int64 __fastcall _std_exception_copy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- // 18000C378: using guessed type void *std::bad_alloc::`vftable';
- //----- (0000000180001210) ----------------------------------------------------
- void __noreturn sub_180001210()
- {
- std::_Xlength_error("string too long");
- }
- // 18000C138: using guessed type void __stdcall __noreturn std::_Xlength_error(const char *);
- //----- (0000000180001230) ----------------------------------------------------
- _QWORD *__fastcall sub_180001230(_QWORD *a1)
- {
- a1[2] = 0i64;
- a1[1] = "bad cast";
- *a1 = &std::bad_cast::`vftable';
- return a1;
- }
- // 18000C9E8: using guessed type void *std::bad_cast::`vftable';
- //----- (0000000180001280) ----------------------------------------------------
- __int64 __fastcall sub_180001280(__int64 a1, __int64 a2)
- {
- *(_QWORD *)a1 = &std::exception::`vftable';
- *(_OWORD *)(a1 + 8) = 0i64;
- _std_exception_copy(a2 + 8);
- *(_QWORD *)a1 = &std::bad_cast::`vftable';
- return a1;
- }
- // 18000C1B0: using guessed type __int64 __fastcall _std_exception_copy(_QWORD);
- // 18000C360: using guessed type void *std::exception::`vftable';
- // 18000C9E8: using guessed type void *std::bad_cast::`vftable';
- //----- (00000001800012C0) ----------------------------------------------------
- void __fastcall sub_1800012C0(__int64 a1)
- {
- __int64 v1; // rcx
- void (__fastcall ***v2)(_QWORD, __int64); // rax
- v1 = *(_QWORD *)(a1 + 8);
- if ( v1 )
- {
- v2 = (void (__fastcall ***)(_QWORD, __int64))(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v1 + 16i64))(v1);
- if ( v2 )
- (**v2)(v2, 1i64);
- }
- }
- //----- (00000001800012F0) ----------------------------------------------------
- _QWORD *__fastcall sub_1800012F0(_QWORD *a1, char a2)
- {
- *a1 = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(a1);
- return a1;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180001320) ----------------------------------------------------
- _QWORD *__fastcall sub_180001320(_QWORD *a1, char a2)
- {
- *a1 = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(a1);
- return a1;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180001350) ----------------------------------------------------
- _QWORD *__fastcall sub_180001350(_QWORD *a1, char a2)
- {
- *a1 = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(a1);
- return a1;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180001380) ----------------------------------------------------
- void *__fastcall sub_180001380(void *Block, char a2)
- {
- __int64 v2; // rbx
- _QWORD *v5; // rax
- void (__fastcall ***v6)(_QWORD, __int64); // rcx
- v2 = *((_QWORD *)Block + 4);
- *(_QWORD *)Block = &std::_Node_assert::`vftable';
- while ( v2 )
- {
- v5 = (_QWORD *)(v2 + 16);
- v6 = (void (__fastcall ***)(_QWORD, __int64))v2;
- v2 = *(_QWORD *)(v2 + 16);
- *v5 = 0i64;
- (**v6)(v6, 1i64);
- }
- *(_QWORD *)Block = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C8A8: using guessed type void *std::_Node_assert::`vftable';
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180001410) ----------------------------------------------------
- void *__fastcall sub_180001410(void *Block, char a2)
- {
- __int64 v3; // rsi
- _QWORD *v5; // rax
- __int64 v6; // rbx
- __int64 v7; // rdi
- _QWORD *v8; // rax
- void (__fastcall ***v9)(_QWORD, __int64); // rcx
- v3 = *((_QWORD *)Block + 5);
- *(_QWORD *)Block = &std::_Node_if::`vftable';
- while ( v3 )
- {
- v5 = (_QWORD *)(v3 + 40);
- v6 = v3;
- v3 = *(_QWORD *)(v3 + 40);
- *v5 = 0i64;
- v7 = *((_QWORD *)Block + 4);
- while ( v6 != v7 )
- {
- if ( !v6 )
- break;
- v8 = (_QWORD *)(v6 + 16);
- v9 = (void (__fastcall ***)(_QWORD, __int64))v6;
- v6 = *(_QWORD *)(v6 + 16);
- *v8 = 0i64;
- (**v9)(v9, 1i64);
- }
- }
- *(_QWORD *)Block = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C868: using guessed type void *std::_Node_if::`vftable';
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (00000001800014D0) ----------------------------------------------------
- _QWORD *__fastcall sub_1800014D0(_QWORD *a1, char a2)
- {
- *a1 = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(a1);
- return a1;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180001500) ----------------------------------------------------
- __int64 __fastcall sub_180001500(__int64 a1, __int64 a2, __int64 a3)
- {
- __int64 v5; // rsi
- _QWORD *i; // rbx
- __int64 result; // rax
- if ( a1 != a2 )
- {
- v5 = a1;
- do
- {
- if ( !v5 )
- break;
- switch ( *(_DWORD *)(v5 + 8) )
- {
- case 0xA:
- case 0xB:
- result = sub_180001500(*(_QWORD *)(v5 + 32), 0i64, 0i64);
- break;
- case 0x10:
- if ( a3 )
- *(_DWORD *)(a3 + 52) = 0;
- for ( i = *(_QWORD **)(v5 + 40); i; i = (_QWORD *)i[5] )
- result = sub_180001500(i[2], i[4], a3);
- break;
- case 0x12:
- if ( a3 )
- {
- *(_DWORD *)(a3 + 52) = 0;
- *(_DWORD *)(v5 + 52) = 0;
- }
- else
- {
- a3 = v5;
- }
- break;
- default:
- if ( *(_DWORD *)(v5 + 8) == 19 && a3 == *(_QWORD *)(v5 + 32) )
- {
- if ( *(_DWORD *)(a3 + 52) == -1 )
- *(_DWORD *)(a3 + 52) = 1;
- a3 = 0i64;
- }
- break;
- }
- v5 = *(_QWORD *)(v5 + 16);
- }
- while ( v5 != a2 );
- }
- return result;
- }
- //----- (00000001800015E0) ----------------------------------------------------
- __int64 __fastcall Java_dev_neko_nekoclient_api_windows_WindowsHook_retrieveClipboardFiles(__int64 a1)
- {
- __int64 v2; // rbx
- __int64 *v3; // r14
- __int64 v4; // rax
- __int64 v5; // rdx
- unsigned __int64 v6; // rbx
- __int64 i; // rbp
- __int64 v8; // rdi
- void *v9; // rcx
- void *Block[4]; // [rsp+20h] [rbp-38h] BYREF
- v2 = (*(__int64 (__fastcall **)(__int64, const char *))(*(_QWORD *)a1 + 48i64))(
- a1,
- "dev/neko/nekoclient/api/windows/FileDescriptor");
- v3 = (__int64 *)sub_180001A80((__int64)Block, a1, v2);
- v4 = (*(__int64 (__fastcall **)(__int64, __int64, __int64, _QWORD))(*(_QWORD *)a1 + 1376i64))(
- a1,
- (v3[1] - *v3) >> 3,
- v2,
- 0i64);
- v5 = *v3;
- v6 = 0i64;
- for ( i = v4; v6 < (v3[1] - *v3) >> 3; ++v6 )
- {
- v8 = *(_QWORD *)(v5 + 8 * v6);
- (*(void (__fastcall **)(__int64, __int64, _QWORD, __int64))(*(_QWORD *)a1 + 1392i64))(a1, i, (unsigned int)v6, v8);
- (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 184i64))(a1, v8);
- v5 = *v3;
- }
- v9 = Block[0];
- if ( Block[0] )
- {
- if ( ((Block[2] - Block[0]) & 0xFFFFFFFFFFFFFFF8ui64) >= 0x1000 )
- {
- v9 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v9 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v9);
- }
- return i;
- }
- //----- (0000000180001700) ----------------------------------------------------
- __int64 __fastcall Java_dev_neko_nekoclient_api_windows_WindowsHook_retrieveMSACredentials(__int64 a1)
- {
- unsigned int v3; // er12
- DWORD v4; // ebx
- unsigned int i; // edi
- __int64 v6; // r8
- __int64 *v7; // rdx
- __int64 *v8; // rcx
- void *v9; // rcx
- __int64 v10; // rax
- DWORD v11; // er14
- __int64 j; // r13
- PCREDENTIALW v13; // rdi
- __int64 *v14; // r8
- __int64 *v15; // rcx
- LPBYTE CredentialBlob; // rbx
- DWORD CredentialBlobSize; // edi
- __int64 v18; // rsi
- void *v19; // rcx
- __int64 v20; // rax
- __int64 v21; // rax
- void (__fastcall ***v22)(_QWORD, __int64); // rax
- void *v23; // rcx
- PCREDENTIALW *Credential; // [rsp+30h] [rbp-49h] BYREF
- DWORD Count; // [rsp+38h] [rbp-41h] BYREF
- __int64 v26[2]; // [rsp+40h] [rbp-39h] BYREF
- __int64 v27; // [rsp+50h] [rbp-29h]
- unsigned __int64 v28; // [rsp+58h] [rbp-21h]
- __int128 v29[2]; // [rsp+60h] [rbp-19h] BYREF
- __int64 v30; // [rsp+80h] [rbp+7h]
- void *Block[3]; // [rsp+88h] [rbp+Fh] BYREF
- unsigned __int64 v32; // [rsp+A0h] [rbp+27h]
- if ( !CredEnumerateW(0i64, 0, &Count, &Credential) )
- return 0i64;
- sub_1800023C0(Block, L"^MCL(?:MS)?\\|\\d+\\|Xal\\.\\d+\\.Production\\.Msa\\..+$");
- memset(v29, 0, sizeof(v29));
- v30 = 0i64;
- sub_180002790((__int64 *)v29, (unsigned __int16 *)Block);
- v3 = 0;
- v4 = 0;
- for ( i = 0; v4 < Count; ++v4 )
- {
- sub_1800023C0(v26, Credential[v4]->TargetName);
- v7 = v26;
- v8 = v26;
- if ( v28 >= 8 )
- v7 = (__int64 *)v26[0];
- if ( v28 >= 8 )
- v8 = (__int64 *)v26[0];
- if ( sub_180002D30((__int64)v8, (__int64)v7 + 2 * v27, v6, (__int64 *)v29, 16) )
- ++i;
- if ( v28 >= 8 )
- {
- v9 = (void *)v26[0];
- if ( 2 * v28 + 2 >= 0x1000 )
- {
- v9 = *(void **)(v26[0] - 8);
- if ( (unsigned __int64)(v26[0] - (_QWORD)v9 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v9);
- }
- }
- v10 = (*(__int64 (__fastcall **)(__int64, const char *))(*(_QWORD *)a1 + 48i64))(a1, "[B");
- v11 = 0;
- for ( j = (*(__int64 (__fastcall **)(__int64, _QWORD, __int64, _QWORD))(*(_QWORD *)a1 + 1376i64))(a1, i, v10, 0i64);
- v11 < Count;
- ++v11 )
- {
- v13 = Credential[v11];
- sub_1800023C0(v26, v13->TargetName);
- v14 = v26;
- v15 = v26;
- if ( v28 >= 8 )
- v14 = (__int64 *)v26[0];
- if ( v28 >= 8 )
- v15 = (__int64 *)v26[0];
- if ( sub_180002D30((__int64)v15, (__int64)v14 + 2 * v27, (__int64)v14, (__int64 *)v29, 16) )
- {
- CredentialBlob = v13->CredentialBlob;
- CredentialBlobSize = v13->CredentialBlobSize;
- v18 = (*(__int64 (__fastcall **)(__int64, _QWORD))(*(_QWORD *)a1 + 1408i64))(a1, CredentialBlobSize);
- (*(void (__fastcall **)(__int64, __int64, _QWORD, _QWORD, LPBYTE))(*(_QWORD *)a1 + 1664i64))(
- a1,
- v18,
- 0i64,
- CredentialBlobSize,
- CredentialBlob);
- (*(void (__fastcall **)(__int64, __int64, _QWORD, __int64))(*(_QWORD *)a1 + 1392i64))(a1, j, v3++, v18);
- }
- if ( v28 >= 8 )
- {
- v19 = (void *)v26[0];
- if ( 2 * v28 + 2 >= 0x1000 )
- {
- v19 = *(void **)(v26[0] - 8);
- if ( (unsigned __int64)(v26[0] - (_QWORD)v19 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v19);
- }
- }
- CredFree(Credential);
- v20 = (*(__int64 (__fastcall **)(__int64, __int64))(*(_QWORD *)a1 + 248i64))(a1, j);
- v21 = (*(__int64 (__fastcall **)(__int64, __int64, const char *, const char *))(*(_QWORD *)a1 + 264i64))(
- a1,
- v20,
- "clone",
- "()Ljava/lang/Object;");
- sub_180001040(a1, j, v21);
- sub_180002710((__int64 *)v29);
- if ( v30 )
- {
- v22 = (void (__fastcall ***)(_QWORD, __int64))(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v30 + 16i64))(v30);
- if ( v22 )
- (**v22)(v22, 1i64);
- }
- if ( v32 >= 8 )
- {
- v23 = Block[0];
- if ( 2 * v32 + 2 >= 0x1000 )
- {
- v23 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v23 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v23);
- }
- return j;
- }
- // 1800017E2: variable 'v6' is possibly undefined
- // 18000C430: using guessed type wchar_t aMclMsDXalDProd[49];
- //----- (0000000180001A80) ----------------------------------------------------
- __int64 __fastcall sub_180001A80(__int64 a1, __int64 a2, __int64 a3)
- {
- __int64 v3; // r15
- UINT v4; // ebx
- UINT v5; // er12
- char *v6; // r15
- size_t v7; // rdi
- unsigned __int64 v8; // rsi
- void *v9; // rbx
- size_t v10; // rax
- void *v11; // rax
- void **v12; // rcx
- size_t v13; // r8
- int v14; // er14
- _BYTE *v15; // rax
- HANDLE ClipboardData; // rax
- _DWORD *v17; // rax
- _DWORD *v18; // rdx
- unsigned int v19; // er13
- int v20; // er14
- _DWORD *v21; // r12
- __int64 *v22; // rdx
- __int64 *v23; // rsi
- __int64 *v24; // rdi
- unsigned __int64 v25; // rax
- __int64 v26; // rdx
- unsigned __int64 v27; // rbx
- size_t v28; // rcx
- void *v29; // rax
- void *v30; // rcx
- _QWORD *v31; // rax
- void **v32; // rcx
- void **v33; // rax
- __int64 v34; // rdi
- __int64 v35; // rbx
- void **v36; // rdx
- __int64 v37; // rax
- __int64 v38; // rax
- _BYTE *v39; // rdx
- void *v40; // rcx
- void *v41; // rcx
- __int64 v43; // [rsp+20h] [rbp-E0h]
- __int64 v44; // [rsp+28h] [rbp-D8h]
- int v45; // [rsp+30h] [rbp-D0h]
- _DWORD *v46; // [rsp+30h] [rbp-D0h]
- __int64 v47; // [rsp+40h] [rbp-C0h] BYREF
- __int64 v48; // [rsp+48h] [rbp-B8h]
- __int64 v49; // [rsp+50h] [rbp-B0h]
- HGLOBAL hMem; // [rsp+58h] [rbp-A8h]
- __int64 v51; // [rsp+60h] [rbp-A0h]
- __int128 v52; // [rsp+68h] [rbp-98h]
- __int64 v53; // [rsp+78h] [rbp-88h]
- __int64 v54; // [rsp+80h] [rbp-80h]
- void *Buf1[2]; // [rsp+88h] [rbp-78h] BYREF
- size_t v56; // [rsp+98h] [rbp-68h]
- unsigned __int64 v57; // [rsp+A0h] [rbp-60h]
- __int64 v58[3]; // [rsp+A8h] [rbp-58h] BYREF
- unsigned __int64 v59; // [rsp+C0h] [rbp-40h]
- char szFormatName[256]; // [rsp+D0h] [rbp-30h] BYREF
- v49 = a3;
- v48 = a2;
- v3 = a1;
- v47 = a1;
- v51 = a1;
- *(_OWORD *)a1 = 0i64;
- *(_QWORD *)a1 = 0i64;
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- if ( !OpenClipboard(0i64) )
- return v3;
- if ( IsClipboardFormatAvailable(0xFu) )
- goto LABEL_90;
- v4 = 49251;
- v45 = 49251;
- v5 = EnumClipboardFormats(0);
- if ( !v5 )
- goto LABEL_39;
- do
- {
- if ( GetClipboardFormatNameA(v5, szFormatName, 128) <= 0 )
- goto LABEL_37;
- v52 = 0i64;
- v6 = (char *)sub_18000A224(0x20ui64);
- *(_QWORD *)&v52 = v6;
- v53 = 20i64;
- v54 = 31i64;
- strcpy(v6, "FileGroupDescriptorW");
- *(_OWORD *)Buf1 = 0i64;
- v7 = -1i64;
- do
- ++v7;
- while ( szFormatName[v7] );
- if ( v7 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_180001210();
- if ( v7 >= 0x10 )
- {
- v8 = v7 | 0xF;
- if ( (v7 | 0xF) <= 0x7FFFFFFFFFFFFFFFi64 )
- {
- if ( v8 < 0x16 )
- v8 = 22i64;
- if ( v8 + 1 < 0x1000 )
- {
- if ( v8 == -1i64 )
- v9 = 0i64;
- else
- v9 = sub_18000A224(v8 + 1);
- LABEL_21:
- Buf1[0] = v9;
- v56 = v7;
- v57 = v8;
- memcpy(v9, szFormatName, v7);
- *((_BYTE *)v9 + v7) = 0;
- goto LABEL_22;
- }
- v10 = v8 + 40;
- if ( v8 + 40 <= v8 + 1 )
- Concurrency::cancel_current_task();
- }
- else
- {
- v8 = 0x7FFFFFFFFFFFFFFFi64;
- v10 = 0x8000000000000027ui64;
- }
- v11 = sub_18000A224(v10);
- if ( !v11 )
- goto LABEL_48;
- v9 = (void *)(((unsigned __int64)v11 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *((_QWORD *)v9 - 1) = v11;
- goto LABEL_21;
- }
- v56 = v7;
- v57 = 15i64;
- memcpy(Buf1, szFormatName, v7);
- *((_BYTE *)Buf1 + v7) = 0;
- v8 = v57;
- v7 = v56;
- v9 = Buf1[0];
- LABEL_22:
- v12 = Buf1;
- if ( v8 >= 0x10 )
- v12 = (void **)v9;
- v13 = v7;
- if ( v7 > 0x14 )
- v13 = 20i64;
- v14 = memcmp(v12, v6, v13);
- if ( !v14 )
- {
- if ( v7 >= 0x14 )
- v14 = v7 > 0x14;
- else
- v14 = -1;
- }
- if ( v8 >= 0x10 )
- {
- v15 = v9;
- if ( v8 + 1 >= 0x1000 )
- {
- v9 = (void *)*((_QWORD *)v9 - 1);
- if ( (unsigned __int64)(v15 - (_BYTE *)v9 - 8) > 0x1F )
- LABEL_48:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v9);
- }
- j_j_free(v6);
- v4 = v45;
- if ( !v14 )
- v4 = v5;
- v45 = v4;
- LABEL_37:
- v5 = EnumClipboardFormats(v5);
- }
- while ( v5 );
- v3 = v47;
- LABEL_39:
- ClipboardData = GetClipboardData(v4);
- hMem = ClipboardData;
- if ( ClipboardData )
- {
- v17 = GlobalLock(ClipboardData);
- v18 = v17;
- v46 = v17;
- if ( v17 )
- {
- v19 = *v17;
- v20 = 0;
- if ( *v17 )
- {
- while ( 1 )
- {
- v21 = &v18[148 * v20];
- sub_1800023C0(v58, (_WORD *)v21 + 38);
- v22 = v58;
- if ( v59 >= 8 )
- v22 = (__int64 *)v58[0];
- v23 = (__int64 *)((char *)v22 + 2 * v58[2]);
- v24 = v58;
- if ( v59 >= 8 )
- v24 = (__int64 *)v58[0];
- *(_OWORD *)Buf1 = 0i64;
- if ( v24 == v23 )
- {
- v56 = 0i64;
- v57 = 15i64;
- LOBYTE(Buf1[0]) = 0;
- }
- else
- {
- v25 = ((char *)v23 - (char *)v24) >> 1;
- v26 = 0i64;
- v56 = 0i64;
- v27 = 15i64;
- v57 = 15i64;
- if ( v25 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_180001210();
- if ( v25 >= 0x10 )
- {
- v27 = v25 | 0xF;
- if ( (v25 | 0xF) <= 0x7FFFFFFFFFFFFFFFi64 )
- {
- if ( v27 < 0x16 )
- v27 = 22i64;
- }
- else
- {
- v27 = 0x7FFFFFFFFFFFFFFFi64;
- }
- v28 = v27 + 1;
- if ( v27 == -1i64 )
- v28 = -1i64;
- if ( v28 < 0x1000 )
- {
- if ( v28 )
- {
- v31 = sub_18000A224(v28);
- v26 = v56;
- }
- else
- {
- v31 = 0i64;
- }
- }
- else
- {
- if ( v28 + 39 <= v28 )
- Concurrency::cancel_current_task();
- v29 = sub_18000A224(v28 + 39);
- v30 = v29;
- if ( !v29 )
- LABEL_87:
- invalid_parameter_noinfo_noreturn();
- v31 = (_QWORD *)(((unsigned __int64)v29 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v31 - 1) = v30;
- v26 = v56;
- }
- Buf1[0] = v31;
- v57 = v27;
- }
- while ( 1 )
- {
- v32 = Buf1;
- if ( v27 >= 0x10 )
- v32 = (void **)Buf1[0];
- *((_BYTE *)v32 + v26) = *(_BYTE *)v24;
- v26 = ++v56;
- v24 = (__int64 *)((char *)v24 + 2);
- if ( v24 == v23 )
- break;
- v27 = v57;
- }
- v33 = Buf1;
- if ( v57 >= 0x10 )
- v33 = (void **)Buf1[0];
- *((_BYTE *)v33 + v26) = 0;
- }
- v34 = v48;
- v35 = (*(__int64 (__fastcall **)(__int64, __int64, const char *, const char *))(*(_QWORD *)v48 + 264i64))(
- v48,
- v49,
- "<init>",
- "(Ljava/lang/String;II)V");
- v36 = Buf1;
- if ( v57 >= 0x10 )
- v36 = (void **)Buf1[0];
- v37 = (*(__int64 (__fastcall **)(__int64, void **))(*(_QWORD *)v34 + 1336i64))(v34, v36);
- LODWORD(v44) = v21[10];
- LODWORD(v43) = v21[1];
- v38 = sub_180001010(v34, v49, v35, v37, v43, v44);
- v47 = v38;
- v39 = *(_BYTE **)(v3 + 8);
- if ( v39 == *(_BYTE **)(v3 + 16) )
- {
- sub_180002EF0((const void **)v3, v39, &v47);
- }
- else
- {
- *(_QWORD *)v39 = v38;
- *(_QWORD *)(v3 + 8) += 8i64;
- }
- if ( v57 >= 0x10 )
- {
- v40 = Buf1[0];
- if ( v57 + 1 >= 0x1000 )
- {
- v40 = (void *)*((_QWORD *)Buf1[0] - 1);
- if ( (unsigned __int64)(Buf1[0] - v40 - 8) > 0x1F )
- goto LABEL_87;
- }
- j_j_free(v40);
- }
- v56 = 0i64;
- v57 = 15i64;
- LOBYTE(Buf1[0]) = 0;
- if ( v59 >= 8 )
- {
- v41 = (void *)v58[0];
- if ( 2 * v59 + 2 >= 0x1000 )
- {
- v41 = *(void **)(v58[0] - 8);
- if ( (unsigned __int64)(v58[0] - (_QWORD)v41 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v41);
- }
- if ( ++v20 >= v19 )
- break;
- v18 = v46;
- }
- }
- GlobalUnlock(hMem);
- }
- }
- LABEL_90:
- CloseClipboard();
- return v3;
- }
- // 180001F71: variable 'v43' is possibly undefined
- // 180001F71: variable 'v44' is possibly undefined
- // 180001A80: using guessed type CHAR szFormatName[256];
- //----- (00000001800020A0) ----------------------------------------------------
- __int64 __fastcall sub_1800020A0(__int64 a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = *(_QWORD **)a1;
- if ( v2 )
- {
- if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v2) & 0xFFFFFFFFFFFFFFF8ui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- *(_QWORD *)a1 = 0i64;
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- }
- return result;
- }
- //----- (0000000180002100) ----------------------------------------------------
- __int64 __fastcall sub_180002100(__int64 a1, __int64 a2, __int64 a3)
- {
- __int64 result; // rax
- unsigned __int64 v4; // r9
- unsigned __int64 v5; // r8
- __int64 v6; // rcx
- result = 0xCBF29CE484222325ui64;
- v4 = 0i64;
- v5 = 2 * ((a3 - a2) >> 1);
- if ( v5 )
- {
- do
- {
- v6 = *(unsigned __int8 *)(v4 + a2);
- ++v4;
- result = 0x100000001B3i64 * (v6 ^ result);
- }
- while ( v4 < v5 );
- }
- return result;
- }
- //----- (0000000180002150) ----------------------------------------------------
- _QWORD *__fastcall sub_180002150(const _Collvec *a1, _QWORD *a2, const wchar_t *a3, const wchar_t *a4)
- {
- unsigned __int64 v8; // rdx
- size_t v9; // rcx
- unsigned __int64 v10; // rdi
- const _Collvec *v11; // rsi
- _QWORD *v12; // rax
- __int64 v13; // rcx
- unsigned __int64 v14; // r9
- _QWORD *v15; // r8
- _WORD *v16; // rdi
- wchar_t *v17; // rdx
- wchar_t *v18; // rcx
- size_t v19; // rax
- _QWORD *v20; // rax
- __int64 v22; // r8
- unsigned __int64 v23; // rdi
- _QWORD *v24; // r9
- _WORD *v25; // rdi
- unsigned __int64 i; // rcx
- *(_OWORD *)a2 = 0i64;
- a2[2] = 0i64;
- a2[3] = 7i64;
- *(_WORD *)a2 = 0;
- v8 = a4 - a3;
- v9 = 0i64;
- if ( v8 )
- {
- v10 = 0i64;
- v11 = a1 + 1;
- while ( 1 )
- {
- if ( v8 > v10 )
- {
- v13 = v8 - v10;
- v14 = a2[3];
- if ( v8 - v10 > v14 - v10 )
- {
- sub_180002960(a2, v8 - v10, (__int64)a3, v8 - v10);
- }
- else
- {
- a2[2] = v8;
- v15 = a2;
- if ( v14 >= 8 )
- v15 = (_QWORD *)*a2;
- v16 = (_WORD *)v15 + v10;
- if ( v13 )
- {
- while ( v13 )
- {
- *v16++ = 0;
- --v13;
- }
- }
- *((_WORD *)v15 + v8) = 0;
- }
- }
- else
- {
- a2[2] = v8;
- v12 = a2;
- if ( a2[3] >= 8ui64 )
- v12 = (_QWORD *)*a2;
- *((_WORD *)v12 + v8) = 0;
- }
- v17 = (wchar_t *)a2;
- if ( a2[3] < 8ui64 )
- {
- v18 = (wchar_t *)a2;
- if ( a2[3] < 8ui64 )
- goto LABEL_19;
- }
- else
- {
- v17 = (wchar_t *)*a2;
- }
- v18 = (wchar_t *)*a2;
- LABEL_19:
- v19 = Wcsxfrm(v18, &v17[a2[2]], a3, a4, v11);
- v8 = v19;
- v9 = a2[2];
- if ( v19 > v9 )
- {
- v10 = a2[2];
- if ( v19 )
- continue;
- }
- break;
- }
- }
- if ( v8 > v9 )
- {
- v22 = v8 - v9;
- v23 = a2[3];
- if ( v8 - v9 > v23 - v9 )
- {
- sub_180002960(a2, v8 - v9, v22, v8 - v9);
- return a2;
- }
- else
- {
- a2[2] = v8;
- v24 = a2;
- if ( v23 >= 8 )
- v24 = (_QWORD *)*a2;
- v25 = (_WORD *)v24 + v9;
- if ( v22 )
- {
- for ( i = v8 - v9; i; --i )
- *v25++ = 0;
- }
- *((_WORD *)v24 + v8) = 0;
- return a2;
- }
- }
- else
- {
- a2[2] = v8;
- v20 = a2;
- if ( a2[3] >= 8ui64 )
- v20 = (_QWORD *)*a2;
- *((_WORD *)v20 + v8) = 0;
- return a2;
- }
- }
- // 180002212: variable 'a3' is possibly undefined
- //----- (0000000180002300) ----------------------------------------------------
- __int64 __fastcall sub_180002300(
- const _Collvec *a1,
- const wchar_t *a2,
- const wchar_t *a3,
- const wchar_t *a4,
- wchar_t *a5)
- {
- int v5; // ecx
- v5 = Wcscoll(a2, a3, a4, a5, a1 + 1);
- if ( v5 >= 0 )
- return v5 != 0;
- else
- return 0xFFFFFFFFi64;
- }
- //----- (0000000180002350) ----------------------------------------------------
- __int64 __fastcall sub_180002350(__int64 a1)
- {
- unsigned __int64 v1; // rdx
- _QWORD *v3; // rcx
- __int64 result; // rax
- v1 = *(_QWORD *)(a1 + 24);
- if ( v1 >= 8 )
- {
- v3 = *(_QWORD **)a1;
- if ( 2 * v1 + 2 >= 0x1000 )
- {
- if ( (unsigned __int64)v3 - *(v3 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v3 = (_QWORD *)*(v3 - 1);
- }
- j_j_free(v3);
- }
- result = 0i64;
- *(_QWORD *)(a1 + 24) = 7i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- *(_WORD *)a1 = 0;
- return result;
- }
- //----- (00000001800023C0) ----------------------------------------------------
- _QWORD *__fastcall sub_1800023C0(_QWORD *a1, _WORD *a2)
- {
- unsigned __int64 v4; // rbx
- __int64 v5; // r14
- size_t v6; // rbx
- size_t v7; // rcx
- void *v8; // rax
- char *v9; // rsi
- size_t v10; // rbx
- *(_OWORD *)a1 = 0i64;
- a1[2] = 0i64;
- a1[3] = 0i64;
- v4 = -1i64;
- do
- ++v4;
- while ( a2[v4] );
- v5 = 0x7FFFFFFFFFFFFFFEi64;
- if ( v4 > 0x7FFFFFFFFFFFFFFEi64 )
- sub_180001210();
- a1[3] = 7i64;
- if ( v4 >= 8 )
- {
- if ( (v4 | 7) <= 0x7FFFFFFFFFFFFFFEi64 )
- {
- v5 = v4 | 7;
- if ( (v4 | 7) < 0xA )
- v5 = 10i64;
- if ( (unsigned __int64)(v5 + 1) > 0x7FFFFFFFFFFFFFFFi64 )
- goto LABEL_22;
- v7 = 2 * (v5 + 1);
- if ( v7 < 0x1000 )
- {
- if ( v7 )
- v9 = (char *)sub_18000A224(v7);
- else
- v9 = 0i64;
- LABEL_19:
- a1[2] = v4;
- v10 = 2 * v4;
- *a1 = v9;
- a1[3] = v5;
- memcpy(v9, a2, v10);
- *(_WORD *)&v9[v10] = 0;
- return a1;
- }
- }
- else
- {
- v7 = -2i64;
- }
- if ( v7 + 39 > v7 )
- {
- v8 = sub_18000A224(v7 + 39);
- if ( !v8 )
- invalid_parameter_noinfo_noreturn();
- v9 = (char *)(((unsigned __int64)v8 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *((_QWORD *)v9 - 1) = v8;
- goto LABEL_19;
- }
- LABEL_22:
- Concurrency::cancel_current_task();
- }
- a1[2] = v4;
- v6 = 2 * v4;
- memmove(a1, a2, v6);
- *(_WORD *)((char *)a1 + v6) = 0;
- return a1;
- }
- //----- (0000000180002510) ----------------------------------------------------
- void __fastcall sub_180002510(__int64 a1)
- {
- unsigned __int64 v1; // rdx
- _QWORD *v3; // rcx
- v1 = *(_QWORD *)(a1 + 24);
- if ( v1 >= 0x10 )
- {
- v3 = *(_QWORD **)a1;
- if ( v1 + 1 >= 0x1000 )
- {
- if ( (unsigned __int64)v3 - *(v3 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v3 = (_QWORD *)*(v3 - 1);
- }
- j_j_free(v3);
- }
- *(_QWORD *)(a1 + 16) = 0i64;
- *(_QWORD *)(a1 + 24) = 15i64;
- *(_BYTE *)a1 = 0;
- }
- //----- (0000000180002570) ----------------------------------------------------
- _QWORD *__fastcall sub_180002570(_QWORD *a1, _BYTE *a2)
- {
- _QWORD *v2; // r14
- size_t v5; // rbx
- __int64 v6; // rsi
- size_t v7; // rax
- void *v8; // rax
- v2 = 0i64;
- *(_OWORD *)a1 = 0i64;
- a1[2] = 0i64;
- a1[3] = 0i64;
- v5 = -1i64;
- do
- ++v5;
- while ( a2[v5] );
- v6 = 0x7FFFFFFFFFFFFFFFi64;
- if ( v5 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_180001210();
- a1[3] = 15i64;
- if ( v5 >= 0x10 )
- {
- if ( (v5 | 0xF) <= 0x7FFFFFFFFFFFFFFFi64 )
- {
- v6 = v5 | 0xF;
- if ( (v5 | 0xF) < 0x16 )
- v6 = 22i64;
- if ( (unsigned __int64)(v6 + 1) < 0x1000 )
- {
- if ( v6 != -1 )
- v2 = sub_18000A224(v6 + 1);
- goto LABEL_18;
- }
- v7 = v6 + 40;
- if ( v6 + 40 <= (unsigned __int64)(v6 + 1) )
- Concurrency::cancel_current_task();
- }
- else
- {
- v7 = 0x8000000000000027ui64;
- }
- v8 = sub_18000A224(v7);
- if ( !v8 )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)(((unsigned __int64)v8 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v2 - 1) = v8;
- LABEL_18:
- *a1 = v2;
- a1[2] = v5;
- a1[3] = v6;
- memcpy(v2, a2, v5);
- *((_BYTE *)v2 + v5) = 0;
- return a1;
- }
- a1[2] = v5;
- memmove(a1, a2, v5);
- *((_BYTE *)a1 + v5) = 0;
- return a1;
- }
- //----- (0000000180002690) ----------------------------------------------------
- void __fastcall sub_180002690(__int64 a1)
- {
- __int64 v1; // rcx
- void (__fastcall ***v2)(_QWORD, __int64); // rax
- v1 = *(_QWORD *)(a1 + 24);
- if ( v1 )
- {
- v2 = (void (__fastcall ***)(_QWORD, __int64))(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v1 + 16i64))(v1);
- if ( v2 )
- (**v2)(v2, 1i64);
- }
- }
- //----- (00000001800026C0) ----------------------------------------------------
- void *__fastcall sub_1800026C0(void *Block, char a2)
- {
- *(_QWORD *)Block = &std::collate<wchar_t>::`vftable';
- free(*((void **)Block + 3));
- std::locale::facet::~facet((std::locale::facet *)Block);
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C0D8: using guessed type void std::locale::facet::~facet(std::locale::facet *__hidden this);
- // 18000C810: using guessed type void *std::collate<wchar_t>::`vftable';
- //----- (0000000180002710) ----------------------------------------------------
- __int64 __fastcall sub_180002710(__int64 *a1)
- {
- __int64 v2; // rcx
- __int64 result; // rax
- __int64 i; // rdi
- _QWORD *v5; // rax
- __int64 (__fastcall ***v6)(_QWORD, __int64); // rcx
- v2 = *a1;
- if ( v2
- && (result = (unsigned int)_InterlockedExchangeAdd((volatile signed __int32 *)(v2 + 44), 0xFFFFFFFF),
- (_DWORD)result == 1) )
- {
- for ( i = *a1; i; result = (**v6)(v6, 1i64) )
- {
- v5 = (_QWORD *)(i + 16);
- v6 = (__int64 (__fastcall ***)(_QWORD, __int64))i;
- i = *(_QWORD *)(i + 16);
- *v5 = 0i64;
- }
- *a1 = 0i64;
- }
- else
- {
- *a1 = 0i64;
- }
- return result;
- }
- //----- (0000000180002790) ----------------------------------------------------
- __int64 *__fastcall sub_180002790(__int64 *a1, unsigned __int16 *a2)
- {
- struct _Collvec **v4; // rsi
- unsigned __int16 *v5; // rcx
- unsigned __int16 *v6; // rdx
- unsigned __int16 *v7; // rcx
- __int64 v8; // rax
- __int64 v9; // rdi
- void *v10; // rcx
- char *v12; // [rsp+20h] [rbp-69h]
- unsigned __int16 *v13[2]; // [rsp+30h] [rbp-59h] BYREF
- __int128 v14; // [rsp+40h] [rbp-49h]
- void *Block[2]; // [rsp+50h] [rbp-39h]
- __int128 v16; // [rsp+60h] [rbp-29h]
- __int128 v17; // [rsp+70h] [rbp-19h]
- __int128 v18; // [rsp+80h] [rbp-9h]
- __int128 v19; // [rsp+90h] [rbp+7h]
- __int128 v20; // [rsp+A0h] [rbp+17h]
- __int64 v21; // [rsp+B0h] [rbp+27h]
- *a1 = 0i64;
- v4 = (struct _Collvec **)(a1 + 1);
- a1[4] = (__int64)std::locale::_Init(1);
- sub_180002B50(v4);
- v5 = a2;
- if ( *((_QWORD *)a2 + 3) < 8ui64 )
- {
- v6 = a2;
- }
- else
- {
- v5 = *(unsigned __int16 **)a2;
- v6 = *(unsigned __int16 **)a2;
- }
- v7 = &v5[*((_QWORD *)a2 + 2)];
- v17 = 0i64;
- v18 = 0i64;
- v19 = 0i64;
- v20 = 0i64;
- v21 = 0i64;
- v13[0] = v6;
- v13[1] = v6;
- v14 = (unsigned __int64)v7;
- *(_OWORD *)Block = 0i64;
- v16 = 0ui64;
- v12 = (char *)sub_18000A224(0x30ui64);
- *(_OWORD *)v12 = 0i64;
- *((_OWORD *)v12 + 1) = 0i64;
- *((_OWORD *)v12 + 2) = 0i64;
- *((_QWORD *)v12 + 1) = 20i64;
- *((_QWORD *)v12 + 2) = 0i64;
- *((_QWORD *)v12 + 3) = 0i64;
- *(_QWORD *)v12 = &std::_Root_node::`vftable';
- *(_QWORD *)(v12 + 36) = 0i64;
- *((_DWORD *)v12 + 11) = 0;
- *(_QWORD *)&v17 = v12;
- *((_QWORD *)&v17 + 1) = v12;
- LODWORD(v18) = 1;
- *((_QWORD *)&v18 + 1) = v4;
- *(_QWORD *)&v19 = 0x400000100i64;
- *((_QWORD *)&v19 + 1) = v4;
- LODWORD(v20) = 1;
- LODWORD(v21) = 142040571;
- sub_1800040D0(v13);
- v8 = sub_1800036C0((__int64)v13);
- v9 = v8;
- if ( v8 )
- _InterlockedIncrement((volatile signed __int32 *)(v8 + 44));
- sub_180002710(a1);
- *a1 = v9;
- v10 = Block[0];
- if ( Block[0] )
- {
- if ( (unsigned __int64)(4 * ((__int64)(v16 - (unsigned __int64)Block[0]) >> 2)) >= 0x1000 )
- {
- v10 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v10 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v10);
- }
- return a1;
- }
- // 18000C150: using guessed type struct std::locale::_Locimp *__stdcall static std::locale::_Init(bool);
- // 18000C8C8: using guessed type void *std::_Root_node::`vftable';
- //----- (0000000180002960) ----------------------------------------------------
- void *__fastcall sub_180002960(void *Src, unsigned __int64 a2, __int64 a3, __int64 a4)
- {
- __int64 v4; // r12
- __int64 v5; // rdi
- unsigned __int64 v8; // rbp
- __int64 v9; // rsi
- unsigned __int64 v10; // rdx
- size_t v11; // rcx
- unsigned __int64 v12; // rcx
- void *v13; // rax
- _QWORD *v14; // rbx
- size_t v15; // r8
- _WORD *v16; // rdi
- _QWORD *v17; // rsi
- __int64 i; // rcx
- __int64 j; // rcx
- v4 = *((_QWORD *)Src + 2);
- v5 = 0x7FFFFFFFFFFFFFFEi64;
- if ( 0x7FFFFFFFFFFFFFFEi64 - v4 < a2 )
- sub_180001210();
- v8 = *((_QWORD *)Src + 3);
- v9 = a2 + v4;
- v10 = (a2 + v4) | 7;
- if ( v10 <= 0x7FFFFFFFFFFFFFFEi64 )
- {
- v12 = v8 >> 1;
- if ( v8 <= 0x7FFFFFFFFFFFFFFEi64 - (v8 >> 1) )
- {
- v5 = v10;
- if ( v10 < v12 + v8 )
- v5 = v12 + v8;
- if ( (unsigned __int64)(v5 + 1) > 0x7FFFFFFFFFFFFFFFi64 )
- LABEL_33:
- Concurrency::cancel_current_task();
- v11 = 2 * (v5 + 1);
- if ( v11 < 0x1000 )
- {
- if ( v11 )
- v14 = sub_18000A224(v11);
- else
- v14 = 0i64;
- goto LABEL_16;
- }
- }
- else
- {
- v11 = -2i64;
- }
- }
- else
- {
- v11 = -2i64;
- }
- if ( v11 + 39 <= v11 )
- goto LABEL_33;
- v13 = sub_18000A224(v11 + 39);
- if ( !v13 )
- goto LABEL_25;
- v14 = (_QWORD *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v14 - 1) = v13;
- LABEL_16:
- *((_QWORD *)Src + 3) = v5;
- v15 = 2 * v4;
- *((_QWORD *)Src + 2) = v9;
- v16 = (_WORD *)v14 + v4;
- if ( v8 >= 8 )
- {
- v17 = *(_QWORD **)Src;
- memcpy(v14, *(const void **)Src, v15);
- if ( a4 )
- {
- for ( i = a4; i; --i )
- *v16++ = 0;
- }
- *((_WORD *)v14 + a4 + v4) = 0;
- if ( 2 * v8 + 2 < 0x1000 )
- goto LABEL_24;
- if ( (unsigned __int64)v17 - *(v17 - 1) - 8 <= 0x1F )
- {
- v17 = (_QWORD *)*(v17 - 1);
- LABEL_24:
- j_j_free(v17);
- goto LABEL_31;
- }
- LABEL_25:
- invalid_parameter_noinfo_noreturn();
- }
- memcpy(v14, Src, v15);
- if ( a4 )
- {
- for ( j = a4; j; --j )
- *v16++ = 0;
- }
- *((_WORD *)v14 + a4 + v4) = 0;
- LABEL_31:
- *(_QWORD *)Src = v14;
- return Src;
- }
- //----- (0000000180002B50) ----------------------------------------------------
- void __fastcall sub_180002B50(struct _Collvec **a1)
- {
- __int64 v2; // rbp
- unsigned __int64 v3; // r15
- struct _Collvec *v4; // rdx
- __int64 v5; // rsi
- struct _Collvec *v6; // rdi
- struct _Collvec *v7; // rbx
- __int64 v8; // rax
- unsigned __int64 v9; // rsi
- struct _Collvec *v10; // rdx
- __int64 v11; // rbx
- __int64 v12; // rax
- struct _Collvec *v13; // rbx
- struct _Collvec *v14; // [rsp+20h] [rbp-48h] BYREF
- char v15[8]; // [rsp+28h] [rbp-40h] BYREF
- struct _Collvec *v16; // [rsp+30h] [rbp-38h]
- std::_Lockit::_Lockit((std::_Lockit *)v15, 0);
- v2 = qword_1800109B8;
- v14 = (struct _Collvec *)qword_1800109B8;
- v3 = std::locale::id::operator unsigned __int64(std::collate<wchar_t>::id);
- v4 = a1[3];
- v5 = 8 * v3;
- v6 = 0i64;
- if ( (wchar_t *)v3 >= v4[1]._LocaleName )
- {
- v7 = 0i64;
- }
- else
- {
- v7 = *(struct _Collvec **)(v5 + *(_QWORD *)&v4[1]._Page);
- if ( v7 )
- goto LABEL_13;
- }
- if ( !*((_BYTE *)&v4[2]._Page + 4) )
- goto LABEL_8;
- v8 = std::locale::_Getgloballocale();
- if ( v3 < *(_QWORD *)(v8 + 24) )
- {
- v7 = *(struct _Collvec **)(v5 + *(_QWORD *)(v8 + 16));
- LABEL_8:
- if ( v7 )
- goto LABEL_13;
- }
- if ( v2 )
- {
- v7 = (struct _Collvec *)v2;
- }
- else
- {
- if ( sub_180003490(&v14, (__int64)(a1 + 2)) == -1 )
- Concurrency::cancel_current_task();
- v7 = v14;
- sub_18000A09C((__int64)v14);
- (*(void (__fastcall **)(struct _Collvec *))(*(_QWORD *)&v7->_Page + 8i64))(v7);
- qword_1800109B8 = (__int64)v7;
- }
- LABEL_13:
- std::_Lockit::~_Lockit((std::_Lockit *)v15);
- *a1 = v7;
- std::_Lockit::_Lockit((std::_Lockit *)v15, 0);
- v14 = (struct _Collvec *)qword_1800109C0;
- v9 = std::locale::id::operator unsigned __int64(std::ctype<wchar_t>::id);
- v10 = a1[3];
- v11 = 8 * v9;
- if ( (wchar_t *)v9 < v10[1]._LocaleName )
- {
- v6 = *(struct _Collvec **)(v11 + *(_QWORD *)&v10[1]._Page);
- if ( v6 )
- goto LABEL_22;
- }
- if ( !*((_BYTE *)&v10[2]._Page + 4) )
- goto LABEL_18;
- v12 = std::locale::_Getgloballocale();
- if ( v9 < *(_QWORD *)(v12 + 24) )
- {
- v6 = *(struct _Collvec **)(v11 + *(_QWORD *)(v12 + 16));
- LABEL_18:
- if ( v6 )
- goto LABEL_22;
- }
- v6 = v14;
- if ( !v14 )
- {
- if ( std::ctype<wchar_t>::_Getcat(&v14, a1 + 2) == -1 )
- Concurrency::cancel_current_task();
- v13 = v14;
- v16 = v14;
- sub_18000A09C((__int64)v14);
- (*(void (__fastcall **)(struct _Collvec *))(*(_QWORD *)&v13->_Page + 8i64))(v13);
- v6 = v14;
- qword_1800109C0 = (__int64)v14;
- }
- LABEL_22:
- std::_Lockit::~_Lockit((std::_Lockit *)v15);
- a1[1] = v6;
- }
- // 18000C0B8: using guessed type __int64 __fastcall std::ctype<wchar_t>::_Getcat(_QWORD, _QWORD);
- // 18000C0F8: using guessed type __int64 __fastcall std::locale::id::operator unsigned __int64(_QWORD);
- // 18000C128: using guessed type _QWORD std::_Lockit::_Lockit(std::_Lockit *__hidden this, _DWORD);
- // 18000C130: using guessed type void std::_Lockit::~_Lockit(std::_Lockit *__hidden this);
- // 18000C158: using guessed type __int64 std::locale::_Getgloballocale(void);
- // 1800109B8: using guessed type __int64 qword_1800109B8;
- // 1800109C0: using guessed type __int64 qword_1800109C0;
- // 180002B50: using guessed type char var_40[8];
- //----- (0000000180002D30) ----------------------------------------------------
- bool __fastcall sub_180002D30(__int64 a1, __int64 a2, __int64 a3, __int64 *a4, int a5)
- {
- __int64 v8; // rbx
- __int64 v10; // rdi
- unsigned __int64 v11; // rcx
- unsigned __int64 v12; // rbx
- bool v13; // bl
- void *v14; // rcx
- __int64 v15[30]; // [rsp+40h] [rbp-C0h] BYREF
- v8 = *a4;
- if ( !*a4 )
- return 0;
- memset(v15, 0, 0xE8ui64);
- sub_180003270((__int64)v15, a1, a2, (__int64)(a4 + 1), v8, *(_DWORD *)(v8 + 40), *(_DWORD *)(v8 + 32), a5);
- v15[19] = v15[21];
- v15[0] = v15[21];
- sub_1800038B0((unsigned __int64 *)&v15[1], HIDWORD(v15[24]));
- v10 = v15[6];
- v11 = (v15[6] - v15[5]) >> 4;
- if ( HIDWORD(v15[24]) >= v11 )
- {
- if ( HIDWORD(v15[24]) > v11 )
- {
- if ( HIDWORD(v15[24]) <= (unsigned __int64)((v15[7] - v15[5]) >> 4) )
- {
- v12 = HIDWORD(v15[24]) - v11;
- if ( v12 )
- {
- memset((void *)v15[6], 0, 16 * v12);
- v10 += 16 * v12;
- }
- v15[6] = v10;
- }
- else
- {
- sub_180004D30((__int64)&v15[5], HIDWORD(v15[24]));
- }
- }
- }
- else
- {
- v15[6] = v15[5] + 16i64 * HIDWORD(v15[24]);
- }
- LOWORD(v15[24]) = 0;
- LOBYTE(v15[27]) = 1;
- HIDWORD(v15[27]) = 10000000;
- LODWORD(v15[28]) = 600;
- v13 = sub_180004740((__int64)v15, v15[22]);
- v14 = (void *)v15[16];
- if ( v15[16] )
- {
- if ( ((v15[18] - v15[16]) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v14 = *(void **)(v15[16] - 8);
- if ( (unsigned __int64)(v15[16] - (_QWORD)v14 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v14);
- memset(&v15[16], 0, 24);
- }
- sub_180003160(&v15[8]);
- sub_180003160(v15);
- return v13;
- }
- //----- (0000000180002EF0) ----------------------------------------------------
- _QWORD *__fastcall sub_180002EF0(const void **a1, _BYTE *a2, _QWORD *a3)
- {
- __int64 v5; // r14
- __int64 v6; // rax
- unsigned __int64 v8; // rcx
- unsigned __int64 v9; // rdx
- unsigned __int64 v10; // r15
- unsigned __int64 v11; // rsi
- size_t v12; // rsi
- void *v13; // rax
- _QWORD *v14; // rbx
- _QWORD *v15; // r14
- void *v16; // rcx
- _BYTE *v17; // r8
- _BYTE *v18; // rdx
- size_t v19; // r8
- void *v20; // rcx
- _QWORD *result; // rax
- v5 = (a2 - (_BYTE *)*a1) >> 3;
- v6 = ((_BYTE *)a1[1] - (_BYTE *)*a1) >> 3;
- if ( v6 == 0x1FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v8 = ((_BYTE *)a1[2] - (_BYTE *)*a1) >> 3;
- v9 = v8 >> 1;
- v10 = v6 + 1;
- if ( v8 > 0x1FFFFFFFFFFFFFFFi64 - (v8 >> 1) )
- goto LABEL_24;
- v11 = v6 + 1;
- if ( v9 + v8 >= v10 )
- v11 = v9 + v8;
- if ( v11 > 0x1FFFFFFFFFFFFFFFi64 )
- goto LABEL_24;
- v12 = 8 * v11;
- if ( v12 < 0x1000 )
- {
- if ( v12 )
- v14 = sub_18000A224(v12);
- else
- v14 = 0i64;
- goto LABEL_13;
- }
- if ( v12 + 39 <= v12 )
- LABEL_24:
- Concurrency::cancel_current_task();
- v13 = sub_18000A224(v12 + 39);
- if ( !v13 )
- goto LABEL_22;
- v14 = (_QWORD *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v14 - 1) = v13;
- LABEL_13:
- v15 = &v14[v5];
- *v15 = *a3;
- v16 = v14;
- v17 = a1[1];
- v18 = *a1;
- if ( a2 == v17 )
- {
- v19 = v17 - v18;
- }
- else
- {
- memmove(v14, v18, a2 - v18);
- v16 = v15 + 1;
- v19 = (_BYTE *)a1[1] - a2;
- v18 = a2;
- }
- memmove(v16, v18, v19);
- v20 = (void *)*a1;
- if ( *a1 )
- {
- if ( (((_BYTE *)a1[2] - (_BYTE *)v20) & 0xFFFFFFFFFFFFFFF8ui64) < 0x1000 )
- {
- LABEL_20:
- j_j_free(v20);
- goto LABEL_21;
- }
- if ( (unsigned __int64)v20 - *((_QWORD *)v20 - 1) - 8 <= 0x1F )
- {
- v20 = (void *)*((_QWORD *)v20 - 1);
- goto LABEL_20;
- }
- LABEL_22:
- invalid_parameter_noinfo_noreturn();
- }
- LABEL_21:
- *a1 = v14;
- result = v15;
- a1[1] = &v14[v10];
- a1[2] = &v14[v12 / 8];
- return result;
- }
- //----- (0000000180003080) ----------------------------------------------------
- __int64 __fastcall sub_180003080(_QWORD *a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = (_QWORD *)a1[4];
- if ( v2 )
- {
- if ( ((a1[6] - (_QWORD)v2) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- a1[4] = 0i64;
- a1[5] = 0i64;
- a1[6] = 0i64;
- }
- return result;
- }
- //----- (00000001800030E0) ----------------------------------------------------
- void __fastcall sub_1800030E0(_QWORD *a1)
- {
- _QWORD *v2; // rcx
- v2 = (_QWORD *)a1[16];
- if ( v2 )
- {
- if ( ((a1[18] - (_QWORD)v2) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- a1[16] = 0i64;
- a1[17] = 0i64;
- a1[18] = 0i64;
- }
- sub_180003160(a1 + 8);
- sub_180003160(a1);
- }
- //----- (0000000180003160) ----------------------------------------------------
- void __fastcall sub_180003160(_QWORD *a1)
- {
- _QWORD *v2; // rcx
- _QWORD *v3; // rcx
- v2 = (_QWORD *)a1[5];
- if ( v2 )
- {
- if ( ((a1[7] - (_QWORD)v2) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- goto LABEL_12;
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- a1[5] = 0i64;
- a1[6] = 0i64;
- a1[7] = 0i64;
- }
- v3 = (_QWORD *)a1[1];
- if ( !v3 )
- return;
- if ( ((a1[3] - (_QWORD)v3) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v3 - *(v3 - 1) - 8 <= 0x1F )
- {
- v3 = (_QWORD *)*(v3 - 1);
- goto LABEL_10;
- }
- LABEL_12:
- invalid_parameter_noinfo_noreturn();
- }
- LABEL_10:
- j_j_free(v3);
- a1[1] = 0i64;
- a1[2] = 0i64;
- a1[3] = 0i64;
- }
- //----- (0000000180003210) ----------------------------------------------------
- __int64 __fastcall sub_180003210(_QWORD *a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = (_QWORD *)a1[1];
- if ( v2 )
- {
- if ( ((a1[3] - (_QWORD)v2) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- a1[1] = 0i64;
- a1[2] = 0i64;
- a1[3] = 0i64;
- }
- return result;
- }
- //----- (0000000180003270) ----------------------------------------------------
- __int64 __fastcall sub_180003270(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, int a6, int a7, int a8)
- {
- __int64 v9; // rsi
- bool v10; // al
- unsigned __int64 v11; // rbx
- __int64 v12; // rbp
- unsigned __int64 v13; // rcx
- unsigned __int64 v14; // rbx
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- *(_QWORD *)(a1 + 24) = 0i64;
- *(_QWORD *)(a1 + 32) = 0i64;
- *(_QWORD *)(a1 + 40) = 0i64;
- *(_QWORD *)(a1 + 48) = 0i64;
- *(_QWORD *)(a1 + 56) = 0i64;
- *(_QWORD *)(a1 + 72) = 0i64;
- *(_QWORD *)(a1 + 80) = 0i64;
- *(_QWORD *)(a1 + 88) = 0i64;
- *(_QWORD *)(a1 + 96) = 0i64;
- *(_QWORD *)(a1 + 104) = 0i64;
- *(_QWORD *)(a1 + 112) = 0i64;
- *(_QWORD *)(a1 + 120) = 0i64;
- v9 = a1 + 128;
- *(_QWORD *)(a1 + 128) = 0i64;
- *(_QWORD *)(a1 + 136) = 0i64;
- *(_QWORD *)(a1 + 144) = 0i64;
- *(_QWORD *)(a1 + 160) = a3;
- *(_QWORD *)(a1 + 168) = a2;
- *(_QWORD *)(a1 + 176) = a5;
- *(_DWORD *)(a1 + 184) = a7;
- *(_DWORD *)(a1 + 188) = a8;
- *(_BYTE *)(a1 + 192) = 0;
- *(_DWORD *)(a1 + 196) = a6;
- v10 = (*(_BYTE *)(a5 + 12) & 8) != 0 && (a8 & 0x10) == 0;
- *(_BYTE *)(a1 + 200) = v10;
- *(_QWORD *)(a1 + 208) = a4;
- v11 = *(unsigned int *)(a5 + 36);
- v12 = *(_QWORD *)(a1 + 136);
- v13 = v12 >> 4;
- if ( v11 >= v12 >> 4 )
- {
- if ( v11 > v13 )
- {
- if ( v11 <= *(__int64 *)(v9 + 16) >> 4 )
- {
- v14 = v11 - v13;
- if ( v14 )
- {
- memset(*(void **)(v9 + 8), 0, 16 * v14);
- v12 += 16 * v14;
- }
- *(_QWORD *)(v9 + 8) = v12;
- }
- else
- {
- sub_180004D30(v9, *(unsigned int *)(a5 + 36));
- }
- }
- }
- else
- {
- *(_QWORD *)(v9 + 8) = 16 * v11;
- }
- return a1;
- }
- //----- (00000001800033B0) ----------------------------------------------------
- void __noreturn sub_1800033B0()
- {
- std::_Xlength_error("vector too long");
- }
- // 18000C138: using guessed type void __stdcall __noreturn std::_Xlength_error(const char *);
- //----- (00000001800033D0) ----------------------------------------------------
- __int64 __fastcall sub_1800033D0(__int64 a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = *(_QWORD **)a1;
- if ( v2 )
- {
- if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v2) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- *(_QWORD *)a1 = 0i64;
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- }
- return result;
- }
- //----- (0000000180003430) ----------------------------------------------------
- __int64 __fastcall sub_180003430(__int64 a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = *(_QWORD **)a1;
- if ( v2 )
- {
- if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v2) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- *(_QWORD *)a1 = 0i64;
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- }
- return result;
- }
- //----- (0000000180003490) ----------------------------------------------------
- __int64 __fastcall sub_180003490(struct _Collvec **a1, __int64 a2)
- {
- struct _Collvec *v4; // r14
- __int64 v5; // rcx
- _BYTE *v6; // rdx
- struct _Collvec *v7; // rax
- char v8; // di
- char v9; // di
- void *v10; // rcx
- void *v11; // rcx
- char v12; // di
- void **v13; // rdx
- std::_Locinfo *v14; // rbx
- char v15; // di
- void *v16; // rcx
- void *v18[2]; // [rsp+28h] [rbp-A1h] BYREF
- struct _Collvec v19; // [rsp+38h] [rbp-91h]
- struct _Collvec v20; // [rsp+48h] [rbp-81h] BYREF
- __int64 v21; // [rsp+58h] [rbp-71h]
- unsigned __int64 v22; // [rsp+60h] [rbp-69h]
- void *Block[3]; // [rsp+68h] [rbp-61h] BYREF
- unsigned __int64 v24; // [rsp+80h] [rbp-49h]
- struct _Collvec *v25; // [rsp+88h] [rbp-41h]
- char v26[144]; // [rsp+90h] [rbp-39h] BYREF
- if ( a1 && !*a1 )
- {
- v4 = (struct _Collvec *)sub_18000A224(0x20ui64);
- v25 = v4;
- v5 = *(_QWORD *)(a2 + 8);
- if ( v5 )
- {
- v6 = *(_BYTE **)(v5 + 40);
- if ( !v6 )
- v6 = (_BYTE *)(v5 + 48);
- v7 = (struct _Collvec *)sub_180002570(Block, v6);
- v8 = 4;
- }
- else
- {
- v20 = 0i64;
- v21 = 0i64;
- v22 = 15i64;
- LOBYTE(v20._Page) = 0;
- v7 = &v20;
- v8 = 8;
- }
- *(_OWORD *)v18 = 0i64;
- v19 = (struct _Collvec)0i64;
- *(struct _Collvec *)v18 = *v7;
- v19 = v7[1];
- *(_QWORD *)&v7[1]._Page = 0i64;
- v7[1]._LocaleName = (wchar_t *)15;
- LOBYTE(v7->_Page) = 0;
- v9 = v8 | 0x10;
- if ( (v9 & 8) != 0 )
- {
- v9 &= ~8u;
- if ( v22 >= 0x10 )
- {
- v10 = *(void **)&v20._Page;
- if ( v22 + 1 >= 0x1000 )
- {
- v10 = *(void **)(*(_QWORD *)&v20._Page - 8i64);
- if ( (unsigned __int64)(*(_QWORD *)&v20._Page - (_QWORD)v10 - 8i64) > 0x1F )
- LABEL_17:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v10);
- }
- }
- if ( (v9 & 4) != 0 )
- {
- v9 &= ~4u;
- if ( v24 >= 0x10 )
- {
- v11 = Block[0];
- if ( v24 + 1 >= 0x1000 )
- {
- v11 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v11 - 8) > 0x1F )
- goto LABEL_17;
- }
- j_j_free(v11);
- }
- Block[2] = 0i64;
- v24 = 15i64;
- LOBYTE(Block[0]) = 0;
- }
- v12 = v9 | 1;
- v13 = v18;
- if ( v19._LocaleName >= (wchar_t *)0x10 )
- v13 = (void **)v18[0];
- v14 = (std::_Locinfo *)std::_Locinfo::_Locinfo((std::_Locinfo *)v26, (const char *)v13);
- v15 = v12 | 2;
- std::locale::facet::facet((std::locale::facet *)v4, 0i64);
- *(_QWORD *)&v4->_Page = &std::collate<wchar_t>::`vftable';
- v4[1] = *std::_Locinfo::_Getcoll(v14, &v20);
- *a1 = v4;
- if ( (v15 & 2) != 0 )
- {
- v15 &= ~2u;
- std::_Locinfo::~_Locinfo((std::_Locinfo *)v26);
- }
- if ( (v15 & 1) != 0 && v19._LocaleName >= (wchar_t *)0x10 )
- {
- v16 = v18[0];
- if ( (unsigned __int64)v19._LocaleName + 1 >= 0x1000 )
- {
- v16 = (void *)*((_QWORD *)v18[0] - 1);
- if ( (unsigned __int64)(v18[0] - v16 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v16);
- }
- }
- return 1i64;
- }
- // 18000C0E0: using guessed type _QWORD std::locale::facet::facet(std::locale::facet *__hidden this, unsigned __int64);
- // 18000C108: using guessed type struct _Collvec *std::_Locinfo::_Getcoll(std::_Locinfo *__hidden this, struct _Collvec *__return_ptr __struct_ptr retstr);
- // 18000C110: using guessed type void std::_Locinfo::~_Locinfo(std::_Locinfo *__hidden this);
- // 18000C118: using guessed type _QWORD std::_Locinfo::_Locinfo(std::_Locinfo *__hidden this, const char *);
- // 18000C810: using guessed type void *std::collate<wchar_t>::`vftable';
- //----- (00000001800036C0) ----------------------------------------------------
- __int64 __fastcall sub_1800036C0(__int64 a1)
- {
- __int64 *v2; // rbx
- _OWORD *v3; // rsi
- __int64 v4; // rcx
- _OWORD *v5; // rdx
- __int64 v6; // rcx
- __int64 v7; // r11
- __int64 v8; // r9
- __int64 i; // r10
- __int64 j; // rax
- v2 = (__int64 *)(a1 + 64);
- v3 = sub_1800046B0(a1 + 64, 0);
- sub_1800043A0(a1);
- if ( *(_QWORD *)a1 != *(_QWORD *)(a1 + 16) )
- sub_1800040C0(v4, 0xEu);
- sub_180004600((__int64)v2, (__int64)v3);
- v5 = sub_18000A224(0x20ui64);
- *v5 = 0i64;
- v5[1] = 0i64;
- *(_QWORD *)v5 = &std::_Node_base::`vftable';
- *((_QWORD *)v5 + 1) = 21i64;
- *((_QWORD *)v5 + 2) = 0i64;
- *((_QWORD *)v5 + 3) = 0i64;
- *((_QWORD *)v5 + 3) = v2[1];
- v6 = *(_QWORD *)(v2[1] + 16);
- if ( v6 )
- {
- *((_QWORD *)v5 + 2) = v6;
- *(_QWORD *)(*(_QWORD *)(v2[1] + 16) + 24i64) = v5;
- }
- *(_QWORD *)(v2[1] + 16) = v5;
- v2[1] = (__int64)v5;
- v7 = *v2;
- *(_DWORD *)(v7 + 32) = *(_DWORD *)(a1 + 112);
- *(_DWORD *)(v7 + 40) = *(_DWORD *)(a1 + 24) + 1;
- v8 = 0i64;
- for ( i = v7; i; i = *(_QWORD *)(i + 16) )
- {
- switch ( *(_DWORD *)(i + 8) )
- {
- case 0xA:
- case 0xB:
- sub_180001500(*(_QWORD *)(i + 32), 0i64, 0i64);
- break;
- case 0x10:
- if ( v8 )
- *(_DWORD *)(v8 + 52) = 0;
- for ( j = *(_QWORD *)(i + 40); j; j = *(_QWORD *)(sub_180001500(*(_QWORD *)(j + 16), *(_QWORD *)(j + 32), v8)
- + 40) )
- ;
- break;
- case 0x12:
- if ( v8 )
- {
- *(_DWORD *)(v8 + 52) = 0;
- *(_DWORD *)(i + 52) = 0;
- }
- else
- {
- v8 = i;
- }
- break;
- default:
- if ( *(_DWORD *)(i + 8) == 19 && v8 == *(_QWORD *)(i + 32) )
- {
- if ( *(_DWORD *)(v8 + 52) == -1 )
- *(_DWORD *)(v8 + 52) = 1;
- v8 = 0i64;
- }
- break;
- }
- }
- return v7;
- }
- // 1800037B4: variable 'v8' is possibly undefined
- // 180003819: variable 'i' is possibly undefined
- // 180003826: variable 'v7' is possibly undefined
- // 18000383E: variable 'v4' is possibly undefined
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180003850) ----------------------------------------------------
- __int64 __fastcall sub_180003850(__int64 **a1)
- {
- __int64 *v1; // rdi
- __int64 i; // rbx
- _QWORD *v3; // rax
- __int64 (__fastcall ***v4)(_QWORD, __int64); // rcx
- __int64 result; // rax
- v1 = *a1;
- if ( *a1 )
- {
- for ( i = *v1; i; result = (**v4)(v4, 1i64) )
- {
- v3 = (_QWORD *)(i + 16);
- v4 = (__int64 (__fastcall ***)(_QWORD, __int64))i;
- i = *(_QWORD *)(i + 16);
- *v3 = 0i64;
- }
- *v1 = 0i64;
- }
- return result;
- }
- //----- (00000001800038B0) ----------------------------------------------------
- __int128 *__fastcall sub_1800038B0(unsigned __int64 *a1, unsigned __int64 a2)
- {
- __int64 v2; // r8
- unsigned __int64 v4; // rcx
- __int128 *result; // rax
- unsigned __int64 v6; // r9
- __int128 v7; // [rsp+30h] [rbp-58h] BYREF
- __int128 v8; // [rsp+40h] [rbp-48h] BYREF
- __int128 v9; // [rsp+50h] [rbp-38h] BYREF
- char v10[16]; // [rsp+60h] [rbp-28h] BYREF
- v2 = a1[3];
- v10[0] = 0;
- if ( v2 >= a2 )
- {
- if ( v2 > a2 )
- {
- v6 = *a1;
- if ( v2 >= 0 )
- *(_QWORD *)&v7 = v6 + 4 * ((unsigned __int64)v2 >> 5);
- else
- *(_QWORD *)&v7 = v6 - (4 * ((unsigned __int64)~v2 >> 5) + 4);
- *((_QWORD *)&v7 + 1) = v2 & 0x1F;
- if ( (a2 & 0x8000000000000000ui64) == 0i64 )
- *(_QWORD *)&v8 = v6 + 4 * (a2 >> 5);
- else
- *(_QWORD *)&v8 = v6 - (4 * (~a2 >> 5) + 4);
- *((_QWORD *)&v8 + 1) = a2 & 0x1F;
- return sub_180003C00(a1, &v9, &v8, &v7);
- }
- }
- else
- {
- v4 = *a1;
- if ( v2 >= 0 )
- *(_QWORD *)&v7 = v4 + 4 * ((unsigned __int64)v2 >> 5);
- else
- *(_QWORD *)&v7 = v4 - (4 * ((unsigned __int64)~v2 >> 5) + 4);
- *((_QWORD *)&v7 + 1) = v2 & 0x1F;
- v8 = v7;
- return sub_180003A40((__int64 *)a1, &v7, &v8, a2 - v2, v10);
- }
- return result;
- }
- // 1800038E9: conditional instruction was optimized away because r8.8<0
- // 180003978: conditional instruction was optimized away because r8.8<0
- // 1800039BD: conditional instruction was optimized away because rdx.8<0
- // 1800038B0: using guessed type char var_28[16];
- //----- (0000000180003A40) ----------------------------------------------------
- __int128 *__fastcall sub_180003A40(__int64 *a1, __int128 *a2, __int128 *a3, signed __int64 a4, char *a5)
- {
- __int64 v8; // rax
- unsigned int v9; // ebp
- unsigned __int64 *v10; // rdx
- unsigned __int64 v11; // r8
- __int64 v12; // rax
- unsigned __int64 v13; // rcx
- __int128 v14; // xmm0
- unsigned __int64 v15; // rsi
- unsigned int *v16; // r14
- char v17; // r15
- unsigned __int64 v18; // rsi
- __int64 v19; // rcx
- int v20; // er10
- int v21; // er9
- int v23; // eax
- __int128 v24; // [rsp+20h] [rbp-48h] BYREF
- v24 = *a3;
- v8 = sub_180003E90(a1, &v24, a4);
- v9 = 0;
- v10 = (unsigned __int64 *)a2 + 1;
- *((_QWORD *)&v24 + 1) = 0i64;
- *a2 = 0i64;
- *(_QWORD *)&v24 = *a1;
- *a2 = v24;
- if ( v8 >= 0 || *v10 >= -v8 )
- {
- v11 = v8 + *v10;
- v12 = 4 * (v11 >> 5);
- }
- else
- {
- v11 = v8 + *v10;
- v12 = -4i64 - 4 * (~v11 >> 5);
- }
- *(_QWORD *)a2 += v12;
- *v10 = v11;
- *v10 = v11 & 0x1F;
- v13 = *((_QWORD *)a2 + 1);
- v14 = *a2;
- v24 = *a2;
- if ( a4 >= 0 || v13 >= -a4 )
- {
- v15 = v13 + a4;
- v16 = (unsigned int *)(v24 + 4 * (v15 >> 5));
- }
- else
- {
- v15 = v13 + a4;
- v16 = (unsigned int *)(-4i64 - 4 * (~v15 >> 5) + v24);
- }
- v17 = *a5;
- v18 = v15 & 0x1F;
- v19 = *((_QWORD *)a2 + 1);
- if ( (unsigned int *)v14 == v16 && v19 == v18 )
- return a2;
- v20 = *(_DWORD *)v14;
- v21 = ~(-1 << v19);
- if ( (unsigned int *)v14 != v16 )
- {
- v23 = 0;
- if ( v17 )
- v23 = -1 << v19;
- *(_DWORD *)v14 = v21 & v20 | v23;
- memset((void *)(v14 + 4), (unsigned __int8)-(v17 != 0), (size_t)v16 - v14 - 4);
- if ( v18 )
- {
- if ( v17 )
- v9 = 0xFFFFFFFF >> (32 - v18);
- *v16 = *v16 & ~(0xFFFFFFFF >> (32 - v18)) | v9;
- }
- return a2;
- }
- if ( v17 )
- v9 = 0xFFFFFFFF >> (32 - v18);
- *(_DWORD *)v14 = (-1 << v19) & v9 | v20 & (v21 | ~(0xFFFFFFFF >> (32 - v18)));
- return a2;
- }
- //----- (0000000180003C00) ----------------------------------------------------
- _OWORD *__fastcall sub_180003C00(unsigned __int64 *a1, _OWORD *a2, _QWORD *a3, _QWORD *a4)
- {
- __int64 v6; // rbx
- __int64 v7; // rdi
- __int64 v8; // rdx
- int *v9; // r8
- unsigned __int64 v10; // rdx
- __int64 v11; // rcx
- int *v12; // r10
- unsigned __int64 v13; // rcx
- __int64 v14; // r11
- int *v15; // rbx
- int v16; // edi
- int v17; // er9
- int v18; // er9
- __int64 v19; // r9
- unsigned __int64 v20; // r8
- unsigned __int64 v21; // rdx
- unsigned __int64 v22; // rax
- int v23; // er8
- unsigned __int64 *v24; // rdx
- unsigned __int64 v25; // rcx
- unsigned __int64 v26; // r8
- v6 = *a1;
- v7 = a1[3];
- if ( v7 )
- {
- v8 = a3[1] + 32 * ((*a3 - v6) >> 2);
- if ( v8 >= 0 )
- v9 = (int *)(v6 + 4 * ((unsigned __int64)v8 >> 5));
- else
- v9 = (int *)(v6 - (4 * ((unsigned __int64)~v8 >> 5) + 4));
- v10 = v8 & 0x1F;
- v11 = a4[1] + 32 * ((*a4 - v6) >> 2);
- if ( v11 >= 0 )
- v12 = (int *)(v6 + 4 * ((unsigned __int64)v11 >> 5));
- else
- v12 = (int *)(v6 - (4 * ((unsigned __int64)~v11 >> 5) + 4));
- v13 = v11 & 0x1F;
- v14 = v10 + 32 * (((__int64)v9 - v6) >> 2);
- if ( v9 != v12 || v10 != v13 )
- {
- if ( v7 >= 0 )
- v15 = (int *)(v6 + 4 * ((unsigned __int64)v7 >> 5));
- else
- v15 = (int *)(v6 - (4 * ((unsigned __int64)~v7 >> 5) + 4));
- v16 = v7 & 0x1F;
- while ( v12 != v15 || v13 != v16 )
- {
- v17 = *v9;
- if ( ((1 << v13) & *v12) != 0 )
- v18 = v17 | (1 << v10);
- else
- v18 = v17 & ~(1 << v10);
- *v9 = v18;
- if ( v10 >= 0x1F )
- {
- v10 = 0i64;
- ++v9;
- }
- else
- {
- ++v10;
- }
- if ( v13 >= 0x1F )
- {
- v13 = 0i64;
- ++v12;
- }
- else
- {
- ++v13;
- }
- }
- v19 = *a1;
- v20 = v10 + 32 * ((__int64)((__int64)v9 - *a1) >> 2);
- if ( v20 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_180003E70();
- v21 = (v20 + 31) >> 5;
- if ( v21 < (__int64)(a1[1] - v19) >> 2 )
- {
- v22 = v19 + 4 * v21;
- if ( v22 != a1[1] )
- a1[1] = v22;
- }
- a1[3] = v20;
- v23 = v20 & 0x1F;
- if ( v23 )
- *(_DWORD *)(v19 + 4 * v21 - 4) &= (1 << v23) - 1;
- }
- }
- else
- {
- v14 = 0i64;
- }
- *a2 = *a1;
- v24 = (unsigned __int64 *)a2 + 1;
- if ( v14 >= 0 || (v25 = *v24, *v24 >= -v14) )
- {
- v26 = v14 + *v24;
- *(_QWORD *)a2 += 4 * (v26 >> 5);
- }
- else
- {
- v26 = v25 + v14;
- *(_QWORD *)a2 += -4i64 - 4 * (~(v25 + v14) >> 5);
- }
- *v24 = v26;
- *v24 = v26 & 0x1F;
- return a2;
- }
- // 180003C4E: conditional instruction was optimized away because rdx.8<0
- // 180003C9E: conditional instruction was optimized away because rcx.8<0
- // 180003CF2: conditional instruction was optimized away because rdi.8<0
- //----- (0000000180003E70) ----------------------------------------------------
- void __noreturn sub_180003E70()
- {
- std::_Xlength_error("vector<bool> too long");
- }
- // 18000C138: using guessed type void __stdcall __noreturn std::_Xlength_error(const char *);
- //----- (0000000180003E90) ----------------------------------------------------
- __int64 __fastcall sub_180003E90(__int64 *a1, _QWORD *a2, unsigned __int64 a3)
- {
- __int64 v3; // r10
- __int64 v6; // rbp
- __int64 v7; // rcx
- char *v8; // rsi
- unsigned __int64 v9; // rbx
- unsigned __int64 v10; // rcx
- size_t v11; // rbx
- __int64 v12; // rcx
- __int64 v14; // r11
- _DWORD *v15; // r10
- unsigned __int64 v16; // r8
- __int64 v17; // rdx
- _DWORD *v18; // r11
- __int64 v19; // r8
- int *v20; // r9
- __int64 v21; // rcx
- int v22; // eax
- int v23[4]; // [rsp+20h] [rbp-38h] BYREF
- int *v24; // [rsp+30h] [rbp-28h]
- __int64 v25; // [rsp+38h] [rbp-20h]
- v3 = *a1;
- v6 = a2[1] + 32 * ((*a2 - *a1) >> 2);
- if ( a3 )
- {
- v7 = a1[3];
- if ( 0x7FFFFFFFFFFFFFFFi64 - v7 < a3 )
- sub_180003E70();
- v8 = (char *)a1[1];
- v9 = (a3 + v7 + 31) >> 5;
- v23[0] = 0;
- v10 = (__int64)&v8[-v3] >> 2;
- if ( v9 >= v10 )
- {
- if ( v9 > v10 )
- {
- if ( v9 <= (a1[2] - v3) >> 2 )
- {
- v11 = 4 * (v9 - v10);
- memset(v8, 0, v11);
- a1[1] = (__int64)&v8[v11];
- }
- else
- {
- sub_180006230((__int64)a1, v9, v23);
- }
- }
- }
- else
- {
- a1[1] = v3 + 4 * v9;
- }
- v12 = a1[3];
- if ( v12 )
- {
- v14 = *a1;
- if ( v12 >= 0 )
- v15 = (_DWORD *)(v14 + 4 * ((unsigned __int64)v12 >> 5));
- else
- v15 = (_DWORD *)(v14 - (4 * ((unsigned __int64)~v12 >> 5) + 4));
- v16 = a3 + v12;
- v17 = a1[3] & 0x1F;
- a1[3] = a3 + v12;
- if ( (__int64)(a3 + v12) >= 0 )
- v24 = (int *)(v14 + 4 * (v16 >> 5));
- else
- v24 = (int *)(v14 - (4 * (~v16 >> 5) + 4));
- v25 = v16 & 0x1F;
- if ( v6 >= 0 )
- v18 = (_DWORD *)(v14 + 4 * ((unsigned __int64)v6 >> 5));
- else
- v18 = (_DWORD *)(v14 - (4 * ((unsigned __int64)~v6 >> 5) + 4));
- v19 = v25;
- v20 = v24;
- while ( 1 )
- {
- v21 = v17;
- if ( v18 == v15 && (v6 & 0x1F) == v17 )
- break;
- if ( v17 )
- --v17;
- else
- v17 = 31i64;
- if ( !v21 )
- --v15;
- if ( v19 )
- {
- --v19;
- }
- else
- {
- v19 = 31i64;
- --v20;
- }
- v22 = *v20;
- if ( ((1 << v17) & *v15) != 0 )
- *v20 = v22 | (1 << v19);
- else
- *v20 = v22 & ~(1 << v19);
- }
- }
- else
- {
- a1[3] = a3;
- }
- }
- return v6;
- }
- // 180003F85: conditional instruction was optimized away because rcx.8<0
- // 18000400A: conditional instruction was optimized away because rbp.8<0
- // 180003E90: using guessed type int var_38[4];
- //----- (00000001800040C0) ----------------------------------------------------
- void __fastcall __noreturn sub_1800040C0(__int64 a1, unsigned int a2)
- {
- std::_Xregex_error(a2);
- JUMPOUT(0x1800040CCi64);
- }
- // 1800040C6: control flows out of bounds to 1800040CC
- // 18000C0B0: using guessed type __int64 __fastcall std::_Xregex_error(_QWORD);
- //----- (00000001800040D0) ----------------------------------------------------
- __int16 __fastcall sub_1800040D0(unsigned __int16 **a1)
- {
- unsigned __int16 v2; // cx
- char *v3; // rax
- int v4; // eax
- bool v5; // zf
- unsigned __int16 *v6; // rcx
- int v7; // edx
- unsigned __int16 *v8; // rdx
- int v9; // ecx
- unsigned int v10; // edx
- unsigned __int16 *v11; // rdx
- int v12; // ecx
- unsigned int v13; // edx
- if ( *a1 == a1[2] )
- {
- v2 = -1;
- LODWORD(v3) = -1;
- *((_WORD *)a1 + 60) = -1;
- }
- else
- {
- v4 = **a1;
- *((_WORD *)a1 + 60) = v4;
- v3 = strchr("()$^.*+?[]|\\-{},:=!\n\r\b", v4);
- v2 = *((_WORD *)a1 + 60);
- v5 = v3 == 0i64;
- LODWORD(v3) = v2;
- if ( v5 )
- LODWORD(v3) = 0;
- }
- *((_DWORD *)a1 + 31) = (_DWORD)v3;
- LOWORD(v3) = v2 - 10;
- switch ( v2 )
- {
- case 0xAu:
- if ( ((_BYTE)a1[16] & 4) != 0 && !*((_DWORD *)a1 + 7) )
- *((_DWORD *)a1 + 31) = 124;
- break;
- case 0x24u:
- if ( ((_DWORD)a1[16] & 0x2000000) != 0 )
- {
- v3 = (char *)(*a1 + 1);
- if ( v3 != (char *)a1[2] && *(_WORD *)v3 != 10 )
- *((_DWORD *)a1 + 31) = 0;
- }
- break;
- case 0x28u:
- case 0x29u:
- if ( ((_BYTE)a1[16] & 8) == 0 )
- *((_DWORD *)a1 + 31) = 0;
- break;
- case 0x2Au:
- if ( ((_DWORD)a1[16] & 0x4000000) != 0 )
- {
- v8 = a1[9];
- v9 = 1057024;
- LODWORD(v3) = *((_DWORD *)v8 + 2);
- if ( (unsigned int)v3 <= 0x14 )
- {
- if ( _bittest(&v9, (unsigned int)v3) )
- goto LABEL_25;
- }
- if ( (_DWORD)v3 == 2 )
- {
- v3 = (char *)*((_QWORD *)v8 + 3);
- v10 = *((_DWORD *)v3 + 2);
- if ( v10 <= 0x14 )
- {
- if ( _bittest(&v9, v10) )
- goto LABEL_25;
- }
- }
- }
- break;
- case 0x2Bu:
- case 0x3Fu:
- if ( ((_BYTE)a1[16] & 1) == 0 )
- *((_DWORD *)a1 + 31) = 0;
- break;
- case 0x5Cu:
- v6 = *a1 + 1;
- if ( v6 != a1[2] )
- {
- if ( (v7 = *((_DWORD *)a1 + 32), (v7 & 8) == 0) && (LOWORD(v3) = *v6 - 40, (unsigned __int16)v3 <= 1u)
- || (v7 & 0x10) == 0 && (LOWORD(v3) = *v6 - 123, ((unsigned __int16)v3 & 0xFFFD) == 0) )
- {
- LODWORD(v3) = *v6;
- *((_WORD *)a1 + 60) = (_WORD)v3;
- *((_DWORD *)a1 + 31) = (_DWORD)v3;
- }
- }
- break;
- case 0x5Eu:
- if ( ((_DWORD)a1[16] & 0x2000000) != 0 )
- {
- v11 = a1[9];
- v12 = 1057024;
- LODWORD(v3) = *((_DWORD *)v11 + 2);
- if ( (unsigned int)v3 > 0x14 || !_bittest(&v12, (unsigned int)v3) )
- {
- if ( (_DWORD)v3 == 2 && (v3 = (char *)*((_QWORD *)v11 + 3), v13 = *((_DWORD *)v3 + 2), v13 <= 0x14) )
- {
- if ( !_bittest(&v12, v13) )
- *((_DWORD *)a1 + 31) = 0;
- }
- else
- {
- LABEL_25:
- *((_DWORD *)a1 + 31) = 0;
- }
- }
- }
- break;
- case 0x7Bu:
- case 0x7Du:
- if ( ((_BYTE)a1[16] & 0x10) == 0 )
- *((_DWORD *)a1 + 31) = 0;
- break;
- case 0x7Cu:
- LODWORD(v3) = *((_DWORD *)a1 + 31);
- if ( ((_BYTE)a1[16] & 2) == 0 )
- LODWORD(v3) = 0;
- *((_DWORD *)a1 + 31) = (_DWORD)v3;
- break;
- default:
- return (__int16)v3;
- }
- return (__int16)v3;
- }
- //----- (00000001800043A0) ----------------------------------------------------
- char __fastcall sub_1800043A0(__int64 a1)
- {
- __int64 v1; // r13
- __int64 v3; // rax
- __int64 v4; // rbp
- _OWORD *v5; // rax
- _OWORD *v6; // rsi
- __int64 v7; // rcx
- __int64 v8; // rcx
- unsigned __int16 *v9; // rax
- unsigned __int16 *v10; // rdx
- unsigned __int16 *v11; // rcx
- int v12; // edx
- _OWORD *v13; // rax
- __int64 v14; // rbx
- __int64 v15; // r14
- __int64 v16; // rax
- __int64 i; // rax
- _OWORD *v19; // [rsp+50h] [rbp+8h]
- _OWORD *v20; // [rsp+50h] [rbp+8h]
- v1 = *(_QWORD *)(a1 + 72);
- LOBYTE(v3) = sub_180004FE0(a1);
- if ( (_BYTE)v3 )
- {
- v4 = a1 + 64;
- }
- else
- {
- if ( *(_DWORD *)(a1 + 124) != 124 )
- return v3;
- v4 = a1 + 64;
- v5 = sub_1800055C0(a1 + 64, 8);
- sub_180004600(a1 + 64, (__int64)v5);
- }
- v6 = sub_18000A224(0x20ui64);
- *v6 = 0i64;
- v6[1] = 0i64;
- *((_QWORD *)v6 + 3) = 0i64;
- *((_QWORD *)v6 + 1) = 17i64;
- *((_QWORD *)v6 + 2) = 0i64;
- *(_QWORD *)v6 = &std::_Node_endif::`vftable';
- *((_QWORD *)v6 + 3) = *(_QWORD *)(v4 + 8);
- v7 = *(_QWORD *)(*(_QWORD *)(v4 + 8) + 16i64);
- if ( v7 )
- {
- *((_QWORD *)v6 + 2) = v7;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(v4 + 8) + 16i64) + 24i64) = v6;
- }
- *(_QWORD *)(*(_QWORD *)(v4 + 8) + 16i64) = v6;
- *(_QWORD *)(v4 + 8) = v6;
- v19 = sub_18000A224(0x30ui64);
- *v19 = 0i64;
- v19[1] = 0i64;
- v19[2] = 0i64;
- *((_QWORD *)v19 + 1) = 16i64;
- *((_QWORD *)v19 + 2) = 0i64;
- *((_QWORD *)v19 + 3) = 0i64;
- *(_QWORD *)v19 = &std::_Node_if::`vftable';
- *((_QWORD *)v19 + 4) = v6;
- *((_QWORD *)v19 + 5) = 0i64;
- v8 = *(_QWORD *)(v1 + 16);
- *(_QWORD *)(*(_QWORD *)(v8 + 24) + 16i64) = v19;
- v3 = *(_QWORD *)(v8 + 24);
- *((_QWORD *)v19 + 3) = v3;
- *(_QWORD *)(v8 + 24) = v19;
- *((_QWORD *)v19 + 2) = v8;
- if ( *(_DWORD *)(a1 + 124) == 124 )
- {
- while ( 1 )
- {
- v9 = *(unsigned __int16 **)a1;
- v10 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v10 )
- break;
- LABEL_20:
- sub_1800040D0((unsigned __int16 **)a1);
- if ( !sub_180004FE0(a1) )
- {
- v13 = sub_1800055C0(v4, 8);
- sub_180004600(v4, (__int64)v13);
- }
- v14 = *(_QWORD *)(v1 + 16);
- v15 = *((_QWORD *)v6 + 2);
- *((_QWORD *)v6 + 2) = 0i64;
- v16 = *(_QWORD *)(v4 + 8);
- *(_QWORD *)(v4 + 8) = v6;
- *((_QWORD *)v6 + 2) = 0i64;
- *(_QWORD *)(v16 + 16) = v6;
- for ( i = *(_QWORD *)(v14 + 40); i; i = *(_QWORD *)(i + 40) )
- v14 = i;
- v20 = sub_18000A224(0x30ui64);
- *v20 = 0i64;
- v20[1] = 0i64;
- v20[2] = 0i64;
- *((_QWORD *)v20 + 1) = 16i64;
- *((_QWORD *)v20 + 3) = 0i64;
- *(_QWORD *)v20 = &std::_Node_if::`vftable';
- *((_QWORD *)v20 + 4) = v6;
- *((_QWORD *)v20 + 5) = 0i64;
- *(_QWORD *)(v14 + 40) = v20;
- *((_QWORD *)v20 + 2) = v15;
- v3 = *(_QWORD *)(v14 + 40);
- *(_QWORD *)(v15 + 24) = v3;
- if ( *(_DWORD *)(a1 + 124) != 124 )
- return v3;
- }
- if ( *v9 != 92 || (v11 = v9 + 1, v9 + 1 == v10) )
- {
- LABEL_19:
- *(_QWORD *)a1 = v9 + 1;
- goto LABEL_20;
- }
- v12 = *(_DWORD *)(a1 + 128);
- if ( (v12 & 8) == 0 )
- {
- if ( *v11 == 40 || *v11 == 41 )
- {
- LABEL_18:
- v9 = v11;
- goto LABEL_19;
- }
- v9 = *(unsigned __int16 **)a1;
- }
- if ( (v12 & 0x10) != 0 || *v11 != 123 && *v11 != 125 )
- goto LABEL_19;
- goto LABEL_18;
- }
- return v3;
- }
- // 18000C868: using guessed type void *std::_Node_if::`vftable';
- // 18000C878: using guessed type void *std::_Node_endif::`vftable';
- //----- (0000000180004600) ----------------------------------------------------
- __int64 __fastcall sub_180004600(__int64 a1, __int64 a2)
- {
- int v2; // eax
- int v5; // edi
- _OWORD *v6; // rdx
- __int64 v7; // rcx
- __int64 result; // rax
- v2 = *(_DWORD *)(a2 + 8);
- if ( v2 == 8 )
- {
- v5 = 9;
- }
- else
- {
- v5 = 12;
- if ( (unsigned int)(v2 - 10) > 1 )
- v5 = 14;
- }
- v6 = sub_18000A224(0x28ui64);
- *v6 = 0i64;
- v6[1] = 0i64;
- *((_QWORD *)v6 + 3) = 0i64;
- *((_DWORD *)v6 + 3) = 0;
- *((_QWORD *)v6 + 2) = 0i64;
- *(_QWORD *)v6 = &std::_Node_end_group::`vftable';
- *((_DWORD *)v6 + 2) = v5;
- *((_QWORD *)v6 + 4) = a2;
- *((_QWORD *)v6 + 3) = *(_QWORD *)(a1 + 8);
- v7 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64);
- if ( v7 )
- {
- *((_QWORD *)v6 + 2) = v7;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) + 24i64) = v6;
- }
- result = *(_QWORD *)(a1 + 8);
- *(_QWORD *)(result + 16) = v6;
- *(_QWORD *)(a1 + 8) = v6;
- return result;
- }
- // 18000C8B8: using guessed type void *std::_Node_end_group::`vftable';
- //----- (00000001800046B0) ----------------------------------------------------
- _OWORD *__fastcall sub_1800046B0(__int64 a1, int a2)
- {
- _OWORD *v4; // rdx
- __int64 v5; // rcx
- _OWORD *result; // rax
- v4 = sub_18000A224(0x28ui64);
- *v4 = 0i64;
- v4[1] = 0i64;
- *((_QWORD *)v4 + 4) = 0i64;
- *((_QWORD *)v4 + 3) = 0i64;
- *((_QWORD *)v4 + 2) = 0i64;
- *(_QWORD *)v4 = &std::_Node_capture::`vftable';
- *((_QWORD *)v4 + 1) = 13i64;
- *((_DWORD *)v4 + 8) = a2;
- *((_QWORD *)v4 + 3) = *(_QWORD *)(a1 + 8);
- v5 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64);
- if ( v5 )
- {
- *((_QWORD *)v4 + 2) = v5;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) + 24i64) = v4;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) = v4;
- result = v4;
- *(_QWORD *)(a1 + 8) = v4;
- return result;
- }
- // 18000C898: using guessed type void *std::_Node_capture::`vftable';
- //----- (0000000180004740) ----------------------------------------------------
- bool __fastcall sub_180004740(__int64 a1, __int64 a2)
- {
- __int64 v2; // rsi
- int v4; // eax
- int v5; // eax
- int v6; // eax
- int v7; // eax
- char v8; // bp
- int v9; // edx
- int v10; // ebp
- unsigned __int16 *v11; // rax
- __int16 *v12; // rax
- const void **v13; // r12
- __int64 v14; // rdi
- unsigned __int64 v15; // rdx
- signed __int64 v16; // rdi
- char *v17; // r14
- char *v18; // r15
- __int64 v19; // r13
- char *v20; // rax
- unsigned __int64 i; // r8
- _DWORD *v22; // rdx
- __int64 v23; // r9
- _DWORD *v24; // rdx
- int v25; // eax
- __int16 *v26; // rcx
- __int64 v27; // rax
- __int16 *v28; // r8
- __int16 *v29; // r9
- bool v30; // r8
- int v31; // er9
- _DWORD *v32; // rdx
- int v33; // eax
- char v35; // [rsp+30h] [rbp-88h]
- unsigned __int16 *v36; // [rsp+38h] [rbp-80h]
- __int128 Block_8; // [rsp+50h] [rbp-68h] BYREF
- __int64 v38; // [rsp+60h] [rbp-58h]
- __int64 v39; // [rsp+68h] [rbp-50h]
- v2 = a2;
- v4 = *(_DWORD *)(a1 + 224);
- if ( v4 > 0 )
- {
- v5 = v4 - 1;
- *(_DWORD *)(a1 + 224) = v5;
- if ( v5 <= 0 )
- {
- std::_Xregex_error(12i64);
- __debugbreak();
- }
- }
- v6 = *(_DWORD *)(a1 + 220);
- if ( v6 > 0 )
- {
- v7 = v6 - 1;
- *(_DWORD *)(a1 + 220) = v7;
- if ( v7 <= 0 )
- {
- std::_Xregex_error(11i64);
- __debugbreak();
- }
- }
- v8 = 0;
- if ( a2 )
- {
- while ( 1 )
- {
- v9 = *(_DWORD *)(v2 + 8);
- switch ( v9 )
- {
- case 1:
- case 8:
- case 9:
- case 17:
- case 20:
- goto LABEL_71;
- case 2:
- v10 = *(_DWORD *)(a1 + 188);
- if ( (v10 & 0x100) != 0 || *(_QWORD *)a1 != *(_QWORD *)(a1 + 152) )
- v8 = *(_WORD *)(*(_QWORD *)a1 - 2i64) != 10;
- else
- v8 = v10 & 1;
- goto LABEL_71;
- case 3:
- if ( *(_QWORD *)a1 == *(_QWORD *)(a1 + 160) )
- v8 = (*(_DWORD *)(a1 + 188) & 2) != 0;
- else
- v8 = **(_WORD **)a1 != 10;
- goto LABEL_71;
- case 4:
- v8 = sub_180006050((unsigned __int16 **)a1) == (*(_BYTE *)(v2 + 12) & 1);
- goto LABEL_71;
- case 5:
- v11 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 == *(_QWORD *)(a1 + 160) || *v11 == 10 || *v11 == 13 )
- goto LABEL_78;
- *(_QWORD *)a1 = v11 + 1;
- goto LABEL_71;
- case 6:
- v12 = sub_1800060F0(
- *(__int16 **)a1,
- *(__int16 **)(a1 + 160),
- *(__int16 **)(v2 + 40),
- (__int16 *)(*(_QWORD *)(v2 + 40) + 2i64 * *(unsigned int *)(v2 + 36)),
- *(__int64 **)(a1 + 208),
- *(_DWORD *)(a1 + 184));
- if ( v12 == *(__int16 **)a1 )
- goto LABEL_78;
- *(_QWORD *)a1 = v12;
- goto LABEL_71;
- case 7:
- if ( *(_QWORD *)a1 == *(_QWORD *)(a1 + 160) || !sub_180005D40((__int64 *)a1, v2) )
- goto LABEL_78;
- v8 = 0;
- goto LABEL_72;
- case 10:
- case 11:
- v36 = *(unsigned __int16 **)a1;
- v35 = v9 == 11;
- v39 = 0i64;
- v13 = (const void **)(a1 + 8);
- Block_8 = 0i64;
- v14 = 0i64;
- v38 = 0i64;
- v15 = (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)(a1 + 8)) >> 2;
- if ( v15 )
- {
- if ( v15 > 0x3FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- sub_180004F50((unsigned __int64 *)&Block_8, v15);
- v16 = *(_QWORD *)(a1 + 16) - (_QWORD)*v13;
- v17 = (char *)Block_8;
- memmove((void *)Block_8, *v13, v16);
- v18 = &v17[4 * (v16 >> 2)];
- *((_QWORD *)&Block_8 + 1) = v18;
- v14 = v38;
- }
- else
- {
- v18 = (char *)*((_QWORD *)&Block_8 + 1);
- v17 = (char *)Block_8;
- }
- v19 = *(_QWORD *)(a1 + 32);
- v39 = v19;
- if ( (unsigned __int8)sub_180004740(a1, *(_QWORD *)(v2 + 32)) == v35 )
- {
- *(_QWORD *)a1 = v36;
- if ( v13 != (const void **)&Block_8 )
- {
- sub_180006510((unsigned __int64 *)(a1 + 8), v17, (v18 - v17) >> 2);
- *(_QWORD *)(a1 + 32) = v19;
- }
- v8 = 1;
- }
- else
- {
- *(_QWORD *)a1 = v36;
- }
- if ( v17 )
- {
- v20 = v17;
- if ( ((v14 - (_QWORD)v17) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- v17 = (char *)*((_QWORD *)v17 - 1);
- if ( (unsigned __int64)(v20 - v17 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v17);
- }
- goto LABEL_71;
- case 12:
- goto LABEL_70;
- case 13:
- *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16i64 * *(unsigned int *)(v2 + 32)) = *(_QWORD *)a1;
- for ( i = *(_QWORD *)(a1 + 32); *(unsigned int *)(v2 + 32) < i; *v22 &= ~(1 << (i & 0x1F)) )
- v22 = (_DWORD *)(*(_QWORD *)(a1 + 8) + 4 * (--i >> 5));
- goto LABEL_71;
- case 14:
- v23 = *(_QWORD *)(v2 + 32);
- if ( *(_BYTE *)(a1 + 193) || *(_DWORD *)(v23 + 32) )
- {
- v24 = (_DWORD *)(*(_QWORD *)(a1 + 8) + 4 * ((unsigned __int64)*(unsigned int *)(v23 + 32) >> 5));
- *v24 |= 1 << (*(_BYTE *)(v23 + 32) & 0x1F);
- *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16i64 * *(unsigned int *)(v23 + 32) + 8) = *(_QWORD *)a1;
- }
- goto LABEL_71;
- case 15:
- v25 = *(_DWORD *)(*(_QWORD *)(a1 + 8) + 4 * ((unsigned __int64)*(unsigned int *)(v2 + 32) >> 5));
- if ( !_bittest(&v25, *(_DWORD *)(v2 + 32) & 0x1F) )
- goto LABEL_71;
- v26 = *(__int16 **)a1;
- v27 = *(_QWORD *)(a1 + 40);
- v28 = *(__int16 **)(v27 + 16i64 * *(unsigned int *)(v2 + 32));
- v29 = *(__int16 **)(v27 + 16i64 * *(unsigned int *)(v2 + 32) + 8);
- if ( v28 != v29 )
- {
- v26 = sub_1800060F0(v26, *(__int16 **)(a1 + 160), v28, v29, *(__int64 **)(a1 + 208), *(_DWORD *)(a1 + 184));
- if ( v26 == *(__int16 **)a1 )
- {
- LABEL_78:
- v8 = 1;
- goto LABEL_74;
- }
- }
- *(_QWORD *)a1 = v26;
- LABEL_71:
- if ( v8 )
- goto LABEL_74;
- LABEL_72:
- if ( !v2 )
- goto LABEL_74;
- v2 = *(_QWORD *)(v2 + 16);
- if ( !v2 )
- goto LABEL_74;
- break;
- case 16:
- if ( !(unsigned __int8)sub_180005650(a1, v2) )
- v8 = 1;
- goto LABEL_70;
- case 18:
- v30 = (*(_DWORD *)(v2 + 12) & 2) != 0;
- v31 = 0;
- v32 = (_DWORD *)v2;
- goto LABEL_53;
- case 19:
- v32 = *(_DWORD **)(v2 + 32);
- if ( v32[13] )
- goto LABEL_70;
- v30 = (v32[3] & 2) != 0;
- v31 = *(_DWORD *)(*(_QWORD *)(a1 + 128) + 16i64 * (unsigned int)v32[12]);
- LABEL_53:
- if ( !(unsigned __int8)sub_180005A00(a1, (__int64)v32, v30, v31) )
- v8 = 1;
- LABEL_70:
- v2 = 0i64;
- goto LABEL_71;
- case 21:
- if ( (*(_DWORD *)(a1 + 188) & 0x2020) != 0 && *(_QWORD *)(a1 + 152) == *(_QWORD *)a1
- || *(_BYTE *)(a1 + 216) && *(_QWORD *)a1 != *(_QWORD *)(a1 + 160) )
- {
- v8 = 1;
- }
- else if ( !*(_BYTE *)(a1 + 192) || sub_180005F70(a1) )
- {
- *(_QWORD *)(a1 + 64) = *(_QWORD *)a1;
- if ( a1 + 72 != a1 + 8 )
- {
- sub_180006510(
- (unsigned __int64 *)(a1 + 72),
- *(char **)(a1 + 8),
- (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)(a1 + 8)) >> 2);
- *(_QWORD *)(a1 + 96) = *(_QWORD *)(a1 + 32);
- }
- if ( a1 + 104 != a1 + 40 )
- sub_1800063C0(
- (unsigned __int64 *)(a1 + 104),
- *(char **)(a1 + 40),
- (__int64)(*(_QWORD *)(a1 + 48) - *(_QWORD *)(a1 + 40)) >> 4);
- *(_BYTE *)(a1 + 192) = 1;
- }
- goto LABEL_70;
- default:
- std::_Xregex_error(13i64);
- __debugbreak();
- }
- }
- }
- LABEL_74:
- v33 = *(_DWORD *)(a1 + 224);
- if ( v33 > 0 )
- *(_DWORD *)(a1 + 224) = v33 + 1;
- return v8 == 0;
- }
- // 18000C0B0: using guessed type __int64 __fastcall std::_Xregex_error(_QWORD);
- //----- (0000000180004D30) ----------------------------------------------------
- char *__fastcall sub_180004D30(__int64 a1, unsigned __int64 a2)
- {
- __int64 v4; // rbp
- unsigned __int64 v5; // rcx
- __int64 v6; // rbp
- unsigned __int64 v7; // rdx
- unsigned __int64 v8; // rbx
- size_t v9; // rbx
- void *v10; // rax
- _QWORD *v11; // rdi
- void *v12; // rcx
- char *result; // rax
- if ( a2 > 0xFFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v4 = *(_QWORD *)(a1 + 8) - *(_QWORD *)a1;
- v5 = (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)a1) >> 4;
- v6 = v4 >> 4;
- v7 = v5 >> 1;
- if ( v5 > 0xFFFFFFFFFFFFFFFi64 - (v5 >> 1) )
- goto LABEL_23;
- v8 = v7 + v5;
- if ( v7 + v5 >= a2 )
- {
- if ( v8 > 0xFFFFFFFFFFFFFFFi64 )
- goto LABEL_23;
- }
- else
- {
- v8 = a2;
- }
- v9 = 16 * v8;
- if ( v9 < 0x1000 )
- {
- if ( v9 )
- v11 = sub_18000A224(v9);
- else
- v11 = 0i64;
- goto LABEL_13;
- }
- if ( v9 + 39 <= v9 )
- LABEL_23:
- Concurrency::cancel_current_task();
- v10 = sub_18000A224(v9 + 39);
- if ( !v10 )
- goto LABEL_21;
- v11 = (_QWORD *)(((unsigned __int64)v10 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v11 - 1) = v10;
- LABEL_13:
- if ( a2 != v6 )
- memset(&v11[2 * v6], 0, 16 * (a2 - v6));
- memmove(v11, *(const void **)a1, *(_QWORD *)(a1 + 8) - *(_QWORD *)a1);
- v12 = *(void **)a1;
- if ( *(_QWORD *)a1 )
- {
- if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v12) & 0xFFFFFFFFFFFFFFF0ui64) < 0x1000 )
- {
- LABEL_19:
- j_j_free(v12);
- goto LABEL_20;
- }
- if ( (unsigned __int64)v12 - *((_QWORD *)v12 - 1) - 8 <= 0x1F )
- {
- v12 = (void *)*((_QWORD *)v12 - 1);
- goto LABEL_19;
- }
- LABEL_21:
- invalid_parameter_noinfo_noreturn();
- }
- LABEL_20:
- result = (char *)&v11[v9 / 8];
- *(_QWORD *)a1 = v11;
- *(_QWORD *)(a1 + 8) = &v11[2 * a2];
- *(_QWORD *)(a1 + 16) = &v11[v9 / 8];
- return result;
- }
- //----- (0000000180004EA0) ----------------------------------------------------
- _QWORD *__fastcall sub_180004EA0(_QWORD *a1, _QWORD *a2)
- {
- void **v2; // rsi
- unsigned __int64 v5; // rdx
- const void *v6; // rdx
- char *v7; // rdi
- signed __int64 v8; // rbx
- _QWORD *result; // rax
- v2 = (void **)(a1 + 1);
- *a1 = *a2;
- a1[1] = 0i64;
- a1[2] = 0i64;
- a1[3] = 0i64;
- v5 = (__int64)(a2[2] - a2[1]) >> 2;
- if ( v5 )
- {
- if ( v5 > 0x3FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- sub_180004F50(a1 + 1, v5);
- v6 = (const void *)a2[1];
- v7 = (char *)*v2;
- v8 = a2[2] - (_QWORD)v6;
- memmove(*v2, v6, v8);
- v2[1] = &v7[4 * (v8 >> 2)];
- }
- result = a1;
- v2[3] = (void *)a2[4];
- return result;
- }
- //----- (0000000180004F50) ----------------------------------------------------
- unsigned __int64 __fastcall sub_180004F50(unsigned __int64 *a1, unsigned __int64 a2)
- {
- unsigned __int64 v3; // rbx
- void *v4; // rax
- void *v5; // rcx
- unsigned __int64 v6; // rax
- unsigned __int64 result; // rax
- if ( a2 > 0x3FFFFFFFFFFFFFFFi64 )
- goto LABEL_11;
- v3 = 4 * a2;
- if ( 4 * a2 < 0x1000 )
- {
- if ( v3 )
- v6 = (unsigned __int64)sub_18000A224(4 * a2);
- else
- v6 = 0i64;
- goto LABEL_10;
- }
- if ( v3 + 39 <= v3 )
- LABEL_11:
- Concurrency::cancel_current_task();
- v4 = sub_18000A224(v3 + 39);
- v5 = v4;
- if ( !v4 )
- invalid_parameter_noinfo_noreturn();
- v6 = ((unsigned __int64)v4 + 39) & 0xFFFFFFFFFFFFFFE0ui64;
- *(_QWORD *)(v6 - 8) = v5;
- LABEL_10:
- *a1 = v6;
- a1[1] = v6;
- result = v3 + v6;
- a1[2] = result;
- return result;
- }
- //----- (0000000180004FE0) ----------------------------------------------------
- char __fastcall sub_180004FE0(__int64 a1)
- {
- char result; // al
- __int64 v3; // rcx
- _QWORD *v4; // rdi
- unsigned __int16 *v5; // rcx
- _WORD *v6; // rdx
- int v7; // er8
- unsigned __int16 *v8; // rcx
- _WORD *v9; // rdx
- int v10; // er8
- __int16 v11; // ax
- unsigned __int16 *v12; // rcx
- _WORD *v13; // rdx
- int v14; // er8
- unsigned __int16 *v15; // rax
- unsigned __int16 *v16; // rcx
- int v17; // edx
- unsigned __int16 *v18; // rax
- unsigned __int16 *v19; // rcx
- int v20; // edx
- __int64 v21; // rcx
- unsigned __int16 *v22; // rax
- unsigned __int16 *v23; // rcx
- int v24; // edx
- unsigned __int16 *v25; // rax
- unsigned __int16 *v26; // rcx
- int v27; // edx
- __int64 v28; // rcx
- char v29; // si
- unsigned __int16 *v30; // rax
- unsigned __int16 *v31; // rcx
- int v32; // edx
- unsigned __int16 *v33; // rcx
- _WORD *v34; // rcx
- int v35; // edx
- unsigned __int16 *v36; // rcx
- _WORD *v37; // rcx
- int v38; // edx
- unsigned __int16 *v39; // rcx
- _WORD *v40; // rcx
- int v41; // edx
- result = 0;
- v3 = *(unsigned int *)(a1 + 124);
- if ( (_DWORD)v3 != -1 )
- {
- v4 = (_QWORD *)(a1 + 16);
- while ( 1 )
- {
- switch ( (_DWORD)v3 )
- {
- case '|':
- return result;
- case ')':
- if ( *(_DWORD *)(a1 + 28) )
- return result;
- if ( (*(_DWORD *)(a1 + 128) & 0x10000000) == 0 )
- sub_1800040C0(v3, 5u);
- LABEL_137:
- sub_1800072A0(a1 + 64, *(_WORD *)(a1 + 120));
- v39 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v39 == 92 )
- {
- v40 = v39 + 1;
- if ( v40 != (_WORD *)*v4 )
- {
- if ( (v41 = *(_DWORD *)(a1 + 128), (v41 & 8) == 0) && (unsigned __int16)(*v40 - 40) <= 1u
- || (v41 & 0x10) == 0 && ((*v40 - 123) & 0xFFFD) == 0 )
- {
- *(_QWORD *)a1 = v40;
- }
- }
- }
- *(_QWORD *)a1 += 2i64;
- }
- goto LABEL_146;
- case '.':
- sub_1800055C0(a1 + 64, 5);
- v5 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v5 == 92 )
- {
- v6 = v5 + 1;
- if ( v5 + 1 != (unsigned __int16 *)*v4 )
- {
- if ( (v7 = *(_DWORD *)(a1 + 128), (v7 & 8) == 0) && (unsigned __int16)(*v6 - 40) <= 1u
- || (v7 & 0x10) == 0 && (*v6 == 123 || *v6 == 125) )
- {
- ++v5;
- }
- }
- }
- *(_QWORD *)a1 = v5 + 1;
- }
- goto LABEL_146;
- case '\\':
- v8 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v8 == 92 )
- {
- v9 = v8 + 1;
- if ( v8 + 1 != (unsigned __int16 *)*v4 )
- {
- if ( (v10 = *(_DWORD *)(a1 + 128), (v10 & 8) == 0) && (unsigned __int16)(*v9 - 40) <= 1u
- || (v10 & 0x10) == 0 && (*v9 == 123 || *v9 == 125) )
- {
- ++v8;
- }
- }
- }
- *(_QWORD *)a1 = v8 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( *(char *)(a1 + 128) >= 0 )
- {
- LABEL_56:
- sub_180006AC0(a1);
- LABEL_147:
- sub_180007010(a1);
- v4 = (_QWORD *)(a1 + 16);
- goto LABEL_148;
- }
- v11 = *(_WORD *)(a1 + 120);
- if ( v11 == 98 )
- {
- sub_1800055C0(a1 + 64, 4);
- v12 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v12 == 92 )
- {
- v13 = v12 + 1;
- if ( v12 + 1 != (unsigned __int16 *)*v4 )
- {
- if ( (v14 = *(_DWORD *)(a1 + 128), (v14 & 8) == 0) && (unsigned __int16)(*v13 - 40) <= 1u
- || (v14 & 0x10) == 0 && (*v13 == 123 || *v13 == 125) )
- {
- ++v12;
- }
- }
- }
- *(_QWORD *)a1 = v12 + 1;
- }
- goto LABEL_128;
- }
- if ( v11 != 66 )
- goto LABEL_56;
- sub_1800055C0(a1 + 64, 4);
- *(_DWORD *)(*(_QWORD *)(a1 + 72) + 12i64) ^= 1u;
- v15 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 == *v4 )
- goto LABEL_128;
- if ( *v15 == 92 )
- {
- v16 = v15 + 1;
- if ( v15 + 1 != (unsigned __int16 *)*v4 )
- {
- v17 = *(_DWORD *)(a1 + 128);
- if ( (v17 & 8) != 0 )
- {
- LABEL_50:
- if ( (v17 & 0x10) == 0 && (*v16 == 123 || *v16 == 125) )
- goto LABEL_53;
- }
- else
- {
- if ( (unsigned __int16)(*v16 - 40) > 1u )
- {
- v15 = *(unsigned __int16 **)a1;
- goto LABEL_50;
- }
- LABEL_53:
- v15 = v16;
- }
- }
- }
- *(_QWORD *)a1 = v15 + 1;
- LABEL_128:
- sub_1800040D0((unsigned __int16 **)a1);
- goto LABEL_148;
- case '[':
- v18 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v18 == 92 )
- {
- v19 = v18 + 1;
- if ( v18 + 1 != (unsigned __int16 *)*v4 )
- {
- v20 = *(_DWORD *)(a1 + 128);
- if ( (v20 & 8) != 0 )
- {
- LABEL_64:
- if ( (v20 & 0x10) == 0 && (*v19 == 123 || *v19 == 125) )
- goto LABEL_67;
- }
- else
- {
- if ( (unsigned __int16)(*v19 - 40) > 1u )
- {
- v18 = *(unsigned __int16 **)a1;
- goto LABEL_64;
- }
- LABEL_67:
- v18 = v19;
- }
- }
- }
- *(_QWORD *)a1 = v18 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- sub_180006990(a1);
- if ( *(_DWORD *)(a1 + 124) != 93 )
- sub_1800040C0(v21, 4u);
- v22 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v22 == 92 )
- {
- v23 = v22 + 1;
- if ( v22 + 1 != (unsigned __int16 *)*v4 )
- {
- v24 = *(_DWORD *)(a1 + 128);
- if ( (v24 & 8) != 0 )
- {
- LABEL_76:
- if ( (v24 & 0x10) == 0 && (*v23 == 123 || *v23 == 125) )
- goto LABEL_79;
- }
- else
- {
- if ( (unsigned __int16)(*v23 - 40) > 1u )
- {
- v22 = *(unsigned __int16 **)a1;
- goto LABEL_76;
- }
- LABEL_79:
- v22 = v23;
- }
- }
- }
- *(_QWORD *)a1 = v22 + 1;
- }
- LABEL_146:
- sub_1800040D0((unsigned __int16 **)a1);
- goto LABEL_147;
- }
- if ( (_DWORD)v3 != 40 )
- {
- if ( (_DWORD)v3 == 94 )
- {
- sub_1800055C0(a1 + 64, 2);
- v33 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v33 == 92 )
- {
- v34 = v33 + 1;
- if ( v34 != (_WORD *)*v4 )
- {
- if ( (v35 = *(_DWORD *)(a1 + 128), (v35 & 8) == 0) && (unsigned __int16)(*v34 - 40) <= 1u
- || (v35 & 0x10) == 0 && ((*v34 - 123) & 0xFFFD) == 0 )
- {
- *(_QWORD *)a1 = v34;
- }
- }
- }
- *(_QWORD *)a1 += 2i64;
- }
- }
- else
- {
- if ( (_DWORD)v3 != 36 )
- {
- if ( (unsigned int)(v3 - 42) <= 1 || (_DWORD)v3 == 63 || (_DWORD)v3 == 123 )
- sub_1800040C0(v3, 0xAu);
- if ( (_DWORD)v3 == 125 )
- {
- if ( (*(_DWORD *)(a1 + 128) & 0x10000000) == 0 )
- sub_1800040C0(v3, 6u);
- }
- else if ( (_DWORD)v3 == 93 && (*(_DWORD *)(a1 + 128) & 0x10000000) == 0 )
- {
- sub_1800040C0(v3, 4u);
- }
- goto LABEL_137;
- }
- sub_1800055C0(a1 + 64, 3);
- v36 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v36 == 92 )
- {
- v37 = v36 + 1;
- if ( v37 != (_WORD *)*v4 )
- {
- if ( (v38 = *(_DWORD *)(a1 + 128), (v38 & 8) == 0) && (unsigned __int16)(*v37 - 40) <= 1u
- || (v38 & 0x10) == 0 && ((*v37 - 123) & 0xFFFD) == 0 )
- {
- *(_QWORD *)a1 = v37;
- }
- }
- }
- *(_QWORD *)a1 += 2i64;
- }
- }
- goto LABEL_128;
- }
- v25 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- break;
- LABEL_93:
- sub_1800040D0((unsigned __int16 **)a1);
- v29 = sub_180006C50(a1);
- if ( *(_DWORD *)(a1 + 124) != 41 )
- sub_1800040C0(v28, 5u);
- v30 = *(unsigned __int16 **)a1;
- if ( *(_QWORD *)a1 != *v4 )
- {
- if ( *v30 == 92 )
- {
- v31 = v30 + 1;
- if ( v30 + 1 != (unsigned __int16 *)*v4 )
- {
- v32 = *(_DWORD *)(a1 + 128);
- if ( (v32 & 8) != 0 )
- {
- LABEL_100:
- if ( (v32 & 0x10) == 0 && (*v31 == 123 || *v31 == 125) )
- goto LABEL_103;
- }
- else
- {
- if ( (unsigned __int16)(*v31 - 40) > 1u )
- {
- v30 = *(unsigned __int16 **)a1;
- goto LABEL_100;
- }
- LABEL_103:
- v30 = v31;
- }
- }
- }
- *(_QWORD *)a1 = v30 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( v29 )
- goto LABEL_147;
- LABEL_148:
- v3 = *(unsigned int *)(a1 + 124);
- result = 1;
- if ( (_DWORD)v3 == -1 )
- return result;
- }
- if ( *v25 != 92 || (v26 = v25 + 1, v25 + 1 == (unsigned __int16 *)*v4) )
- {
- LABEL_92:
- *(_QWORD *)a1 = v25 + 1;
- goto LABEL_93;
- }
- v27 = *(_DWORD *)(a1 + 128);
- if ( (v27 & 8) == 0 )
- {
- if ( (unsigned __int16)(*v26 - 40) <= 1u )
- {
- LABEL_91:
- v25 = v26;
- goto LABEL_92;
- }
- v25 = *(unsigned __int16 **)a1;
- }
- if ( (v27 & 0x10) != 0 || *v26 != 123 && *v26 != 125 )
- goto LABEL_92;
- goto LABEL_91;
- }
- return result;
- }
- // 1800055AF: variable 'v21' is possibly undefined
- // 1800055BA: variable 'v28' is possibly undefined
- //----- (00000001800055C0) ----------------------------------------------------
- _OWORD *__fastcall sub_1800055C0(__int64 a1, int a2)
- {
- _OWORD *v4; // rdx
- __int64 v5; // rcx
- _OWORD *result; // rax
- v4 = sub_18000A224(0x20ui64);
- *v4 = 0i64;
- v4[1] = 0i64;
- *((_DWORD *)v4 + 2) = a2;
- *(_QWORD *)v4 = &std::_Node_base::`vftable';
- *((_QWORD *)v4 + 3) = 0i64;
- *((_DWORD *)v4 + 3) = 0;
- *((_QWORD *)v4 + 2) = 0i64;
- *((_QWORD *)v4 + 3) = *(_QWORD *)(a1 + 8);
- v5 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64);
- if ( v5 )
- {
- *((_QWORD *)v4 + 2) = v5;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) + 24i64) = v4;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) = v4;
- result = v4;
- *(_QWORD *)(a1 + 8) = v4;
- return result;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180005650) ----------------------------------------------------
- __int64 __fastcall sub_180005650(__int64 a1, __int64 a2)
- {
- unsigned __int64 *v4; // rdi
- __int128 *v5; // rsi
- unsigned __int8 v6; // bl
- void *v7; // rcx
- void *v8; // rcx
- __int64 v9; // r12
- __int64 i; // r15
- __int64 v11; // rbx
- void *v12; // rcx
- void *v13; // rcx
- void *v15[2]; // [rsp+20h] [rbp-59h] BYREF
- __int128 v16; // [rsp+30h] [rbp-49h]
- __int128 v17; // [rsp+40h] [rbp-39h] BYREF
- __int128 v18; // [rsp+50h] [rbp-29h]
- void *Block[2]; // [rsp+60h] [rbp-19h] BYREF
- __int128 v20; // [rsp+70h] [rbp-9h]
- __int128 v21; // [rsp+80h] [rbp+7h] BYREF
- __int128 v22; // [rsp+90h] [rbp+17h]
- *(_OWORD *)v15 = 0i64;
- v16 = 0i64;
- v17 = 0i64;
- v18 = 0i64;
- sub_180006650(v15, (_QWORD *)a1);
- if ( !a2 )
- {
- LABEL_9:
- v6 = 0;
- goto LABEL_10;
- }
- v4 = (unsigned __int64 *)(a1 + 8);
- v5 = (__int128 *)(a1 + 40);
- while ( 1 )
- {
- *(void **)a1 = v15[0];
- if ( v4 != (unsigned __int64 *)&v15[1] )
- {
- sub_180006510(v4, (char *)v15[1], (__int64)(v16 - (unsigned __int64)v15[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v17;
- }
- if ( v5 != (__int128 *)((char *)&v17 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v17 + 1), (__int64)(v18 - *((_QWORD *)&v17 + 1)) >> 4);
- if ( (unsigned __int8)sub_180004740(a1, *(_QWORD *)(a2 + 16)) )
- break;
- a2 = *(_QWORD *)(a2 + 40);
- if ( !a2 )
- goto LABEL_9;
- }
- if ( !*(_BYTE *)(a1 + 200) )
- {
- v6 = 1;
- goto LABEL_10;
- }
- *(_OWORD *)Block = 0i64;
- v20 = 0i64;
- v21 = 0i64;
- v22 = 0i64;
- sub_180006650(Block, (_QWORD *)a1);
- v9 = (__int64)(*(_QWORD *)a1 - (unsigned __int64)v15[0]) >> 1;
- for ( i = *(_QWORD *)(a2 + 40); i; i = *(_QWORD *)(i + 40) )
- {
- *(void **)a1 = v15[0];
- if ( v4 != (unsigned __int64 *)&v15[1] )
- {
- sub_180006510(v4, (char *)v15[1], (__int64)(v16 - (unsigned __int64)v15[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v17;
- }
- if ( v5 != (__int128 *)((char *)&v17 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v17 + 1), (__int64)(v18 - *((_QWORD *)&v17 + 1)) >> 4);
- if ( (unsigned __int8)sub_180004740(a1, *(_QWORD *)(i + 16)) )
- {
- v11 = (__int64)(*(_QWORD *)a1 - (unsigned __int64)v15[0]) >> 1;
- if ( v9 < v11 )
- {
- Block[0] = *(void **)a1;
- if ( &Block[1] != (void **)v4 )
- {
- sub_180006510(
- (unsigned __int64 *)&Block[1],
- *(char **)(a1 + 8),
- (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)(a1 + 8)) >> 2);
- *(_QWORD *)&v21 = *(_QWORD *)(a1 + 32);
- }
- if ( (__int128 *)((char *)&v21 + 8) != v5 )
- sub_1800063C0(
- (unsigned __int64 *)&v21 + 1,
- *(char **)v5,
- (__int64)(*(_QWORD *)(a1 + 48) - *(_QWORD *)(a1 + 40)) >> 4);
- v9 = v11;
- }
- }
- }
- *(void **)a1 = Block[0];
- if ( v4 != (unsigned __int64 *)&Block[1] )
- {
- sub_180006510(v4, (char *)Block[1], (__int64)(v20 - (unsigned __int64)Block[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v21;
- }
- if ( v5 != (__int128 *)((char *)&v21 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v21 + 1), (__int64)(v22 - *((_QWORD *)&v21 + 1)) >> 4);
- v6 = 1;
- v12 = (void *)*((_QWORD *)&v21 + 1);
- if ( *((_QWORD *)&v21 + 1) )
- {
- if ( ((*((_QWORD *)&v22 + 1) - *((_QWORD *)&v21 + 1)) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v12 = *(void **)(*((_QWORD *)&v21 + 1) - 8i64);
- if ( (unsigned __int64)(*((_QWORD *)&v21 + 1) - (_QWORD)v12 - 8i64) > 0x1F )
- LABEL_44:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v12);
- *((_QWORD *)&v21 + 1) = 0i64;
- v22 = 0i64;
- }
- v13 = Block[1];
- if ( Block[1] )
- {
- if ( (unsigned __int64)(4 * ((__int64)(*((_QWORD *)&v20 + 1) - (unsigned __int64)Block[1]) >> 2)) >= 0x1000 )
- {
- v13 = (void *)*((_QWORD *)Block[1] - 1);
- if ( (unsigned __int64)(Block[1] - v13 - 8) > 0x1F )
- goto LABEL_44;
- }
- j_j_free(v13);
- Block[1] = 0i64;
- v20 = 0i64;
- }
- LABEL_10:
- v7 = (void *)*((_QWORD *)&v17 + 1);
- if ( *((_QWORD *)&v17 + 1) )
- {
- if ( ((*((_QWORD *)&v18 + 1) - *((_QWORD *)&v17 + 1)) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v7 = *(void **)(*((_QWORD *)&v17 + 1) - 8i64);
- if ( (unsigned __int64)(*((_QWORD *)&v17 + 1) - (_QWORD)v7 - 8i64) > 0x1F )
- LABEL_17:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v7);
- *((_QWORD *)&v17 + 1) = 0i64;
- v18 = 0i64;
- }
- v8 = v15[1];
- if ( v15[1] )
- {
- if ( ((*((_QWORD *)&v16 + 1) - (unsigned __int64)v15[1]) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- v8 = (void *)*((_QWORD *)v15[1] - 1);
- if ( (unsigned __int64)(v15[1] - v8 - 8) > 0x1F )
- goto LABEL_17;
- }
- j_j_free(v8);
- }
- return v6;
- }
- // 180004740: using guessed type __int64 __fastcall sub_180004740(_QWORD, _QWORD);
- //----- (0000000180005A00) ----------------------------------------------------
- __int64 __fastcall sub_180005A00(__int64 a1, __int64 a2, char a3, int a4)
- {
- unsigned __int8 v9; // r14
- __int64 v10; // rsi
- void **v11; // rcx
- void *v12; // rax
- bool v13; // r12
- int v14; // eax
- int v15; // er15
- __int64 v16; // rdx
- void *v17; // rcx
- void *v18; // rcx
- int v19; // [rsp+20h] [rbp-49h]
- void **v20; // [rsp+28h] [rbp-41h]
- __int64 v21[2]; // [rsp+30h] [rbp-39h] BYREF
- void *Block[2]; // [rsp+40h] [rbp-29h] BYREF
- __int128 v23; // [rsp+50h] [rbp-19h]
- __int128 v24; // [rsp+60h] [rbp-9h] BYREF
- __int128 v25; // [rsp+70h] [rbp+7h]
- if ( *(_DWORD *)(a2 + 52) == 1 )
- return sub_1800073C0((void **)a1, a2, a3);
- v9 = 0;
- *(_OWORD *)Block = 0i64;
- v23 = 0i64;
- v24 = 0i64;
- v25 = 0i64;
- sub_180006650(Block, (_QWORD *)a1);
- v10 = *(_QWORD *)(a1 + 128) + 16i64 * *(unsigned int *)(a2 + 48);
- v19 = *(_DWORD *)v10;
- v11 = *(void ***)(v10 + 8);
- v20 = v11;
- v12 = *(void **)a1;
- v21[0] = *(_QWORD *)a1;
- v13 = !a4 || *v11 != v12;
- v14 = *(_DWORD *)(a2 + 36);
- if ( v14 >= 0 && v14 <= a4 )
- {
- v15 = v19;
- LABEL_29:
- v16 = *(_QWORD *)(*(_QWORD *)(a2 + 40) + 16i64);
- LABEL_30:
- v9 = sub_180004740(a1, v16);
- if ( v9 )
- goto LABEL_38;
- goto LABEL_33;
- }
- if ( a4 < *(_DWORD *)(a2 + 32) )
- {
- if ( !v13 )
- {
- v16 = *(_QWORD *)(*(_QWORD *)(a2 + 40) + 16i64);
- v15 = v19;
- goto LABEL_30;
- }
- goto LABEL_20;
- }
- if ( a3 )
- {
- if ( v13 )
- {
- *(_DWORD *)v10 = a4 + 1;
- *(_QWORD *)(v10 + 8) = v21;
- v9 = sub_180004740(a1, *(_QWORD *)(a2 + 16));
- if ( v9 )
- goto LABEL_37;
- v11 = v20;
- }
- else if ( a4 > 1 )
- {
- goto LABEL_32;
- }
- v15 = v19;
- *(_DWORD *)v10 = v19;
- *(_QWORD *)(v10 + 8) = v11;
- *(void **)a1 = Block[0];
- if ( (void **)(a1 + 8) != &Block[1] )
- {
- sub_180006510((unsigned __int64 *)(a1 + 8), (char *)Block[1], (__int64)(v23 - (unsigned __int64)Block[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v24;
- }
- if ( (__int128 *)(a1 + 40) != (__int128 *)((char *)&v24 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v24 + 1), (__int64)(v25 - *((_QWORD *)&v24 + 1)) >> 4);
- goto LABEL_29;
- }
- v9 = sub_180004740(a1, *(_QWORD *)(*(_QWORD *)(a2 + 40) + 16i64));
- if ( v9 )
- {
- LABEL_37:
- v15 = v19;
- goto LABEL_38;
- }
- if ( v13 )
- {
- *(void **)a1 = Block[0];
- if ( (void **)(a1 + 8) != &Block[1] )
- {
- sub_180006510((unsigned __int64 *)(a1 + 8), (char *)Block[1], (__int64)(v23 - (unsigned __int64)Block[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v24;
- }
- if ( (__int128 *)(a1 + 40) != (__int128 *)((char *)&v24 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v24 + 1), (__int64)(v25 - *((_QWORD *)&v24 + 1)) >> 4);
- LABEL_20:
- *(_DWORD *)v10 = a4 + 1;
- *(_QWORD *)(v10 + 8) = v21;
- v16 = *(_QWORD *)(a2 + 16);
- v15 = v19;
- goto LABEL_30;
- }
- LABEL_32:
- v15 = v19;
- LABEL_33:
- *(void **)a1 = Block[0];
- if ( (void **)(a1 + 8) != &Block[1] )
- {
- sub_180006510((unsigned __int64 *)(a1 + 8), (char *)Block[1], (__int64)(v23 - (unsigned __int64)Block[1]) >> 2);
- *(_QWORD *)(a1 + 32) = v24;
- }
- if ( (__int128 *)(a1 + 40) != (__int128 *)((char *)&v24 + 8) )
- sub_1800063C0((unsigned __int64 *)(a1 + 40), *((char **)&v24 + 1), (__int64)(v25 - *((_QWORD *)&v24 + 1)) >> 4);
- LABEL_38:
- *(_DWORD *)v10 = v15;
- *(_QWORD *)(v10 + 8) = v20;
- v17 = (void *)*((_QWORD *)&v24 + 1);
- if ( *((_QWORD *)&v24 + 1) )
- {
- if ( ((*((_QWORD *)&v25 + 1) - *((_QWORD *)&v24 + 1)) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v17 = *(void **)(*((_QWORD *)&v24 + 1) - 8i64);
- if ( (unsigned __int64)(*((_QWORD *)&v24 + 1) - (_QWORD)v17 - 8i64) > 0x1F )
- LABEL_45:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v17);
- *((_QWORD *)&v24 + 1) = 0i64;
- v25 = 0i64;
- }
- v18 = Block[1];
- if ( Block[1] )
- {
- if ( ((*((_QWORD *)&v23 + 1) - (unsigned __int64)Block[1]) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- v18 = (void *)*((_QWORD *)Block[1] - 1);
- if ( (unsigned __int64)(Block[1] - v18 - 8) > 0x1F )
- goto LABEL_45;
- }
- j_j_free(v18);
- }
- return v9;
- }
- // 180004740: using guessed type __int64 __fastcall sub_180004740(_QWORD, _QWORD);
- //----- (0000000180005D40) ----------------------------------------------------
- char __fastcall sub_180005D40(__int64 *a1, __int64 a2)
- {
- __int64 **v2; // rsi
- unsigned __int16 v5; // r12
- unsigned int v6; // ebx
- unsigned int *v7; // rdi
- __int64 v8; // rbp
- unsigned int v9; // esi
- unsigned int v10; // er11
- unsigned __int64 v11; // r10
- unsigned __int16 *v12; // r9
- unsigned __int64 v13; // rax
- _WORD *v14; // r8
- __int16 v15; // cx
- unsigned __int16 v16; // dx
- __int64 v17; // r8
- unsigned int v18; // er9
- __int64 v19; // r8
- __int64 v20; // r9
- bool v21; // zf
- char v22; // cl
- __int64 v23; // rax
- __int64 v24; // rdx
- unsigned int *v25; // rdx
- __int64 **v27; // [rsp+20h] [rbp-48h]
- v2 = (__int64 **)(a1 + 26);
- v27 = (__int64 **)(a1 + 26);
- v5 = *(_WORD *)*a1;
- if ( (a1[23] & 0x100) != 0 )
- v5 = std::ctype<wchar_t>::tolower((*v2)[1], v5);
- else
- v27 = (__int64 **)(a1 + 26);
- v6 = 0;
- v7 = *(unsigned int **)(a2 + 32);
- v8 = *a1 + 2;
- if ( !v7 )
- {
- LABEL_16:
- if ( *(_QWORD *)(a2 + 56) )
- {
- v16 = v5;
- if ( (a1[23] & 0x800) != 0 )
- v16 = sub_180006740(*v2, v5);
- v17 = *(_QWORD *)(a2 + 56);
- v18 = *(_DWORD *)(v17 + 4);
- if ( v18 )
- {
- v19 = *(_QWORD *)(v17 + 8);
- while ( *(_WORD *)(v19 + 2i64 * v6) > v16 || v16 > *(_WORD *)(v19 + 2i64 * (v6 + 1)) )
- {
- v6 += 2;
- if ( v6 >= v18 )
- goto LABEL_24;
- }
- goto LABEL_40;
- }
- }
- LABEL_24:
- if ( v5 >= 0x100u )
- {
- v23 = *(_QWORD *)(a2 + 48);
- if ( v23
- && sub_18000A0E0(
- *(const __m128i **)(v23 + 8),
- (const __m128i *)(*(_QWORD *)(v23 + 8) + 2i64 * *(unsigned int *)(v23 + 4)),
- v5) != (const __m128i *)(*(_QWORD *)(*(_QWORD *)(a2 + 48) + 8i64)
- + 2i64 * *(unsigned int *)(*(_QWORD *)(a2 + 48) + 4i64)) )
- {
- v22 = 1;
- goto LABEL_42;
- }
- v24 = *(unsigned __int16 *)(a2 + 64);
- if ( (_WORD)v24 )
- {
- if ( (_WORD)v24 == 0xFFFF )
- v24 = 263i64;
- if ( (unsigned __int8)std::ctype<wchar_t>::is((*v2)[1], v24, v5) )
- {
- v22 = 1;
- goto LABEL_42;
- }
- }
- v25 = *(unsigned int **)(a2 + 72);
- if ( !v25 )
- goto LABEL_41;
- v21 = (unsigned __int8)sub_180007800(v5, v25, *v2) == 0;
- }
- else
- {
- v20 = *(_QWORD *)(a2 + 40);
- if ( !v20 )
- goto LABEL_41;
- v21 = ((unsigned __int8)(1 << (v5 & 7)) & *(_BYTE *)(((unsigned __int64)v5 >> 3) + v20)) == 0;
- }
- if ( !v21 )
- {
- LABEL_40:
- v22 = 1;
- goto LABEL_42;
- }
- LABEL_41:
- v22 = 0;
- goto LABEL_42;
- }
- v8 = a1[20];
- while ( 1 )
- {
- v9 = v7[3];
- v10 = 0;
- if ( v9 )
- break;
- LABEL_14:
- v7 = (unsigned int *)*((_QWORD *)v7 + 3);
- if ( !v7 )
- goto LABEL_15;
- }
- v11 = *v7;
- while ( 1 )
- {
- v12 = (unsigned __int16 *)*a1;
- v13 = 0i64;
- if ( *v7 )
- {
- v14 = (_WORD *)(*((_QWORD *)v7 + 2) + 2i64 * v10);
- do
- {
- v15 = *v12++;
- if ( v15 != *v14 )
- break;
- ++v13;
- ++v14;
- }
- while ( v13 < v11 );
- }
- if ( v12 == (unsigned __int16 *)v8 )
- break;
- v10 += v11;
- if ( v10 >= v9 )
- goto LABEL_14;
- }
- if ( v8 == *a1 )
- {
- LABEL_15:
- v8 = *a1 + 2;
- v2 = v27;
- goto LABEL_16;
- }
- v22 = 1;
- LABEL_42:
- if ( v22 == (*(_BYTE *)(a2 + 12) & 1) )
- return 0;
- *a1 = v8;
- return 1;
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- // 18000C0D0: using guessed type __int64 __fastcall std::ctype<wchar_t>::is(_QWORD, _QWORD, _QWORD);
- //----- (0000000180005F70) ----------------------------------------------------
- bool __fastcall sub_180005F70(__int64 a1)
- {
- unsigned int v1; // ebx
- unsigned int v2; // eax
- __int64 v4; // rdi
- unsigned __int64 v5; // r10
- int v6; // edx
- __int64 v7; // r10
- __int64 v8; // r11
- __int64 v9; // rcx
- __int64 v10; // rdx
- __int64 v11; // rdx
- __int64 v12; // rcx
- v1 = *(_DWORD *)(a1 + 196);
- v2 = 0;
- if ( !v1 )
- return 0;
- v4 = *(_QWORD *)(a1 + 72);
- while ( 1 )
- {
- v5 = 4 * ((unsigned __int64)v2 >> 5);
- v6 = 1 << (v2 & 0x1F);
- if ( (v6 & *(_DWORD *)(v5 + v4)) == 0 || (v6 & *(_DWORD *)(v5 + *(_QWORD *)(a1 + 8))) == 0 )
- goto LABEL_7;
- v7 = *(_QWORD *)(a1 + 104);
- v8 = *(_QWORD *)(a1 + 40);
- v9 = *(_QWORD *)(v7 + 16i64 * v2);
- v10 = *(_QWORD *)(v8 + 16i64 * v2);
- if ( v9 != v10 )
- return (__int64)((v9 - *(_QWORD *)(a1 + 152)) & 0xFFFFFFFFFFFFFFFEui64) < (__int64)((v10 - *(_QWORD *)(a1 + 152)) & 0xFFFFFFFFFFFFFFFEui64);
- v11 = *(_QWORD *)(v7 + 16i64 * v2 + 8);
- v12 = *(_QWORD *)(v8 + 16i64 * v2 + 8);
- if ( v11 != v12 )
- return (__int64)((v11 - *(_QWORD *)(a1 + 152)) & 0xFFFFFFFFFFFFFFFEui64) < (__int64)((v12 - *(_QWORD *)(a1 + 152)) & 0xFFFFFFFFFFFFFFFEui64);
- LABEL_7:
- if ( ++v2 >= v1 )
- return 0;
- }
- }
- //----- (0000000180006050) ----------------------------------------------------
- bool __fastcall sub_180006050(unsigned __int16 **a1)
- {
- int v1; // eax
- unsigned __int16 *v2; // rdx
- unsigned int v4; // eax
- unsigned __int16 *v5; // rdx
- unsigned int v6; // eax
- bool v7; // r8
- unsigned int v8; // eax
- v1 = *((_DWORD *)a1 + 47);
- if ( (v1 & 0x100) == 0 )
- {
- v2 = *a1;
- if ( *a1 == a1[19] )
- {
- if ( v2 == a1[20] )
- return (v1 & 0xC) == 0;
- if ( (v1 & 4) == 0 )
- {
- v4 = *v2;
- return v4 <= 0x7A && byte_18000C8E0[(unsigned __int8)v4];
- }
- return 0;
- }
- }
- v5 = *a1;
- if ( *a1 == a1[20] )
- {
- if ( (v1 & 8) == 0 )
- {
- v4 = *(v5 - 1);
- return v4 <= 0x7A && byte_18000C8E0[(unsigned __int8)v4];
- }
- return 0;
- }
- v6 = *(v5 - 1);
- v7 = v6 <= 0x7A && byte_18000C8E0[(unsigned __int8)v6];
- v8 = *v5;
- if ( v8 <= 0x7A && byte_18000C8E0[(unsigned __int8)v8] )
- return !v7;
- else
- return v7;
- }
- // 18000C8E0: using guessed type _BYTE byte_18000C8E0[256];
- //----- (00000001800060F0) ----------------------------------------------------
- __int16 *__fastcall sub_1800060F0(__int16 *a1, __int16 *a2, __int16 *a3, __int16 *a4, __int64 *a5, __int16 a6)
- {
- __int16 *v9; // rbp
- __int16 *i; // r12
- bool v11; // zf
- unsigned __int16 v12; // di
- __int16 v13; // si
- __int16 v14; // di
- __int16 v15; // si
- __int16 *v16; // rdx
- bool v17; // zf
- __int16 v18; // cx
- __int16 v19; // ax
- v9 = a1;
- if ( (a6 & 0x100) != 0 )
- {
- for ( i = a1; i != a2; ++i )
- {
- v11 = a3 == a4;
- if ( a3 == a4 )
- goto LABEL_7;
- v12 = *a3;
- v13 = std::ctype<wchar_t>::tolower(a5[1], (unsigned __int16)*i);
- ++a3;
- if ( v13 != (unsigned __int16)std::ctype<wchar_t>::tolower(a5[1], v12) )
- return v9;
- }
- LABEL_6:
- v11 = a3 == a4;
- LABEL_7:
- if ( v11 )
- return i;
- return v9;
- }
- if ( (a6 & 0x800) != 0 )
- {
- i = a1;
- if ( a1 != a2 )
- {
- while ( 1 )
- {
- v11 = a3 == a4;
- if ( a3 == a4 )
- break;
- v14 = *a3;
- v15 = sub_180006740(a5, *i++);
- ++a3;
- if ( v15 != (unsigned __int16)sub_180006740(a5, v14) )
- return v9;
- if ( i == a2 )
- {
- if ( a3 == a4 )
- return i;
- return v9;
- }
- }
- goto LABEL_7;
- }
- goto LABEL_6;
- }
- v16 = a1;
- if ( a1 == a2 )
- {
- LABEL_22:
- v17 = a3 == a4;
- }
- else
- {
- while ( 1 )
- {
- v17 = a3 == a4;
- if ( a3 == a4 )
- break;
- v18 = *v16++;
- v19 = *a3++;
- if ( v18 != v19 )
- return v9;
- if ( v16 == a2 )
- goto LABEL_22;
- }
- }
- if ( v17 )
- return v16;
- return v9;
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- //----- (0000000180006230) ----------------------------------------------------
- char *__fastcall sub_180006230(__int64 a1, unsigned __int64 a2, _DWORD *a3)
- {
- __int64 v6; // r15
- unsigned __int64 v7; // rcx
- __int64 v8; // r15
- unsigned __int64 v9; // rdx
- unsigned __int64 v10; // rax
- unsigned __int64 v11; // rsi
- void *v12; // rax
- _QWORD *v13; // rbx
- _DWORD *v14; // rcx
- unsigned __int64 v15; // rdx
- void *v16; // rcx
- char *result; // rax
- if ( a2 > 0x3FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v6 = *(_QWORD *)(a1 + 8) - *(_QWORD *)a1;
- v7 = (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)a1) >> 2;
- v8 = v6 >> 2;
- v9 = v7 >> 1;
- if ( v7 > 0x3FFFFFFFFFFFFFFFi64 - (v7 >> 1) )
- goto LABEL_25;
- v10 = v9 + v7;
- if ( v9 + v7 >= a2 )
- {
- if ( v10 > 0x3FFFFFFFFFFFFFFFi64 )
- goto LABEL_25;
- }
- else
- {
- v10 = a2;
- }
- v11 = 4 * v10;
- if ( 4 * v10 < 0x1000 )
- {
- if ( v11 )
- v13 = sub_18000A224(4 * v10);
- else
- v13 = 0i64;
- goto LABEL_13;
- }
- if ( v11 + 39 <= v11 )
- LABEL_25:
- Concurrency::cancel_current_task();
- v12 = sub_18000A224(v11 + 39);
- if ( !v12 )
- goto LABEL_23;
- v13 = (_QWORD *)(((unsigned __int64)v12 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v13 - 1) = v12;
- LABEL_13:
- v14 = (_DWORD *)v13 + v8;
- v15 = a2 - v8;
- if ( *a3 )
- {
- for ( ; v15; --v15 )
- *v14++ = *a3;
- }
- else
- {
- memset(v14, 0, 4 * v15);
- }
- memmove(v13, *(const void **)a1, *(_QWORD *)(a1 + 8) - *(_QWORD *)a1);
- v16 = *(void **)a1;
- if ( *(_QWORD *)a1 )
- {
- if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v16) & 0xFFFFFFFFFFFFFFFCui64) < 0x1000 )
- {
- LABEL_21:
- j_j_free(v16);
- goto LABEL_22;
- }
- if ( (unsigned __int64)v16 - *((_QWORD *)v16 - 1) - 8 <= 0x1F )
- {
- v16 = (void *)*((_QWORD *)v16 - 1);
- goto LABEL_21;
- }
- LABEL_23:
- invalid_parameter_noinfo_noreturn();
- }
- LABEL_22:
- *(_QWORD *)a1 = v13;
- *(_QWORD *)(a1 + 8) = (char *)v13 + 4 * a2;
- result = (char *)v13 + v11;
- *(_QWORD *)(a1 + 16) = (char *)v13 + v11;
- return result;
- }
- //----- (00000001800063C0) ----------------------------------------------------
- char *__fastcall sub_1800063C0(unsigned __int64 *a1, char *a2, unsigned __int64 a3)
- {
- char *v3; // rsi
- unsigned __int64 v7; // rdx
- unsigned __int64 v8; // rbx
- unsigned __int64 v9; // rcx
- unsigned __int64 v10; // rbx
- size_t v11; // rdi
- char *result; // rax
- unsigned __int64 v13; // rbp
- char *v14; // rbx
- size_t v15; // rdi
- __int64 v16; // rdi
- v3 = (char *)*a1;
- v7 = (__int64)(a1[2] - *a1) >> 4;
- if ( a3 <= v7 )
- {
- v13 = (__int64)(a1[1] - (_QWORD)v3) >> 4;
- if ( a3 <= v13 )
- {
- v16 = 16 * a3;
- memmove(v3, a2, 16 * a3);
- result = &v3[v16];
- }
- else
- {
- memmove(v3, a2, 16 * v13);
- v14 = (char *)a1[1];
- v15 = 16 * (a3 - v13);
- memmove(v14, &a2[16 * v13], v15);
- result = &v14[v15];
- }
- a1[1] = (unsigned __int64)result;
- }
- else
- {
- v8 = 0xFFFFFFFFFFFFFFFi64;
- if ( a3 > 0xFFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v9 = v7 >> 1;
- if ( v7 <= 0xFFFFFFFFFFFFFFFi64 - (v7 >> 1) )
- {
- v8 = v9 + v7;
- if ( v9 + v7 < a3 )
- v8 = a3;
- }
- if ( v3 )
- {
- if ( 16 * v7 >= 0x1000 )
- {
- if ( (unsigned __int64)&v3[-*((_QWORD *)v3 - 1) - 8] > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v3 = (char *)*((_QWORD *)v3 - 1);
- }
- j_j_free(v3);
- *a1 = 0i64;
- a1[1] = 0i64;
- a1[2] = 0i64;
- }
- sub_180006900(a1, v8);
- v10 = *a1;
- v11 = 16 * a3;
- memmove((void *)*a1, a2, v11);
- result = (char *)(v11 + v10);
- a1[1] = v11 + v10;
- }
- return result;
- }
- //----- (0000000180006510) ----------------------------------------------------
- char *__fastcall sub_180006510(unsigned __int64 *a1, char *a2, unsigned __int64 a3)
- {
- char *v3; // rdi
- char *v6; // r15
- unsigned __int64 v7; // rcx
- unsigned __int64 v8; // rbx
- unsigned __int64 v9; // rdx
- size_t v10; // rbx
- void *v11; // rcx
- unsigned __int64 v12; // rbp
- char *result; // rax
- v3 = (char *)*a1;
- v6 = a2;
- v7 = (__int64)(a1[2] - *a1) >> 2;
- if ( a3 <= v7 )
- {
- v11 = v3;
- v12 = (__int64)(a1[1] - (_QWORD)v3) >> 2;
- if ( a3 <= v12 )
- {
- v10 = 4 * a3;
- }
- else
- {
- memmove(v3, a2, 4 * v12);
- v3 = (char *)a1[1];
- a2 = &v6[4 * v12];
- v11 = v3;
- v10 = 4 * (a3 - v12);
- }
- memmove(v11, a2, v10);
- }
- else
- {
- v8 = 0x3FFFFFFFFFFFFFFFi64;
- if ( a3 > 0x3FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v9 = v7 >> 1;
- if ( v7 <= 0x3FFFFFFFFFFFFFFFi64 - (v7 >> 1) )
- {
- v8 = v9 + v7;
- if ( v9 + v7 < a3 )
- v8 = a3;
- }
- if ( v3 )
- {
- if ( 4 * v7 >= 0x1000 )
- {
- if ( (unsigned __int64)&v3[-*((_QWORD *)v3 - 1) - 8] > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v3 = (char *)*((_QWORD *)v3 - 1);
- }
- j_j_free(v3);
- *a1 = 0i64;
- a1[1] = 0i64;
- a1[2] = 0i64;
- }
- sub_180004F50(a1, v8);
- v3 = (char *)*a1;
- v10 = 4 * a3;
- memmove((void *)*a1, v6, 4 * a3);
- }
- result = &v3[v10];
- a1[1] = (unsigned __int64)&v3[v10];
- return result;
- }
- //----- (0000000180006650) ----------------------------------------------------
- _QWORD *__fastcall sub_180006650(_QWORD *a1, _QWORD *a2)
- {
- unsigned __int64 v4; // rax
- unsigned __int64 v5; // rbx
- size_t v6; // rbx
- void *v7; // rax
- void *v8; // rcx
- char *v9; // rdi
- const void *v10; // rdx
- size_t v11; // rbx
- sub_180004EA0(a1, a2);
- v4 = 0i64;
- a1[5] = 0i64;
- a1[6] = 0i64;
- a1[7] = 0i64;
- v5 = (__int64)(a2[6] - a2[5]) >> 4;
- if ( v5 )
- {
- if ( v5 > 0xFFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v6 = 16 * v5;
- if ( v6 < 0x1000 )
- {
- if ( v6 )
- v4 = (unsigned __int64)sub_18000A224(v6);
- }
- else
- {
- if ( v6 + 39 <= v6 )
- Concurrency::cancel_current_task();
- v7 = sub_18000A224(v6 + 39);
- v8 = v7;
- if ( !v7 )
- invalid_parameter_noinfo_noreturn();
- v4 = ((unsigned __int64)v7 + 39) & 0xFFFFFFFFFFFFFFE0ui64;
- *(_QWORD *)(v4 - 8) = v8;
- }
- a1[5] = v4;
- a1[6] = v4;
- a1[7] = v6 + v4;
- v9 = (char *)a1[5];
- v10 = (const void *)a2[5];
- v11 = a2[6] - (_QWORD)v10;
- memmove(v9, v10, v11);
- a1[6] = &v9[v11 & 0xFFFFFFFFFFFFFFF0ui64];
- }
- return a1;
- }
- //----- (0000000180006740) ----------------------------------------------------
- __int64 __fastcall sub_180006740(__int64 *a1, __int16 a2)
- {
- __int64 v2; // rcx
- void *v3; // rcx
- void **v4; // rax
- unsigned __int16 v5; // bx
- __int16 v7; // [rsp+28h] [rbp-40h] BYREF
- char v8[6]; // [rsp+2Ah] [rbp-3Eh] BYREF
- void *Block[3]; // [rsp+30h] [rbp-38h] BYREF
- unsigned __int64 v10; // [rsp+48h] [rbp-20h]
- v2 = *a1;
- v7 = a2;
- (*(void (__fastcall **)(__int64, void **, __int16 *, char *))(*(_QWORD *)v2 + 32i64))(v2, Block, &v7, v8);
- v3 = Block[0];
- if ( Block[2] == (void *)1 )
- {
- v4 = Block;
- if ( v10 >= 8 )
- v4 = (void **)Block[0];
- v5 = *(_WORD *)v4;
- }
- else
- {
- v5 = v7;
- }
- if ( v10 >= 8 )
- {
- if ( 2 * v10 + 2 >= 0x1000 )
- {
- v3 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v3 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v3);
- }
- return v5;
- }
- // 180006740: using guessed type char var_3E[6];
- //----- (00000001800067F0) ----------------------------------------------------
- void *__fastcall sub_1800067F0(void *Block, char a2)
- {
- __int64 v2; // rdi
- void **v5; // rbx
- void **v6; // rbx
- void **v7; // rbx
- __int64 v8; // rdi
- void **v9; // rbx
- v2 = *((_QWORD *)Block + 4);
- *(_QWORD *)Block = &std::_Node_class<wchar_t,std::regex_traits<wchar_t>>::`vftable';
- while ( v2 )
- {
- v5 = (void **)v2;
- v2 = *(_QWORD *)(v2 + 24);
- free(v5[2]);
- j_j_free(v5);
- }
- j_j_free(*((void **)Block + 5));
- v6 = (void **)*((_QWORD *)Block + 6);
- if ( v6 )
- {
- free(v6[1]);
- j_j_free(v6);
- }
- v7 = (void **)*((_QWORD *)Block + 7);
- if ( v7 )
- {
- free(v7[1]);
- j_j_free(v7);
- }
- v8 = *((_QWORD *)Block + 9);
- while ( v8 )
- {
- v9 = (void **)v8;
- v8 = *(_QWORD *)(v8 + 24);
- free(v9[2]);
- j_j_free(v9);
- }
- *(_QWORD *)Block = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C7E8: using guessed type void *std::_Node_class<wchar_t,std::regex_traits<wchar_t>>::`vftable';
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180006900) ----------------------------------------------------
- size_t __fastcall sub_180006900(unsigned __int64 *a1, unsigned __int64 a2)
- {
- size_t v3; // rbx
- void *v4; // rax
- void *v5; // rcx
- unsigned __int64 v6; // rax
- size_t result; // rax
- if ( a2 > 0xFFFFFFFFFFFFFFFi64 )
- goto LABEL_11;
- v3 = 16 * a2;
- if ( 16 * a2 < 0x1000 )
- {
- if ( v3 )
- v6 = (unsigned __int64)sub_18000A224(v3);
- else
- v6 = 0i64;
- goto LABEL_10;
- }
- if ( v3 + 39 <= v3 )
- LABEL_11:
- Concurrency::cancel_current_task();
- v4 = sub_18000A224(v3 + 39);
- v5 = v4;
- if ( !v4 )
- invalid_parameter_noinfo_noreturn();
- v6 = ((unsigned __int64)v4 + 39) & 0xFFFFFFFFFFFFFFE0ui64;
- *(_QWORD *)(v6 - 8) = v5;
- LABEL_10:
- *a1 = v6;
- a1[1] = v6;
- result = v3 + v6;
- a1[2] = result;
- return result;
- }
- //----- (0000000180006990) ----------------------------------------------------
- int __fastcall sub_180006990(__int64 a1)
- {
- unsigned __int16 *v2; // rcx
- unsigned __int16 *v3; // rax
- _WORD *v4; // rdx
- int v5; // er8
- unsigned __int16 *v6; // rcx
- unsigned __int16 *v7; // rax
- _WORD *v8; // rdx
- int v9; // er8
- sub_180008630(a1 + 64);
- if ( *(_DWORD *)(a1 + 124) == 94 )
- {
- *(_DWORD *)(*(_QWORD *)(a1 + 72) + 12i64) ^= 1u;
- v2 = *(unsigned __int16 **)a1;
- v3 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v3 )
- {
- if ( *v2 == 92 )
- {
- v4 = v2 + 1;
- if ( v2 + 1 != v3 )
- {
- if ( (v5 = *(_DWORD *)(a1 + 128), (v5 & 8) == 0) && (unsigned __int16)(*v4 - 40) <= 1u
- || (v5 & 0x10) == 0 && ((*v4 - 123) & 0xFFFD) == 0 )
- {
- ++v2;
- }
- }
- }
- *(_QWORD *)a1 = v2 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- }
- if ( (*(_DWORD *)(a1 + 128) & 0x20000000) != 0 && *(_DWORD *)(a1 + 124) == 93 )
- {
- sub_1800086D0(a1 + 64, 93i64);
- v6 = *(unsigned __int16 **)a1;
- v7 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v7 )
- {
- if ( *v6 == 92 )
- {
- v8 = v6 + 1;
- if ( v6 + 1 != v7 )
- {
- if ( (v9 = *(_DWORD *)(a1 + 128), (v9 & 8) == 0) && (unsigned __int16)(*v8 - 40) <= 1u
- || (v9 & 0x10) == 0 && ((*v8 - 123) & 0xFFFD) == 0 )
- {
- ++v6;
- }
- }
- }
- *(_QWORD *)a1 = v6 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- }
- return sub_180007DE0(a1);
- }
- //----- (0000000180006AC0) ----------------------------------------------------
- char __fastcall sub_180006AC0(__int64 a1)
- {
- __int64 v2; // rcx
- int v3; // eax
- signed int v4; // edi
- __int64 v5; // rax
- _OWORD *v6; // rdx
- __int64 v7; // rcx
- __int64 v8; // rcx
- if ( (*(_DWORD *)(a1 + 128) & 0x100) != 0 && sub_180007BC0(a1, 3u) )
- {
- v3 = *(_DWORD *)(a1 + 128);
- v4 = *(_DWORD *)(a1 + 116);
- if ( v4 )
- {
- if ( (v3 & 0x200) != 0 && (unsigned int)v4 > 9
- || (v2 = v4, *(unsigned int *)(a1 + 24) < (unsigned __int64)v4)
- || *(_QWORD *)(a1 + 56) <= (unsigned __int64)v4
- || (v2 = v4 & 0x1F,
- ((1 << (v4 & 0x1F)) & *(_DWORD *)(*(_QWORD *)(a1 + 32) + 4 * ((unsigned __int64)v4 >> 5))) == 0) )
- {
- sub_1800040C0(v2, 3u);
- }
- v6 = sub_18000A224(0x28ui64);
- *v6 = 0i64;
- v6[1] = 0i64;
- *((_QWORD *)v6 + 4) = 0i64;
- *((_QWORD *)v6 + 3) = 0i64;
- *((_QWORD *)v6 + 2) = 0i64;
- *(_QWORD *)v6 = &std::_Node_back::`vftable';
- *((_QWORD *)v6 + 1) = 15i64;
- *((_DWORD *)v6 + 8) = v4;
- *((_QWORD *)v6 + 3) = *(_QWORD *)(a1 + 72);
- v7 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64);
- if ( v7 )
- {
- *((_QWORD *)v6 + 2) = v7;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) + 24i64) = v6;
- }
- v5 = *(_QWORD *)(a1 + 72);
- *(_QWORD *)(v5 + 16) = v6;
- *(_QWORD *)(a1 + 72) = v6;
- }
- else
- {
- if ( (v3 & 0x100000) == 0 )
- sub_1800040C0(v2, 2u);
- LOBYTE(v5) = sub_1800072A0(a1 + 64, 0);
- }
- }
- else if ( sub_180007F60(a1) )
- {
- LOBYTE(v5) = sub_1800072A0(a1 + 64, *(_WORD *)(a1 + 116));
- }
- else if ( (*(_DWORD *)(a1 + 128) & 0x20000) == 0 || (LOBYTE(v5) = sub_180007CD0(a1, 1), !(_BYTE)v5) )
- {
- sub_1800040C0(v8, 2u);
- }
- return v5;
- }
- // 180006C27: variable 'v2' is possibly undefined
- // 180006C32: variable 'v8' is possibly undefined
- // 18000C888: using guessed type void *std::_Node_back::`vftable';
- //----- (0000000180006C50) ----------------------------------------------------
- char __fastcall sub_180006C50(__int64 a1)
- {
- int v2; // edx
- unsigned __int16 *v3; // rax
- unsigned __int16 *v4; // r8
- unsigned __int16 *v5; // rcx
- unsigned __int16 *v6; // rax
- unsigned __int16 *v7; // rdx
- int v8; // ebx
- unsigned __int16 *v9; // rcx
- int v10; // edx
- __int64 v11; // rcx
- _OWORD *v12; // rsi
- int v13; // eax
- int v14; // ebx
- _OWORD *v15; // rdx
- __int64 v16; // rcx
- _OWORD *v18; // rbp
- int v19; // eax
- int v20; // ebx
- _OWORD *v21; // rdx
- __int64 v22; // rcx
- int v23; // edx
- _OWORD *v24; // rbp
- int v25; // eax
- int v26; // ebx
- _OWORD *v27; // rdx
- __int64 v28; // rcx
- int v29; // edx
- bool v30; // cf
- unsigned __int64 v31; // rdx
- _DWORD *v32; // rdx
- ++*(_DWORD *)(a1 + 28);
- v2 = *(_DWORD *)(a1 + 128);
- if ( (v2 & 0x8000000) == 0 && *(_DWORD *)(a1 + 124) == 41 )
- sub_1800040C0(a1, 5u);
- if ( (v2 & 0x20) == 0 || *(_DWORD *)(a1 + 124) != 63 )
- {
- if ( (*(_DWORD *)(a1 + 112) & 0x200) != 0 )
- {
- v18 = sub_1800055C0(a1 + 64, 8);
- sub_1800043A0(a1);
- v19 = *((_DWORD *)v18 + 2);
- if ( v19 == 8 )
- {
- v20 = 9;
- }
- else
- {
- v20 = 12;
- if ( (unsigned int)(v19 - 10) > 1 )
- v20 = 14;
- }
- v21 = sub_18000A224(0x28ui64);
- *v21 = 0i64;
- v21[1] = 0i64;
- *((_QWORD *)v21 + 3) = 0i64;
- *((_DWORD *)v21 + 3) = 0;
- *((_QWORD *)v21 + 2) = 0i64;
- *(_QWORD *)v21 = &std::_Node_end_group::`vftable';
- *((_DWORD *)v21 + 2) = v20;
- *((_QWORD *)v21 + 4) = v18;
- *((_QWORD *)v21 + 3) = *(_QWORD *)(a1 + 72);
- v22 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64);
- if ( v22 )
- {
- *((_QWORD *)v21 + 2) = v22;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) + 24i64) = v21;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) = v21;
- *(_QWORD *)(a1 + 72) = v21;
- }
- else
- {
- v23 = *(_DWORD *)(a1 + 24) + 1;
- *(_DWORD *)(a1 + 24) = v23;
- v24 = sub_1800046B0(a1 + 64, v23);
- sub_1800043A0(a1);
- v25 = *((_DWORD *)v24 + 2);
- if ( v25 == 8 )
- {
- v26 = 9;
- }
- else
- {
- v26 = 12;
- if ( (unsigned int)(v25 - 10) > 1 )
- v26 = 14;
- }
- v27 = sub_18000A224(0x28ui64);
- *v27 = 0i64;
- v27[1] = 0i64;
- *((_QWORD *)v27 + 3) = 0i64;
- *((_DWORD *)v27 + 3) = 0;
- *((_QWORD *)v27 + 2) = 0i64;
- *(_QWORD *)v27 = &std::_Node_end_group::`vftable';
- *((_DWORD *)v27 + 2) = v26;
- *((_QWORD *)v27 + 4) = v24;
- *((_QWORD *)v27 + 3) = *(_QWORD *)(a1 + 72);
- v28 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64);
- if ( v28 )
- {
- *((_QWORD *)v27 + 2) = v28;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) + 24i64) = v27;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) = v27;
- *(_QWORD *)(a1 + 72) = v27;
- v29 = *(_DWORD *)(a1 + 24);
- v30 = __CFADD__(v29, 1);
- v31 = (unsigned int)(v29 + 1);
- if ( v30 )
- v31 = -1i64;
- sub_1800038B0((unsigned __int64 *)(a1 + 32), v31);
- v32 = (_DWORD *)(*(_QWORD *)(a1 + 32) + 4 * ((unsigned __int64)*((unsigned int *)v24 + 8) >> 5));
- *v32 |= 1 << (v24[2] & 0x1F);
- }
- goto LABEL_58;
- }
- v3 = *(unsigned __int16 **)a1;
- v4 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v4 )
- {
- if ( *v3 != 92 )
- goto LABEL_16;
- v5 = v3 + 1;
- if ( v3 + 1 == v4 )
- goto LABEL_16;
- if ( (v2 & 8) == 0 )
- {
- if ( *v5 == 40 || *v5 == 41 )
- {
- LABEL_15:
- v3 = v5;
- LABEL_16:
- *(_QWORD *)a1 = v3 + 1;
- goto LABEL_17;
- }
- v3 = *(unsigned __int16 **)a1;
- }
- if ( (v2 & 0x10) != 0 || *v5 != 123 && *v5 != 125 )
- goto LABEL_16;
- goto LABEL_15;
- }
- LABEL_17:
- sub_1800040D0((unsigned __int16 **)a1);
- v6 = *(unsigned __int16 **)a1;
- v7 = *(unsigned __int16 **)(a1 + 16);
- v8 = *(_DWORD *)(a1 + 124);
- if ( *(unsigned __int16 **)a1 == v7 )
- goto LABEL_29;
- if ( *v6 == 92 )
- {
- v9 = v6 + 1;
- if ( v6 + 1 != v7 )
- {
- v10 = *(_DWORD *)(a1 + 128);
- if ( (v10 & 8) == 0 )
- {
- if ( *v9 == 40 || *v9 == 41 )
- {
- LABEL_27:
- v6 = v9;
- goto LABEL_28;
- }
- v6 = *(unsigned __int16 **)a1;
- }
- if ( (v10 & 0x10) != 0 || *v9 != 123 && *v9 != 125 )
- goto LABEL_28;
- goto LABEL_27;
- }
- }
- LABEL_28:
- *(_QWORD *)a1 = v6 + 1;
- LABEL_29:
- sub_1800040D0((unsigned __int16 **)a1);
- switch ( v8 )
- {
- case ':':
- v12 = sub_1800055C0(a1 + 64, 8);
- sub_1800043A0(a1);
- v13 = *((_DWORD *)v12 + 2);
- if ( v13 == 8 )
- {
- v14 = 9;
- }
- else
- {
- v14 = 12;
- if ( (unsigned int)(v13 - 10) > 1 )
- v14 = 14;
- }
- v15 = sub_18000A224(0x28ui64);
- *v15 = 0i64;
- v15[1] = 0i64;
- *((_QWORD *)v15 + 3) = 0i64;
- *((_DWORD *)v15 + 3) = 0;
- *((_QWORD *)v15 + 2) = 0i64;
- *(_QWORD *)v15 = &std::_Node_end_group::`vftable';
- *((_DWORD *)v15 + 2) = v14;
- *((_QWORD *)v15 + 4) = v12;
- *((_QWORD *)v15 + 3) = *(_QWORD *)(a1 + 72);
- v16 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64);
- if ( v16 )
- {
- *((_QWORD *)v15 + 2) = v16;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) + 24i64) = v15;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) = v15;
- *(_QWORD *)(a1 + 72) = v15;
- LABEL_58:
- --*(_DWORD *)(a1 + 28);
- return 1;
- case '!':
- sub_180008520(a1, 1u);
- --*(_DWORD *)(a1 + 28);
- return 0;
- case '=':
- sub_180008520(a1, 0);
- --*(_DWORD *)(a1 + 28);
- return 0;
- default:
- sub_1800040C0(v11, 0xEu);
- }
- }
- // 180006FFE: variable 'v11' is possibly undefined
- // 1800043A0: using guessed type __int64 __fastcall sub_1800043A0(_QWORD);
- // 18000C8B8: using guessed type void *std::_Node_end_group::`vftable';
- //----- (0000000180007010) ----------------------------------------------------
- __int64 __fastcall sub_180007010(__int64 a1)
- {
- __int64 result; // rax
- int v2; // ebp
- int v4; // esi
- unsigned __int16 *v5; // rcx
- unsigned __int16 *v6; // rax
- _WORD *v7; // rdx
- int v8; // er8
- int v9; // er8
- unsigned __int16 *v10; // rcx
- unsigned __int8 v11; // di
- unsigned __int16 *v12; // rax
- _WORD *v13; // rdx
- unsigned __int16 *v14; // rcx
- unsigned __int16 *v15; // rax
- _WORD *v16; // rdx
- int v17; // er8
- __int64 v18; // rcx
- unsigned __int16 *v19; // rcx
- unsigned __int16 *v20; // rax
- _WORD *v21; // rdx
- int v22; // er8
- result = *(unsigned int *)(a1 + 124);
- v2 = 0;
- v4 = -1;
- if ( (_DWORD)result == 42 )
- goto LABEL_4;
- if ( (_DWORD)result != 43 )
- {
- if ( (_DWORD)result == 63 )
- {
- v4 = 1;
- goto LABEL_4;
- }
- if ( (_DWORD)result != 123 )
- return result;
- v14 = *(unsigned __int16 **)a1;
- v15 = *(unsigned __int16 **)(a1 + 16);
- if ( v14 != v15 )
- {
- if ( *v14 == 92 )
- {
- v16 = v14 + 1;
- if ( v14 + 1 != v15 )
- {
- if ( (v17 = *(_DWORD *)(a1 + 128), (v17 & 8) == 0) && (unsigned __int16)(*v16 - 40) <= 1u
- || (v17 & 0x10) == 0 && ((*v16 - 123) & 0xFFFD) == 0 )
- {
- ++v14;
- }
- }
- }
- *(_QWORD *)a1 = v14 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( !sub_180007BC0(a1, 7u) )
- sub_1800040C0(v18, 7u);
- v2 = *(_DWORD *)(a1 + 116);
- if ( *(_DWORD *)(a1 + 124) == 44 )
- {
- v19 = *(unsigned __int16 **)a1;
- v20 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v20 )
- {
- if ( *v19 == 92 )
- {
- v21 = v19 + 1;
- if ( v19 + 1 != v20 )
- {
- if ( (v22 = *(_DWORD *)(a1 + 128), (v22 & 8) == 0) && (unsigned __int16)(*v21 - 40) <= 1u
- || (v22 & 0x10) == 0 && ((*v21 - 123) & 0xFFFD) == 0 )
- {
- ++v19;
- }
- }
- }
- *(_QWORD *)a1 = v19 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( *(_DWORD *)(a1 + 124) == 125 )
- {
- LABEL_53:
- if ( v4 == -1 || v4 >= v2 )
- goto LABEL_4;
- LABEL_60:
- sub_1800040C0(v18, 7u);
- }
- if ( !sub_180007BC0(a1, 7u) )
- sub_1800040C0(v18, 7u);
- v4 = *(_DWORD *)(a1 + 116);
- }
- else
- {
- v4 = *(_DWORD *)(a1 + 116);
- }
- if ( *(_DWORD *)(a1 + 124) != 125 )
- goto LABEL_60;
- goto LABEL_53;
- }
- v2 = 1;
- LABEL_4:
- *(_DWORD *)(*(_QWORD *)(a1 + 72) + 12i64) |= 4u;
- v5 = *(unsigned __int16 **)a1;
- v6 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v6 )
- {
- if ( *v5 == 92 )
- {
- v7 = v5 + 1;
- if ( v5 + 1 != v6 )
- {
- if ( (v8 = *(_DWORD *)(a1 + 128), (v8 & 8) == 0) && (unsigned __int16)(*v7 - 40) <= 1u
- || (v8 & 0x10) == 0 && ((*v7 - 123) & 0xFFFD) == 0 )
- {
- ++v5;
- }
- }
- }
- *(_QWORD *)a1 = v5 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- v9 = *(_DWORD *)(a1 + 128);
- if ( (v9 & 0x400) != 0 && *(_DWORD *)(a1 + 124) == 63 )
- {
- v10 = *(unsigned __int16 **)a1;
- v11 = 0;
- v12 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v12 )
- {
- if ( *v10 == 92 )
- {
- v13 = v10 + 1;
- if ( v10 + 1 != v12
- && ((v9 & 8) == 0 && (unsigned __int16)(*v13 - 40) <= 1u || (v9 & 0x10) == 0 && ((*v13 - 123) & 0xFFFD) == 0) )
- {
- ++v10;
- }
- }
- *(_QWORD *)a1 = v10 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- }
- else
- {
- v11 = 1;
- }
- return sub_1800087E0((_QWORD *)(a1 + 64), v2, v4, v11);
- }
- // 180007278: variable 'v18' is possibly undefined
- //----- (00000001800072A0) ----------------------------------------------------
- __int64 __fastcall sub_1800072A0(__int64 a1, unsigned __int16 a2)
- {
- __int64 v2; // rax
- _OWORD *v5; // rdx
- __int64 v6; // rcx
- int v7; // eax
- unsigned __int16 v8; // ax
- __int64 v9; // rbx
- unsigned int v10; // eax
- unsigned int v11; // esi
- void *v12; // rax
- __int64 result; // rax
- v2 = *(_QWORD *)(a1 + 8);
- if ( *(_DWORD *)(v2 + 8) != 6 || (*(_BYTE *)(v2 + 12) & 4) != 0 )
- {
- v5 = sub_18000A224(0x30ui64);
- *v5 = 0i64;
- v5[1] = 0i64;
- v5[2] = 0i64;
- *((_QWORD *)v5 + 1) = 6i64;
- *((_QWORD *)v5 + 2) = 0i64;
- *((_QWORD *)v5 + 3) = 0i64;
- *(_QWORD *)v5 = &std::_Node_str<wchar_t>::`vftable';
- *((_QWORD *)v5 + 4) = 0i64;
- *((_QWORD *)v5 + 5) = 0i64;
- *((_QWORD *)v5 + 3) = *(_QWORD *)(a1 + 8);
- v6 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64);
- if ( v6 )
- {
- *((_QWORD *)v5 + 2) = v6;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) + 24i64) = v5;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) = v5;
- *(_QWORD *)(a1 + 8) = v5;
- }
- v7 = *(_DWORD *)(a1 + 16);
- if ( (v7 & 0x100) != 0 )
- {
- v8 = std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), a2);
- }
- else
- {
- if ( (v7 & 0x800) == 0 )
- goto LABEL_11;
- v8 = sub_180006740(*(__int64 **)(a1 + 24), a2);
- }
- a2 = v8;
- LABEL_11:
- v9 = *(_QWORD *)(a1 + 8);
- v10 = *(_DWORD *)(v9 + 36);
- if ( *(_DWORD *)(v9 + 32) <= v10 )
- {
- v11 = v10 + 16;
- v12 = realloc(*(void **)(v9 + 40), 2i64 * (v10 + 16));
- if ( !v12 )
- {
- std::_Xbad_alloc();
- __debugbreak();
- }
- *(_QWORD *)(v9 + 40) = v12;
- *(_DWORD *)(v9 + 32) = v11;
- }
- result = *(_QWORD *)(v9 + 40);
- *(_WORD *)(result + 2i64 * (unsigned int)(*(_DWORD *)(v9 + 36))++) = a2;
- return result;
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- // 18000C100: using guessed type void std::_Xbad_alloc(void);
- // 18000C7D8: using guessed type void *std::_Node_str<wchar_t>::`vftable';
- //----- (00000001800073C0) ----------------------------------------------------
- __int64 __fastcall sub_1800073C0(void **a1, __int64 a2, char a3)
- {
- char v3; // si
- int v6; // edi
- void *v7; // rsi
- unsigned __int8 v8; // r13
- void *v9; // r12
- __int64 *v10; // r15
- char **v11; // rsi
- int v12; // ecx
- int v13; // eax
- void **v14; // rdi
- void *v15; // rcx
- void *v16; // rcx
- void *v17; // rcx
- void *v18; // rcx
- void *v21; // [rsp+28h] [rbp-71h]
- void *Block[2]; // [rsp+30h] [rbp-69h] BYREF
- __int128 v23; // [rsp+40h] [rbp-59h]
- __int128 v24; // [rsp+50h] [rbp-49h] BYREF
- __int128 v25; // [rsp+60h] [rbp-39h]
- void *v26[2]; // [rsp+70h] [rbp-29h] BYREF
- __int128 v27; // [rsp+80h] [rbp-19h]
- __int128 v28; // [rsp+90h] [rbp-9h] BYREF
- __int128 v29; // [rsp+A0h] [rbp+7h]
- v3 = a3;
- v6 = 0;
- *(_OWORD *)v26 = 0i64;
- v27 = 0i64;
- v28 = 0i64;
- v29 = 0i64;
- sub_180006650(v26, a1);
- if ( *(int *)(a2 + 32) <= 0 )
- {
- LABEL_7:
- *(_OWORD *)Block = 0i64;
- v23 = 0i64;
- v24 = 0i64;
- v25 = 0i64;
- sub_180006650(Block, a1);
- v8 = 0;
- v9 = *a1;
- v21 = *a1;
- if ( !(unsigned __int8)sub_180004740(a1, *(_QWORD *)(*(_QWORD *)(a2 + 40) + 16i64)) )
- {
- v10 = (__int64 *)(a1 + 1);
- goto LABEL_20;
- }
- if ( v3 )
- {
- Block[0] = *a1;
- v10 = (__int64 *)(a1 + 1);
- if ( &Block[1] != a1 + 1 )
- {
- sub_180006510((unsigned __int64 *)&Block[1], (char *)*v10, ((_BYTE *)a1[2] - (_BYTE *)a1[1]) >> 2);
- *(_QWORD *)&v24 = a1[4];
- }
- if ( (void **)((char *)&v24 + 8) != a1 + 5 )
- sub_1800063C0((unsigned __int64 *)&v24 + 1, (char *)a1[5], ((_BYTE *)a1[6] - (_BYTE *)a1[5]) >> 4);
- v8 = 1;
- while ( 1 )
- {
- LABEL_20:
- v11 = (char **)(a1 + 5);
- v12 = *(_DWORD *)(a2 + 36);
- if ( v12 != -1 )
- {
- v13 = v6++;
- if ( v13 >= v12 )
- break;
- v11 = (char **)(a1 + 5);
- }
- *a1 = v9;
- if ( v10 != (__int64 *)&v26[1] )
- {
- sub_180006510((unsigned __int64 *)v10, (char *)v26[1], (__int64)(v27 - (unsigned __int64)v26[1]) >> 2);
- v10[3] = v28;
- }
- if ( !(unsigned __int8)sub_180004740(a1, *(_QWORD *)(a2 + 16)) )
- break;
- v9 = *a1;
- if ( (unsigned __int8)sub_180004740(a1, *(_QWORD *)(*(_QWORD *)(a2 + 40) + 16i64)) )
- {
- if ( !a3 )
- goto LABEL_36;
- Block[0] = *a1;
- if ( &Block[1] != (void **)v10 )
- {
- sub_180006510((unsigned __int64 *)&Block[1], (char *)*v10, (v10[1] - *v10) >> 2);
- *(_QWORD *)&v24 = v10[3];
- }
- v11 = (char **)(a1 + 5);
- if ( (void **)((char *)&v24 + 8) != a1 + 5 )
- sub_1800063C0((unsigned __int64 *)&v24 + 1, *v11, ((_BYTE *)a1[6] - (_BYTE *)a1[5]) >> 4);
- v8 = 1;
- }
- else
- {
- v11 = (char **)(a1 + 5);
- }
- if ( v21 == v9 )
- break;
- v21 = v9;
- }
- v14 = Block;
- if ( !v8 )
- v14 = v26;
- *a1 = *v14;
- if ( v10 != (__int64 *)(v14 + 1) )
- {
- sub_180006510((unsigned __int64 *)v10, (char *)v14[1], ((_BYTE *)v14[2] - (_BYTE *)v14[1]) >> 2);
- v10[3] = (__int64)v14[4];
- }
- if ( v11 != (char **)(v14 + 5) )
- sub_1800063C0((unsigned __int64 *)v11, (char *)v14[5], ((_BYTE *)v14[6] - (_BYTE *)v14[5]) >> 4);
- }
- else
- {
- LABEL_36:
- v8 = 1;
- }
- v15 = (void *)*((_QWORD *)&v24 + 1);
- if ( *((_QWORD *)&v24 + 1) )
- {
- if ( ((*((_QWORD *)&v25 + 1) - *((_QWORD *)&v24 + 1)) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v15 = *(void **)(*((_QWORD *)&v24 + 1) - 8i64);
- if ( (unsigned __int64)(*((_QWORD *)&v24 + 1) - (_QWORD)v15 - 8i64) > 0x1F )
- goto LABEL_50;
- }
- j_j_free(v15);
- *((_QWORD *)&v24 + 1) = 0i64;
- v25 = 0i64;
- }
- v16 = Block[1];
- if ( !Block[1] )
- goto LABEL_52;
- if ( (unsigned __int64)(4 * ((__int64)(*((_QWORD *)&v23 + 1) - (unsigned __int64)Block[1]) >> 2)) < 0x1000
- || (v16 = (void *)*((_QWORD *)Block[1] - 1), (unsigned __int64)(Block[1] - v16 - 8) <= 0x1F) )
- {
- j_j_free(v16);
- Block[1] = 0i64;
- v23 = 0i64;
- goto LABEL_52;
- }
- LABEL_50:
- invalid_parameter_noinfo_noreturn();
- }
- while ( 1 )
- {
- v7 = *a1;
- if ( !(unsigned __int8)sub_180004740(a1, *(_QWORD *)(a2 + 16)) )
- break;
- if ( v7 == *a1 )
- v6 = *(_DWORD *)(a2 + 32) - 1;
- if ( ++v6 >= *(_DWORD *)(a2 + 32) )
- {
- v3 = a3;
- goto LABEL_7;
- }
- }
- *a1 = v26[0];
- if ( a1 + 1 != &v26[1] )
- {
- sub_180006510((unsigned __int64 *)a1 + 1, (char *)v26[1], (__int64)(v27 - (unsigned __int64)v26[1]) >> 2);
- a1[4] = (void *)v28;
- }
- if ( a1 + 5 != (void **)((char *)&v28 + 8) )
- sub_1800063C0((unsigned __int64 *)a1 + 5, *((char **)&v28 + 1), (__int64)(v29 - *((_QWORD *)&v28 + 1)) >> 4);
- v8 = 0;
- LABEL_52:
- v17 = (void *)*((_QWORD *)&v28 + 1);
- if ( *((_QWORD *)&v28 + 1) )
- {
- if ( ((*((_QWORD *)&v29 + 1) - *((_QWORD *)&v28 + 1)) & 0xFFFFFFFFFFFFFFF0ui64) >= 0x1000 )
- {
- v17 = *(void **)(*((_QWORD *)&v28 + 1) - 8i64);
- if ( (unsigned __int64)(*((_QWORD *)&v28 + 1) - (_QWORD)v17 - 8i64) > 0x1F )
- LABEL_59:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v17);
- *((_QWORD *)&v28 + 1) = 0i64;
- v29 = 0i64;
- }
- v18 = v26[1];
- if ( v26[1] )
- {
- if ( ((*((_QWORD *)&v27 + 1) - (unsigned __int64)v26[1]) & 0xFFFFFFFFFFFFFFFCui64) >= 0x1000 )
- {
- v18 = (void *)*((_QWORD *)v26[1] - 1);
- if ( (unsigned __int64)(v26[1] - v18 - 8) > 0x1F )
- goto LABEL_59;
- }
- j_j_free(v18);
- }
- return v8;
- }
- // 180004740: using guessed type __int64 __fastcall sub_180004740(_QWORD, _QWORD);
- //----- (0000000180007800) ----------------------------------------------------
- __int64 __fastcall sub_180007800(unsigned __int16 a1, unsigned int *a2, _QWORD *a3)
- {
- __int64 v5; // rbx
- void **v6; // r8
- void *v7; // rcx
- void *v8; // rcx
- unsigned __int64 v9; // r10
- void **v10; // r11
- unsigned __int64 v11; // r9
- unsigned int i; // er14
- unsigned __int64 v13; // rdx
- __int64 v14; // rax
- void **v15; // rdi
- __int64 v16; // rbx
- void **v17; // rdx
- void **v18; // r8
- __int64 v19; // rbx
- void *v20; // rcx
- void *v21; // rcx
- void **v22; // rax
- __int64 v23; // rdx
- unsigned __int8 v24; // bl
- void *v25; // rcx
- void **v26; // rax
- void *Block[3]; // [rsp+20h] [rbp-39h] BYREF
- unsigned __int64 v29; // [rsp+38h] [rbp-21h]
- void *v30[2]; // [rsp+40h] [rbp-19h] BYREF
- __int128 v31; // [rsp+50h] [rbp-9h]
- void *v32[2]; // [rsp+60h] [rbp+7h] BYREF
- __int128 v33; // [rsp+70h] [rbp+17h]
- *(_OWORD *)v30 = 0i64;
- *(_QWORD *)&v31 = 0i64;
- *((_QWORD *)&v31 + 1) = 7i64;
- LOWORD(v30[0]) = 0;
- *(_OWORD *)v32 = 0i64;
- *((_QWORD *)&v33 + 1) = 7i64;
- *(_QWORD *)&v33 = 1i64;
- LODWORD(v32[0]) = a1;
- v5 = sub_180008B10(a3, (__int64)Block, v32, (_BYTE *)v32 + 2);
- if ( v32 != (void **)v5 )
- {
- if ( *((_QWORD *)&v33 + 1) >= 8ui64 )
- {
- v7 = v32[0];
- if ( (unsigned __int64)(2i64 * *((_QWORD *)&v33 + 1) + 2) >= 0x1000 )
- {
- v7 = (void *)*((_QWORD *)v32[0] - 1);
- if ( (unsigned __int64)(v32[0] - v7 - 8) > 0x1F )
- LABEL_10:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v7);
- }
- *(_QWORD *)&v33 = 0i64;
- *((_QWORD *)&v33 + 1) = 7i64;
- LOWORD(v32[0]) = 0;
- *(_OWORD *)v32 = *(_OWORD *)v5;
- v33 = *(_OWORD *)(v5 + 16);
- *(_QWORD *)(v5 + 16) = 0i64;
- *(_QWORD *)(v5 + 24) = 7i64;
- *(_WORD *)v5 = 0;
- }
- if ( v29 >= 8 )
- {
- v8 = Block[0];
- if ( 2 * v29 + 2 >= 0x1000 )
- {
- v8 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v8 - 8) > 0x1F )
- goto LABEL_10;
- }
- j_j_free(v8);
- }
- v9 = *((_QWORD *)&v31 + 1);
- v10 = (void **)v30[0];
- v11 = *((_QWORD *)&v33 + 1);
- while ( a2 )
- {
- for ( i = 0; i < a2[3]; i += *a2 )
- {
- v13 = *a2;
- v14 = *((_QWORD *)a2 + 2);
- if ( v13 > v9 )
- {
- sub_180008D90((__int64)v30, v13, (__int64)v6, (const void *)(v14 + 2i64 * i));
- }
- else
- {
- v15 = v30;
- if ( v9 >= 8 )
- v15 = v10;
- *(_QWORD *)&v31 = *a2;
- v16 = 2 * v13;
- memmove(v15, (const void *)(v14 + 2i64 * i), 2 * v13);
- *(_WORD *)((char *)v15 + v16) = 0;
- }
- v17 = v30;
- if ( *((_QWORD *)&v31 + 1) >= 8ui64 )
- v17 = (void **)v30[0];
- v18 = v30;
- if ( *((_QWORD *)&v31 + 1) >= 8ui64 )
- v18 = (void **)v30[0];
- v19 = sub_180008B10(a3, (__int64)Block, v18, (_BYTE *)v17 + 2 * v31);
- if ( v30 != (void **)v19 )
- {
- if ( *((_QWORD *)&v31 + 1) >= 8ui64 )
- {
- v20 = v30[0];
- if ( (unsigned __int64)(2i64 * *((_QWORD *)&v31 + 1) + 2) >= 0x1000 )
- {
- v20 = (void *)*((_QWORD *)v30[0] - 1);
- if ( (unsigned __int64)(v30[0] - v20 - 8) > 0x1F )
- LABEL_46:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v20);
- }
- *(_QWORD *)&v31 = 0i64;
- *((_QWORD *)&v31 + 1) = 7i64;
- LOWORD(v30[0]) = 0;
- *(_OWORD *)v30 = *(_OWORD *)v19;
- v31 = *(_OWORD *)(v19 + 16);
- *(_QWORD *)(v19 + 16) = 0i64;
- *(_QWORD *)(v19 + 24) = 7i64;
- *(_WORD *)v19 = 0;
- }
- if ( v29 >= 8 )
- {
- v21 = Block[0];
- if ( 2 * v29 + 2 >= 0x1000 )
- {
- v21 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v21 - 8) > 0x1F )
- goto LABEL_46;
- }
- j_j_free(v21);
- }
- v22 = v32;
- v11 = *((_QWORD *)&v33 + 1);
- if ( *((_QWORD *)&v33 + 1) >= 8ui64 )
- v22 = (void **)v32[0];
- v6 = v30;
- v10 = (void **)v30[0];
- v9 = *((_QWORD *)&v31 + 1);
- if ( *((_QWORD *)&v31 + 1) >= 8ui64 )
- v6 = (void **)v30[0];
- v23 = v31;
- if ( (_QWORD)v31 == (_QWORD)v33 )
- {
- if ( !(_QWORD)v31 )
- {
- LABEL_43:
- v24 = 1;
- goto LABEL_48;
- }
- v6 = (void **)((char *)v6 - (__int64)v22);
- while ( *(_WORD *)((char *)v22 + (_QWORD)v6) == *(_WORD *)v22 )
- {
- v22 = (void **)((char *)v22 + 2);
- if ( !--v23 )
- goto LABEL_43;
- }
- }
- }
- a2 = (unsigned int *)*((_QWORD *)a2 + 3);
- }
- v24 = 0;
- LABEL_48:
- if ( v11 >= 8 )
- {
- v25 = v32[0];
- if ( 2 * v11 + 2 >= 0x1000 )
- {
- v25 = (void *)*((_QWORD *)v32[0] - 1);
- if ( (unsigned __int64)(v32[0] - v25 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v25);
- v9 = *((_QWORD *)&v31 + 1);
- v10 = (void **)v30[0];
- }
- *(_QWORD *)&v33 = 0i64;
- *((_QWORD *)&v33 + 1) = 7i64;
- LOWORD(v32[0]) = 0;
- if ( v9 >= 8 )
- {
- v26 = v10;
- if ( 2 * v9 + 2 >= 0x1000 )
- {
- v10 = (void **)*(v10 - 1);
- if ( (unsigned __int64)((char *)v26 - (char *)v10 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v10);
- }
- return v24;
- }
- // 18000799F: variable 'v6' is possibly undefined
- //----- (0000000180007BC0) ----------------------------------------------------
- bool __fastcall sub_180007BC0(__int64 a1, unsigned int a2)
- {
- int v4; // edi
- int v5; // ecx
- int v6; // er8
- int v7; // er9
- __int64 v8; // rcx
- unsigned __int16 *v9; // rax
- unsigned __int16 *v10; // rcx
- _WORD *v11; // rdx
- int v12; // er8
- *(_DWORD *)(a1 + 116) = 0;
- v4 = 0x7FFFFFFF;
- do
- {
- v5 = *(unsigned __int16 *)(a1 + 120);
- if ( (unsigned __int16)(v5 - 48) > 9u )
- break;
- v6 = v5 - 48;
- if ( v5 == 47 )
- break;
- v7 = *(_DWORD *)(a1 + 116);
- v8 = (unsigned int)(0x7FFFFFFF - v6);
- if ( v7 > (int)v8 / 10 )
- sub_1800040C0(v8, a2);
- --v4;
- v9 = *(unsigned __int16 **)a1;
- *(_DWORD *)(a1 + 116) = v6 + 10 * v7;
- v10 = *(unsigned __int16 **)(a1 + 16);
- if ( v9 != v10 )
- {
- if ( *v9 == 92 )
- {
- v11 = v9 + 1;
- if ( v9 + 1 != v10 )
- {
- if ( (v12 = *(_DWORD *)(a1 + 128), (v12 & 8) == 0) && (unsigned __int16)(*v11 - 40) <= 1u
- || (v12 & 0x10) == 0 && ((*v11 - 123) & 0xFFFD) == 0 )
- {
- ++v9;
- }
- }
- }
- *(_QWORD *)a1 = v9 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- }
- while ( v4 );
- return v4 != 0x7FFFFFFF;
- }
- //----- (0000000180007CD0) ----------------------------------------------------
- char __fastcall sub_180007CD0(__int64 a1, char a2)
- {
- unsigned __int16 v4; // bp
- char v5; // al
- unsigned __int16 *v6; // rcx
- unsigned __int16 *v7; // rax
- _WORD *v8; // rdx
- int v9; // er8
- if ( *(_QWORD *)a1 == *(_QWORD *)(a1 + 16) )
- return 0;
- v4 = sub_1800097A0(
- *(_QWORD *)(a1 + 104),
- *(unsigned __int16 **)a1,
- (unsigned __int16 *)(*(_QWORD *)a1 + 2i64),
- BYTE1(*(_DWORD *)(a1 + 112)) & 1);
- if ( !v4 )
- return 0;
- if ( a2 )
- sub_180008630(a1 + 64);
- v5 = std::ctype<wchar_t>::is(*(_QWORD *)(*(_QWORD *)(a1 + 104) + 8i64), 1i64, *(unsigned __int16 *)(a1 + 120));
- sub_1800096C0(a1 + 64, v4, v5);
- v6 = *(unsigned __int16 **)a1;
- v7 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v7 )
- {
- if ( *v6 == 92 )
- {
- v8 = v6 + 1;
- if ( v6 + 1 != v7 )
- {
- if ( (v9 = *(_DWORD *)(a1 + 128), (v9 & 8) == 0) && (unsigned __int16)(*v8 - 40) <= 1u
- || (v9 & 0x10) == 0 && ((*v8 - 123) & 0xFFFD) == 0 )
- {
- ++v6;
- }
- }
- }
- *(_QWORD *)a1 = v6 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- return 1;
- }
- // 18000C0D0: using guessed type __int64 __fastcall std::ctype<wchar_t>::is(_QWORD, _QWORD, _QWORD);
- //----- (0000000180007DE0) ----------------------------------------------------
- int __fastcall sub_180007DE0(__int64 a1)
- {
- int result; // eax
- __int64 v3; // rcx
- int v4; // eax
- unsigned __int16 *v5; // rcx
- unsigned __int16 *v6; // rax
- _WORD *v7; // rdx
- int v8; // er8
- unsigned __int16 v9; // di
- int v10; // eax
- __int64 v11; // rcx
- unsigned __int16 v12; // ax
- __int64 *v13; // rcx
- unsigned __int16 v14; // r8
- for ( result = sub_1800090C0(a1); result; result = sub_1800090C0(a1) )
- {
- if ( result != 2 )
- {
- v4 = *(_DWORD *)(a1 + 116);
- if ( !v4 && (*(_DWORD *)(a1 + 128) & 0x100000) == 0 )
- sub_1800040C0(v3, 2u);
- if ( *(_DWORD *)(a1 + 124) == 45 )
- {
- v5 = *(unsigned __int16 **)a1;
- v6 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v6 )
- {
- if ( *v5 == 92 )
- {
- v7 = v5 + 1;
- if ( v5 + 1 != v6 )
- {
- if ( (v8 = *(_DWORD *)(a1 + 128), (v8 & 8) == 0) && (unsigned __int16)(*v7 - 40) <= 1u
- || (v8 & 0x10) == 0 && ((*v7 - 123) & 0xFFFD) == 0 )
- {
- ++v5;
- }
- }
- }
- *(_QWORD *)a1 = v5 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- v9 = *(_WORD *)(a1 + 116);
- v10 = sub_1800090C0(a1);
- if ( !v10 )
- {
- sub_1800086D0(a1 + 64, *(unsigned __int16 *)(a1 + 116));
- return sub_1800086D0(a1 + 64, 45i64);
- }
- if ( v10 == 2 )
- sub_1800040C0(v11, 8u);
- if ( (*(_DWORD *)(a1 + 112) & 0x800) != 0 )
- {
- v12 = sub_180006740(*(__int64 **)(a1 + 104), *(_WORD *)(a1 + 116));
- v13 = *(__int64 **)(a1 + 104);
- *(_DWORD *)(a1 + 116) = v12;
- v9 = sub_180006740(v13, v9);
- }
- v14 = *(_WORD *)(a1 + 116);
- if ( v14 < v9 )
- sub_1800040C0(v11, 8u);
- sub_1800094A0(a1 + 64, v9, v14);
- }
- else
- {
- sub_1800086D0(a1 + 64, (unsigned __int16)v4);
- }
- }
- }
- return result;
- }
- // 180007F41: variable 'v11' is possibly undefined
- // 180007F4C: variable 'v3' is possibly undefined
- //----- (0000000180007F60) ----------------------------------------------------
- char __fastcall sub_180007F60(__int64 a1)
- {
- __int64 v1; // rbx
- int v2; // edx
- __int16 v3; // ax
- int v4; // eax
- __int16 v5; // ax
- unsigned __int16 *v6; // rcx
- unsigned __int16 *v7; // rax
- _WORD *v8; // r8
- unsigned __int16 *v9; // rcx
- unsigned __int16 *v10; // rax
- _WORD *v11; // r8
- __int64 v12; // rcx
- unsigned __int16 *v13; // rax
- _WORD *v14; // rdx
- int v15; // er8
- unsigned __int16 *v16; // rax
- unsigned __int16 *v17; // r8
- unsigned __int16 *v18; // rcx
- int v19; // edx
- unsigned int v20; // eax
- unsigned __int16 *v21; // rax
- unsigned __int16 *v22; // r8
- unsigned __int16 *v23; // rcx
- int v24; // edi
- int v25; // er8
- __int64 v26; // rcx
- unsigned __int16 *v27; // rdx
- unsigned __int16 *v28; // rax
- unsigned __int16 *v29; // rcx
- int v30; // edx
- char result; // al
- unsigned int v32; // er8
- unsigned int v33; // eax
- unsigned __int16 *v34; // rcx
- unsigned __int16 *v35; // rax
- unsigned __int16 *v36; // rcx
- v1 = a1;
- if ( *(_DWORD *)(a1 + 124) == -1 )
- sub_1800040C0(a1, 2u);
- v2 = *(_DWORD *)(a1 + 128);
- if ( (v2 & 0x10000) != 0 )
- {
- v3 = *(_WORD *)(a1 + 120);
- switch ( v3 )
- {
- case 'f':
- v4 = 12;
- LABEL_18:
- *(_DWORD *)(a1 + 116) = v4;
- v6 = *(unsigned __int16 **)a1;
- v7 = *(unsigned __int16 **)(v1 + 16);
- if ( v6 == v7 )
- {
- LABEL_47:
- sub_1800040D0((unsigned __int16 **)v1);
- goto LABEL_63;
- }
- if ( *v6 == 92 )
- {
- v8 = v6 + 1;
- if ( v6 + 1 != v7
- && ((v2 & 8) == 0 && (unsigned __int16)(*v8 - 40) <= 1u || (v2 & 0x10) == 0 && ((*v8 - 123) & 0xFFFD) == 0) )
- {
- *(_QWORD *)v1 = v6 + 2;
- sub_1800040D0((unsigned __int16 **)v1);
- goto LABEL_63;
- }
- }
- LABEL_46:
- *(_QWORD *)v1 = v6 + 1;
- goto LABEL_47;
- case 'n':
- v4 = 10;
- goto LABEL_18;
- case 'r':
- v4 = 13;
- goto LABEL_18;
- case 't':
- v4 = 9;
- goto LABEL_18;
- case 'v':
- v4 = 11;
- goto LABEL_18;
- }
- }
- if ( (v2 & 0x8000) != 0 )
- {
- v5 = *(_WORD *)(a1 + 120);
- if ( v5 == 97 )
- {
- v4 = 7;
- goto LABEL_18;
- }
- if ( v5 == 98 )
- {
- v4 = 8;
- goto LABEL_18;
- }
- }
- LOWORD(a1) = *(_WORD *)(a1 + 120);
- if ( (_WORD)a1 == 99 )
- {
- if ( (v2 & 0x40000) != 0 )
- {
- v9 = *(unsigned __int16 **)v1;
- v10 = *(unsigned __int16 **)(v1 + 16);
- if ( *(unsigned __int16 **)v1 != v10 )
- {
- if ( *v9 == 92 )
- {
- v11 = v9 + 1;
- if ( v9 + 1 != v10
- && ((v2 & 8) == 0 && (unsigned __int16)(*v11 - 40) <= 1u || (v2 & 0x10) == 0 && ((*v11 - 123) & 0xFFFD) == 0) )
- {
- ++v9;
- }
- }
- *(_QWORD *)v1 = v9 + 1;
- }
- sub_1800040D0((unsigned __int16 **)v1);
- if ( !(unsigned __int8)std::ctype<wchar_t>::is(
- *(_QWORD *)(*(_QWORD *)(v1 + 104) + 8i64),
- 259i64,
- *(unsigned __int16 *)(v1 + 120)) )
- sub_1800040C0(v12, 2u);
- v6 = *(unsigned __int16 **)v1;
- *(_DWORD *)(v1 + 116) = *(_WORD *)(v1 + 120) & 0x1F;
- v13 = *(unsigned __int16 **)(v1 + 16);
- if ( v6 == v13 )
- goto LABEL_47;
- if ( *v6 == 92 )
- {
- v14 = v6 + 1;
- if ( v6 + 1 != v13 )
- {
- if ( (v15 = *(_DWORD *)(v1 + 128), (v15 & 8) == 0) && (unsigned __int16)(*v14 - 40) <= 1u
- || (v15 & 0x10) == 0 && ((*v14 - 123) & 0xFFFD) == 0 )
- {
- ++v6;
- }
- }
- }
- goto LABEL_46;
- }
- goto LABEL_79;
- }
- if ( (_WORD)a1 != 120 )
- {
- if ( (_WORD)a1 != 117 || (v2 & 0x800) == 0 )
- goto LABEL_79;
- v21 = *(unsigned __int16 **)v1;
- v22 = *(unsigned __int16 **)(v1 + 16);
- if ( *(unsigned __int16 **)v1 == v22 )
- {
- LABEL_78:
- sub_1800040D0((unsigned __int16 **)v1);
- v19 = 4;
- goto LABEL_62;
- }
- if ( *v21 != 92 || (v23 = v21 + 1, v21 + 1 == v22) )
- {
- LABEL_77:
- *(_QWORD *)v1 = v21 + 1;
- goto LABEL_78;
- }
- if ( (v2 & 8) == 0 )
- {
- if ( (unsigned __int16)(*v23 - 40) <= 1u )
- {
- LABEL_76:
- v21 = v23;
- goto LABEL_77;
- }
- v21 = *(unsigned __int16 **)v1;
- }
- if ( (v2 & 0x10) != 0 || *v23 != 123 && *v23 != 125 )
- goto LABEL_77;
- goto LABEL_76;
- }
- if ( (v2 & 0x1000) != 0 )
- {
- v16 = *(unsigned __int16 **)v1;
- v17 = *(unsigned __int16 **)(v1 + 16);
- if ( *(unsigned __int16 **)v1 == v17 )
- {
- LABEL_61:
- sub_1800040D0((unsigned __int16 **)v1);
- v19 = 2;
- LABEL_62:
- sub_180008FA0(v1, v19);
- goto LABEL_63;
- }
- if ( *v16 != 92 || (v18 = v16 + 1, v16 + 1 == v17) )
- {
- LABEL_60:
- *(_QWORD *)v1 = v16 + 1;
- goto LABEL_61;
- }
- if ( (v2 & 8) == 0 )
- {
- if ( (unsigned __int16)(*v18 - 40) <= 1u )
- {
- LABEL_59:
- v16 = v18;
- goto LABEL_60;
- }
- v16 = *(unsigned __int16 **)v1;
- }
- if ( (v2 & 0x10) != 0 || *v18 != 123 && *v18 != 125 )
- goto LABEL_60;
- goto LABEL_59;
- }
- LABEL_79:
- if ( (v2 & 0x2000) == 0 )
- {
- LABEL_100:
- v32 = *(_DWORD *)(v1 + 128);
- if ( (v32 & 0x400000) != 0 )
- {
- switch ( (__int16)a1 )
- {
- case 'D':
- case 'S':
- case 'W':
- case 'c':
- case 'd':
- case 's':
- case 'w':
- goto LABEL_116;
- default:
- goto LABEL_106;
- }
- }
- switch ( (__int16)a1 )
- {
- case '"':
- case '/':
- v33 = HIBYTE(v32);
- goto LABEL_105;
- case '$':
- case '*':
- case '.':
- case '[':
- case '\\':
- case '^':
- case '|':
- goto LABEL_106;
- case '(':
- case ')':
- case '+':
- case '?':
- case '{':
- case '}':
- v33 = v32 >> 23;
- LABEL_105:
- if ( (v33 & 1) == 0 )
- goto LABEL_116;
- LABEL_106:
- v34 = *(unsigned __int16 **)v1;
- *(_DWORD *)(v1 + 116) = *(unsigned __int16 *)(v1 + 120);
- v35 = *(unsigned __int16 **)(v1 + 16);
- if ( v34 != v35 )
- {
- if ( *v34 == 92 )
- {
- v36 = v34 + 1;
- if ( v36 != v35
- && ((v32 & 8) == 0 && (unsigned __int16)(*v36 - 40) <= 1u
- || (v32 & 0x10) == 0 && ((*v36 - 123) & 0xFFFD) == 0) )
- {
- *(_QWORD *)v1 = v36;
- }
- }
- *(_QWORD *)v1 += 2i64;
- }
- sub_1800040D0((unsigned __int16 **)v1);
- result = 1;
- break;
- default:
- LABEL_116:
- result = 0;
- break;
- }
- return result;
- }
- v24 = 3;
- *(_DWORD *)(v1 + 116) = 0;
- while ( 1 )
- {
- a1 = *(unsigned __int16 *)(v1 + 120);
- if ( (unsigned __int16)(a1 - 48) > 7u )
- break;
- v25 = a1 - 48;
- if ( (_DWORD)a1 == 47 )
- break;
- v26 = *(unsigned int *)(v1 + 116);
- if ( (int)v26 > (0x7FFFFFFF - v25) / 8 )
- sub_1800040C0(v26, 2u);
- v27 = *(unsigned __int16 **)(v1 + 16);
- *(_DWORD *)(v1 + 116) = v25 + 8 * v26;
- --v24;
- v28 = *(unsigned __int16 **)v1;
- if ( *(unsigned __int16 **)v1 == v27 )
- goto LABEL_95;
- if ( *v28 == 92 )
- {
- v29 = v28 + 1;
- if ( v28 + 1 != v27 )
- {
- v30 = *(_DWORD *)(v1 + 128);
- if ( (v30 & 8) != 0 )
- goto LABEL_90;
- if ( (unsigned __int16)(*v29 - 40) > 1u )
- {
- v28 = *(unsigned __int16 **)v1;
- LABEL_90:
- if ( (v30 & 0x10) != 0 || *v29 != 123 && *v29 != 125 )
- goto LABEL_94;
- }
- v28 = v29;
- }
- }
- LABEL_94:
- *(_QWORD *)v1 = v28 + 1;
- LABEL_95:
- sub_1800040D0((unsigned __int16 **)v1);
- if ( !v24 )
- goto LABEL_98;
- }
- if ( v24 == 3 )
- goto LABEL_100;
- LABEL_98:
- if ( !*(_DWORD *)(v1 + 116) )
- sub_1800040C0(a1, 2u);
- LABEL_63:
- v20 = *(_DWORD *)(v1 + 116);
- if ( v20 > 0xFFFF )
- sub_1800040C0(a1, 2u);
- *(_DWORD *)(v1 + 116) = (unsigned __int16)v20;
- return 1;
- }
- // 180008446: variable 'v12' is possibly undefined
- // 180008451: variable 'a1' is possibly undefined
- // 18000C0D0: using guessed type __int64 __fastcall std::ctype<wchar_t>::is(_QWORD, _QWORD, _QWORD);
- //----- (0000000180008520) ----------------------------------------------------
- __int64 __fastcall sub_180008520(__int64 a1, unsigned __int8 a2)
- {
- int v3; // ebx
- _OWORD *v4; // rdi
- _OWORD *v5; // r8
- __int64 v6; // rcx
- __int64 result; // rax
- v3 = a2;
- v4 = sub_18000A224(0x28ui64);
- *v4 = 0i64;
- v4[1] = 0i64;
- *((_QWORD *)v4 + 1) = (unsigned int)(v3 + 10);
- *((_QWORD *)v4 + 2) = 0i64;
- *((_QWORD *)v4 + 3) = 0i64;
- *(_QWORD *)v4 = &std::_Node_assert::`vftable';
- *((_QWORD *)v4 + 4) = 0i64;
- v5 = sub_18000A224(0x20ui64);
- *v5 = 0i64;
- v5[1] = 0i64;
- *(_QWORD *)v5 = &std::_Node_base::`vftable';
- *((_QWORD *)v5 + 1) = 1i64;
- *((_QWORD *)v5 + 2) = 0i64;
- *((_QWORD *)v5 + 3) = 0i64;
- *((_QWORD *)v4 + 3) = *(_QWORD *)(a1 + 72);
- v6 = *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64);
- if ( v6 )
- {
- *((_QWORD *)v4 + 2) = v6;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) + 24i64) = v4;
- }
- *(_QWORD *)(*(_QWORD *)(a1 + 72) + 16i64) = v4;
- *((_QWORD *)v4 + 4) = v5;
- *((_QWORD *)v5 + 3) = v4;
- *(_QWORD *)(a1 + 72) = v5;
- sub_1800043A0(a1);
- result = sub_180004600(a1 + 64, (__int64)v4);
- *(_QWORD *)(a1 + 72) = v4;
- return result;
- }
- // 1800043A0: using guessed type __int64 __fastcall sub_1800043A0(_QWORD);
- // 18000C8A8: using guessed type void *std::_Node_assert::`vftable';
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180008630) ----------------------------------------------------
- __int64 __fastcall sub_180008630(__int64 a1)
- {
- _OWORD *v2; // rdx
- __int64 v3; // rcx
- __int64 result; // rax
- v2 = sub_18000A224(0x50ui64);
- *v2 = 0i64;
- v2[1] = 0i64;
- v2[2] = 0i64;
- v2[3] = 0i64;
- v2[4] = 0i64;
- *((_QWORD *)v2 + 3) = 0i64;
- *((_QWORD *)v2 + 1) = 7i64;
- *((_QWORD *)v2 + 2) = 0i64;
- *(_QWORD *)v2 = &std::_Node_class<wchar_t,std::regex_traits<wchar_t>>::`vftable';
- *((_QWORD *)v2 + 4) = 0i64;
- *((_QWORD *)v2 + 5) = 0i64;
- *((_QWORD *)v2 + 6) = 0i64;
- *((_QWORD *)v2 + 7) = 0i64;
- *((_WORD *)v2 + 32) = 0;
- *((_QWORD *)v2 + 9) = 0i64;
- *((_QWORD *)v2 + 3) = *(_QWORD *)(a1 + 8);
- v3 = *(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64);
- if ( v3 )
- {
- *((_QWORD *)v2 + 2) = v3;
- *(_QWORD *)(*(_QWORD *)(*(_QWORD *)(a1 + 8) + 16i64) + 24i64) = v2;
- }
- result = *(_QWORD *)(a1 + 8);
- *(_QWORD *)(result + 16) = v2;
- *(_QWORD *)(a1 + 8) = v2;
- return result;
- }
- // 18000C7E8: using guessed type void *std::_Node_class<wchar_t,std::regex_traits<wchar_t>>::`vftable';
- //----- (00000001800086D0) ----------------------------------------------------
- int __fastcall sub_1800086D0(__int64 a1, __int64 a2)
- {
- int v2; // eax
- unsigned __int16 v4; // di
- __int64 v5; // rbx
- _OWORD *v6; // r8
- unsigned __int64 v7; // rcx
- __int64 v8; // rax
- __int64 v9; // rsi
- void *v10; // rbx
- unsigned int v11; // eax
- unsigned int v12; // esi
- void *v13; // rax
- v2 = *(_DWORD *)(a1 + 16);
- v4 = a2;
- if ( (unsigned __int16)a2 >= 0x100u )
- {
- if ( (v2 & 0x100) != 0 )
- v4 = std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), a2);
- v9 = *(_QWORD *)(a1 + 8);
- v10 = *(void **)(v9 + 48);
- if ( !v10 )
- {
- v10 = sub_18000A224(0x10ui64);
- *(_QWORD *)v10 = 0i64;
- *((_QWORD *)v10 + 1) = 0i64;
- *(_QWORD *)(v9 + 48) = v10;
- }
- v11 = *((_DWORD *)v10 + 1);
- if ( *(_DWORD *)v10 <= v11 )
- {
- v12 = v11 + 16;
- v13 = realloc(*((void **)v10 + 1), 2i64 * (v11 + 16));
- if ( !v13 )
- {
- std::_Xbad_alloc();
- __debugbreak();
- }
- *((_QWORD *)v10 + 1) = v13;
- *(_DWORD *)v10 = v12;
- }
- v8 = *((_QWORD *)v10 + 1);
- *(_WORD *)(v8 + 2i64 * (unsigned int)(*((_DWORD *)v10 + 1))++) = v4;
- }
- else
- {
- if ( (v2 & 0x100) != 0 )
- v4 = std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), a2);
- v5 = *(_QWORD *)(a1 + 8);
- v6 = *(_OWORD **)(v5 + 40);
- if ( !v6 )
- {
- v6 = sub_18000A224(0x20ui64);
- *v6 = 0i64;
- v6[1] = 0i64;
- *(_QWORD *)(v5 + 40) = v6;
- }
- v7 = (unsigned __int64)v4 >> 3;
- LODWORD(v8) = *((unsigned __int8 *)v6 + v7) | (1 << (v4 & 7));
- *((_BYTE *)v6 + v7) = v8;
- }
- return v8;
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- // 18000C100: using guessed type void std::_Xbad_alloc(void);
- //----- (00000001800087E0) ----------------------------------------------------
- __int64 __fastcall sub_1800087E0(_QWORD *a1, int a2, int a3, unsigned __int8 a4)
- {
- __int64 v4; // rax
- int v6; // er13
- __int64 v9; // rdi
- int v10; // eax
- _OWORD *v11; // r15
- _OWORD *v12; // r14
- _OWORD *v13; // r12
- _OWORD *v14; // rbx
- __int64 v15; // rcx
- __int64 result; // rax
- __int64 v17; // rdx
- __int64 v18; // rcx
- __int64 v19; // rcx
- _OWORD *v20; // rbx
- _OWORD *v21; // r9
- int v22; // er8
- __int64 v23; // rcx
- _OWORD *v24; // [rsp+50h] [rbp+8h]
- v4 = a1[1];
- v6 = a4;
- if ( *(_DWORD *)(v4 + 8) == 6 && *(_DWORD *)(v4 + 36) != 1 )
- sub_1800072A0((__int64)a1, *(_WORD *)(*(_QWORD *)(v4 + 40) + 2i64 * (unsigned int)--*(_DWORD *)(v4 + 36)));
- v9 = a1[1];
- v10 = *(_DWORD *)(v9 + 8);
- if ( v10 == 9 || v10 == 14 )
- v9 = *(_QWORD *)(v9 + 32);
- if ( a2 || a3 != 1 )
- {
- v20 = sub_18000A224(0x28ui64);
- *v20 = 0i64;
- v20[1] = 0i64;
- *((_QWORD *)v20 + 1) = 19i64;
- *((_QWORD *)v20 + 2) = 0i64;
- *((_QWORD *)v20 + 3) = 0i64;
- *(_QWORD *)v20 = &std::_Node_end_rep::`vftable';
- *((_QWORD *)v20 + 4) = 0i64;
- v21 = sub_18000A224(0x38ui64);
- *v21 = 0i64;
- v21[1] = 0i64;
- v21[2] = 0i64;
- *((_QWORD *)v21 + 6) = 0i64;
- v22 = *(_DWORD *)(*a1 + 36i64);
- *(_DWORD *)(*a1 + 36i64) = v22 + 1;
- *((_DWORD *)v21 + 3) = 2 * v6;
- *(_QWORD *)v21 = &std::_Node_rep::`vftable';
- *((_DWORD *)v21 + 2) = 18;
- *((_QWORD *)v21 + 2) = 0i64;
- *((_QWORD *)v21 + 3) = 0i64;
- *((_DWORD *)v21 + 8) = a2;
- *((_DWORD *)v21 + 9) = a3;
- *((_QWORD *)v21 + 5) = v20;
- *((_DWORD *)v21 + 12) = v22;
- *((_DWORD *)v21 + 13) = -1;
- *((_QWORD *)v20 + 4) = v21;
- *((_QWORD *)v20 + 3) = a1[1];
- v23 = *(_QWORD *)(a1[1] + 16i64);
- if ( v23 )
- {
- *((_QWORD *)v20 + 2) = v23;
- *(_QWORD *)(*(_QWORD *)(a1[1] + 16i64) + 24i64) = v20;
- }
- *(_QWORD *)(a1[1] + 16i64) = v20;
- a1[1] = v20;
- *(_QWORD *)(*(_QWORD *)(v9 + 24) + 16i64) = v21;
- result = *(_QWORD *)(v9 + 24);
- *((_QWORD *)v21 + 3) = result;
- *(_QWORD *)(v9 + 24) = v21;
- *((_QWORD *)v21 + 2) = v9;
- }
- else
- {
- v11 = sub_18000A224(0x20ui64);
- *v11 = 0i64;
- v11[1] = 0i64;
- *((_QWORD *)v11 + 1) = 17i64;
- *((_QWORD *)v11 + 2) = 0i64;
- *((_QWORD *)v11 + 3) = 0i64;
- *(_QWORD *)v11 = &std::_Node_endif::`vftable';
- v12 = sub_18000A224(0x30ui64);
- *v12 = 0i64;
- v12[1] = 0i64;
- v12[2] = 0i64;
- *((_QWORD *)v12 + 1) = 16i64;
- *((_QWORD *)v12 + 2) = 0i64;
- *((_QWORD *)v12 + 3) = 0i64;
- *(_QWORD *)v12 = &std::_Node_if::`vftable';
- *((_QWORD *)v12 + 4) = v11;
- *((_QWORD *)v12 + 5) = 0i64;
- v13 = sub_18000A224(0x30ui64);
- *v13 = 0i64;
- v13[1] = 0i64;
- v13[2] = 0i64;
- *((_QWORD *)v13 + 1) = 16i64;
- *((_QWORD *)v13 + 2) = 0i64;
- *((_QWORD *)v13 + 3) = 0i64;
- *(_QWORD *)v13 = &std::_Node_if::`vftable';
- *((_QWORD *)v13 + 4) = v11;
- *((_QWORD *)v13 + 5) = 0i64;
- v14 = sub_18000A224(0x20ui64);
- *v14 = 0i64;
- v14[1] = 0i64;
- *((_QWORD *)v14 + 1) = 8i64;
- *(_QWORD *)v14 = &std::_Node_base::`vftable';
- *((_QWORD *)v14 + 2) = 0i64;
- *((_QWORD *)v14 + 3) = 0i64;
- v24 = sub_18000A224(0x28ui64);
- *v24 = 0i64;
- v24[1] = 0i64;
- *((_QWORD *)v24 + 1) = 9i64;
- *(_QWORD *)v24 = &std::_Node_end_group::`vftable';
- *((_QWORD *)v24 + 4) = v14;
- *((_QWORD *)v13 + 2) = v14;
- *((_QWORD *)v14 + 3) = v13;
- *((_QWORD *)v14 + 2) = v24;
- *((_QWORD *)v24 + 3) = v14;
- *((_QWORD *)v24 + 2) = v11;
- *((_QWORD *)v12 + 5) = v13;
- *((_QWORD *)v11 + 3) = a1[1];
- v15 = *(_QWORD *)(a1[1] + 16i64);
- if ( v15 )
- {
- *((_QWORD *)v11 + 2) = v15;
- *(_QWORD *)(*(_QWORD *)(a1[1] + 16i64) + 24i64) = v11;
- }
- *(_QWORD *)(a1[1] + 16i64) = v11;
- a1[1] = v11;
- *(_QWORD *)(*(_QWORD *)(v9 + 24) + 16i64) = v12;
- result = *(_QWORD *)(v9 + 24);
- *((_QWORD *)v12 + 3) = result;
- *(_QWORD *)(v9 + 24) = v12;
- *((_QWORD *)v12 + 2) = v9;
- if ( !(_BYTE)v6 )
- {
- v17 = *((_QWORD *)v13 + 2);
- v18 = *(_QWORD *)(v9 + 24);
- *(_QWORD *)(v9 + 24) = *(_QWORD *)(v17 + 24);
- *(_QWORD *)(v17 + 24) = v18;
- result = *((_QWORD *)v13 + 2);
- v19 = *((_QWORD *)v12 + 2);
- *((_QWORD *)v12 + 2) = result;
- *((_QWORD *)v13 + 2) = v19;
- }
- }
- return result;
- }
- // 18000C848: using guessed type void *std::_Node_rep::`vftable';
- // 18000C858: using guessed type void *std::_Node_end_rep::`vftable';
- // 18000C868: using guessed type void *std::_Node_if::`vftable';
- // 18000C878: using guessed type void *std::_Node_endif::`vftable';
- // 18000C8B8: using guessed type void *std::_Node_end_group::`vftable';
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180008B10) ----------------------------------------------------
- __int64 __fastcall sub_180008B10(_QWORD *a1, __int64 a2, _BYTE *a3, _BYTE *a4)
- {
- __int64 v7; // rsi
- size_t v8; // rbx
- unsigned __int64 v9; // rax
- __int64 v10; // r12
- char *v11; // rbp
- unsigned __int64 v12; // rsi
- void *v13; // rax
- char *v14; // r15
- __int64 v15; // r12
- unsigned __int64 v16; // rdx
- _QWORD *v17; // rcx
- void *v18; // rcx
- char *v19; // rax
- void *Block[2]; // [rsp+28h] [rbp-80h] BYREF
- __m128i si128; // [rsp+38h] [rbp-70h]
- __int64 v23; // [rsp+48h] [rbp-60h]
- __int128 v24; // [rsp+50h] [rbp-58h]
- __int64 v25; // [rsp+60h] [rbp-48h]
- v23 = a2;
- *(_OWORD *)a2 = 0i64;
- *(_QWORD *)(a2 + 16) = 0i64;
- *(_QWORD *)(a2 + 24) = 7i64;
- *(_WORD *)a2 = 0;
- if ( a3 != a4 )
- {
- v24 = 0i64;
- v7 = 0i64;
- v25 = 0i64;
- v8 = a4 - a3;
- v9 = (a4 - a3) >> 1;
- v10 = 0i64;
- v11 = 0i64;
- if ( (unsigned __int64)(a4 - a3) < 2 )
- {
- v14 = (char *)v24;
- }
- else
- {
- if ( v9 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v12 = 2 * v9;
- if ( 2 * v9 < 0x1000 )
- {
- if ( v12 )
- v11 = (char *)sub_18000A224(2 * v9);
- else
- v11 = 0i64;
- }
- else
- {
- if ( v12 + 39 <= v12 )
- Concurrency::cancel_current_task();
- v13 = sub_18000A224(v12 + 39);
- if ( !v13 )
- LABEL_28:
- invalid_parameter_noinfo_noreturn();
- v11 = (char *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *((_QWORD *)v11 - 1) = v13;
- }
- v14 = v11;
- *(_QWORD *)&v24 = v11;
- v7 = (__int64)&v11[v12];
- v10 = v7;
- v25 = v7;
- memmove(v11, a3, v8);
- *((_QWORD *)&v24 + 1) = v7;
- }
- v15 = (v10 - (__int64)v11) >> 1;
- std::ctype<wchar_t>::tolower(a1[1], v14, &v11[2 * v15]);
- (*(void (__fastcall **)(_QWORD, void **, char *, char *, int))(*(_QWORD *)*a1 + 32i64))(
- *a1,
- Block,
- v14,
- &v14[2 * v15],
- 1);
- if ( (void **)a2 != Block )
- {
- v16 = *(_QWORD *)(a2 + 24);
- if ( v16 >= 8 )
- {
- v17 = *(_QWORD **)a2;
- if ( 2 * v16 + 2 >= 0x1000 )
- {
- if ( (unsigned __int64)v17 - *(v17 - 1) - 8 > 0x1F )
- goto LABEL_23;
- v17 = (_QWORD *)*(v17 - 1);
- }
- j_j_free(v17);
- }
- *(_QWORD *)(a2 + 24) = 7i64;
- *(_OWORD *)a2 = *(_OWORD *)Block;
- *(__m128i *)(a2 + 16) = si128;
- si128 = _mm_load_si128((const __m128i *)&xmmword_18000CA00);
- LOWORD(Block[0]) = 0;
- }
- if ( si128.m128i_i64[1] >= 8ui64 )
- {
- v18 = Block[0];
- if ( (unsigned __int64)(2 * si128.m128i_i64[1] + 2) >= 0x1000 )
- {
- v18 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v18 - 8) > 0x1F )
- LABEL_23:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v18);
- }
- if ( v14 )
- {
- v19 = v14;
- if ( (unsigned __int64)(2 * ((v7 - (__int64)v14) >> 1)) >= 0x1000 )
- {
- v14 = (char *)*((_QWORD *)v14 - 1);
- if ( (unsigned __int64)(v19 - v14 - 8) > 0x1F )
- goto LABEL_28;
- }
- j_j_free(v14);
- }
- }
- return a2;
- }
- // 18000C0C0: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD, _QWORD);
- // 18000CA00: using guessed type __int128 xmmword_18000CA00;
- //----- (0000000180008D90) ----------------------------------------------------
- __int64 __fastcall sub_180008D90(__int64 a1, unsigned __int64 a2, __int64 a3, const void *a4)
- {
- __int64 v4; // rbx
- unsigned __int64 v8; // rdx
- unsigned __int64 v9; // rbp
- unsigned __int64 v10; // rcx
- unsigned __int64 v11; // rax
- size_t v12; // rcx
- void *v13; // rax
- _QWORD *v14; // rdi
- void *v15; // rcx
- v4 = 0x7FFFFFFFFFFFFFFEi64;
- if ( a2 > 0x7FFFFFFFFFFFFFFEi64 )
- sub_180001210();
- v8 = a2 | 7;
- v9 = *(_QWORD *)(a1 + 24);
- if ( v8 <= 0x7FFFFFFFFFFFFFFEi64 )
- {
- v10 = v9 >> 1;
- if ( v9 <= 0x7FFFFFFFFFFFFFFEi64 - (v9 >> 1) )
- {
- v4 = v8;
- if ( v8 < v10 + v9 )
- v4 = v10 + v9;
- }
- }
- v11 = v4 + 1;
- if ( v4 == -1 )
- v11 = -1i64;
- if ( v11 > 0x7FFFFFFFFFFFFFFFi64 )
- goto LABEL_24;
- v12 = 2 * v11;
- if ( 2 * v11 < 0x1000 )
- {
- if ( v12 )
- v14 = sub_18000A224(v12);
- else
- v14 = 0i64;
- goto LABEL_16;
- }
- if ( v12 + 39 <= v12 )
- LABEL_24:
- Concurrency::cancel_current_task();
- v13 = sub_18000A224(v12 + 39);
- if ( !v13 )
- goto LABEL_22;
- v14 = (_QWORD *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *(v14 - 1) = v13;
- LABEL_16:
- *(_QWORD *)(a1 + 24) = v4;
- *(_QWORD *)(a1 + 16) = a2;
- memcpy(v14, a4, 2 * a2);
- *((_WORD *)v14 + a2) = 0;
- if ( v9 >= 8 )
- {
- v15 = *(void **)a1;
- if ( 2 * v9 + 2 < 0x1000 )
- {
- LABEL_20:
- j_j_free(v15);
- goto LABEL_21;
- }
- if ( (unsigned __int64)v15 - *((_QWORD *)v15 - 1) - 8 <= 0x1F )
- {
- v15 = (void *)*((_QWORD *)v15 - 1);
- goto LABEL_20;
- }
- LABEL_22:
- invalid_parameter_noinfo_noreturn();
- }
- LABEL_21:
- *(_QWORD *)a1 = v14;
- return a1;
- }
- //----- (0000000180008EF0) ----------------------------------------------------
- __int64 __fastcall sub_180008EF0(__int64 a1)
- {
- _QWORD *v2; // rcx
- __int64 result; // rax
- v2 = *(_QWORD **)a1;
- if ( v2 )
- {
- if ( (unsigned __int64)(2 * ((__int64)(*(_QWORD *)(a1 + 16) - (_QWORD)v2) >> 1)) >= 0x1000 )
- {
- if ( (unsigned __int64)v2 - *(v2 - 1) - 8 > 0x1F )
- invalid_parameter_noinfo_noreturn();
- v2 = (_QWORD *)*(v2 - 1);
- }
- j_j_free(v2);
- result = 0i64;
- *(_QWORD *)a1 = 0i64;
- *(_QWORD *)(a1 + 8) = 0i64;
- *(_QWORD *)(a1 + 16) = 0i64;
- }
- return result;
- }
- //----- (0000000180008F50) ----------------------------------------------------
- void *__fastcall sub_180008F50(void *Block, char a2)
- {
- free(*((void **)Block + 5));
- *(_QWORD *)Block = &std::_Node_base::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(Block);
- return Block;
- }
- // 18000C8D8: using guessed type void *std::_Node_base::`vftable';
- //----- (0000000180008FA0) ----------------------------------------------------
- void __fastcall sub_180008FA0(__int64 a1, int a2)
- {
- int v2; // edi
- __int64 v4; // rcx
- int v5; // er8
- unsigned __int16 *v6; // rax
- int v7; // er8
- unsigned __int16 *v8; // rcx
- _WORD *v9; // rdx
- int v10; // er8
- *(_DWORD *)(a1 + 116) = 0;
- v2 = a2;
- if ( a2 )
- {
- while ( 1 )
- {
- v4 = *(unsigned __int16 *)(a1 + 120);
- if ( (unsigned __int16)(v4 - 48) > 9u )
- {
- if ( (unsigned __int16)(v4 - 97) > 5u )
- {
- if ( (unsigned __int16)(v4 - 65) > 5u )
- break;
- v4 = (unsigned int)(v4 - 55);
- }
- else
- {
- v4 = (unsigned int)(v4 - 87);
- }
- }
- else
- {
- v4 = (unsigned int)(v4 - 48);
- }
- if ( (_DWORD)v4 == -1 )
- break;
- v5 = *(_DWORD *)(a1 + 116);
- if ( v5 > (0x7FFFFFFF - (int)v4) / 16 )
- sub_1800040C0(v4, 2u);
- v6 = *(unsigned __int16 **)(a1 + 16);
- --v2;
- v7 = v4 + 16 * v5;
- v8 = *(unsigned __int16 **)a1;
- *(_DWORD *)(a1 + 116) = v7;
- if ( v8 != v6 )
- {
- if ( *v8 == 92 )
- {
- v9 = v8 + 1;
- if ( v8 + 1 != v6 )
- {
- if ( (v10 = *(_DWORD *)(a1 + 128), (v10 & 8) == 0) && (unsigned __int16)(*v9 - 40) <= 1u
- || (v10 & 0x10) == 0 && ((*v9 - 123) & 0xFFFD) == 0 )
- {
- ++v8;
- }
- }
- }
- *(_QWORD *)a1 = v8 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( !v2 )
- return;
- }
- if ( v2 )
- sub_1800040C0(v4, 2u);
- }
- }
- //----- (00000001800090C0) ----------------------------------------------------
- __int64 __fastcall sub_1800090C0(__int64 a1)
- {
- int v1; // eax
- unsigned __int16 *v3; // rcx
- unsigned __int16 *v4; // rax
- _WORD *v5; // rdx
- int v6; // er8
- int v7; // edx
- unsigned __int16 *v8; // rcx
- unsigned __int16 *v9; // rax
- _WORD *v10; // r8
- __int64 v12; // rcx
- __int16 v13; // ax
- int v14; // eax
- __int16 v15; // ax
- unsigned __int16 *v16; // rcx
- unsigned __int16 *v17; // rax
- _WORD *v18; // r8
- unsigned __int16 *v19; // rax
- unsigned __int16 *v20; // rcx
- unsigned __int16 *v21; // rax
- _WORD *v22; // rdx
- int v23; // er8
- unsigned __int64 v24; // rdi
- __int64 v25; // rcx
- unsigned __int16 *v26; // rax
- unsigned __int16 *v27; // rdx
- unsigned __int16 *v28; // rcx
- int v29; // edx
- unsigned __int16 *v30; // rdx
- unsigned __int16 *v31; // rax
- unsigned __int16 *v32; // rcx
- int v33; // edx
- v1 = *(_DWORD *)(a1 + 124);
- if ( v1 != 92 )
- {
- if ( v1 == 91 )
- {
- v20 = *(unsigned __int16 **)a1;
- v21 = *(unsigned __int16 **)(a1 + 16);
- if ( v20 != v21 )
- {
- if ( *v20 == 92 )
- {
- v22 = v20 + 1;
- if ( v20 + 1 != v21 )
- {
- if ( (v23 = *(_DWORD *)(a1 + 128), (v23 & 8) == 0) && (unsigned __int16)(*v22 - 40) <= 1u
- || (v23 & 0x10) == 0 && ((*v22 - 123) & 0xFFFD) == 0 )
- {
- ++v20;
- }
- }
- }
- *(_QWORD *)a1 = v20 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- v24 = *(int *)(a1 + 124);
- if ( (unsigned int)v24 > 0x3D || (v25 = 0x2400400000000000i64, !_bittest64(&v25, v24)) )
- {
- *(_DWORD *)(a1 + 116) = 91;
- return 1i64;
- }
- v26 = *(unsigned __int16 **)a1;
- v27 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 == v27 )
- {
- LABEL_81:
- sub_1800040D0((unsigned __int16 **)a1);
- sub_180009910(a1, v24);
- return 2i64;
- }
- if ( *v26 != 92 || (v28 = v26 + 1, v26 + 1 == v27) )
- {
- LABEL_80:
- *(_QWORD *)a1 = v26 + 1;
- goto LABEL_81;
- }
- v29 = *(_DWORD *)(a1 + 128);
- if ( (v29 & 8) == 0 )
- {
- if ( (unsigned __int16)(*v28 - 40) <= 1u )
- {
- LABEL_79:
- v26 = v28;
- goto LABEL_80;
- }
- v26 = *(unsigned __int16 **)a1;
- }
- if ( (v29 & 0x10) != 0 || *v28 != 123 && *v28 != 125 )
- goto LABEL_80;
- goto LABEL_79;
- }
- if ( v1 == 93 || v1 == -1 )
- return 0i64;
- v30 = *(unsigned __int16 **)(a1 + 16);
- *(_DWORD *)(a1 + 116) = *(unsigned __int16 *)(a1 + 120);
- v31 = *(unsigned __int16 **)a1;
- if ( *(unsigned __int16 **)a1 == v30 )
- goto LABEL_97;
- if ( *v31 != 92 || (v32 = v31 + 1, v31 + 1 == v30) )
- {
- LABEL_95:
- v19 = v31 + 1;
- LABEL_96:
- *(_QWORD *)a1 = v19;
- goto LABEL_97;
- }
- v33 = *(_DWORD *)(a1 + 128);
- if ( (v33 & 8) == 0 )
- {
- if ( (unsigned __int16)(*v32 - 40) <= 1u )
- {
- LABEL_94:
- v31 = v32;
- goto LABEL_95;
- }
- v31 = *(unsigned __int16 **)a1;
- }
- if ( (v33 & 0x10) != 0 || *v32 != 123 && *v32 != 125 )
- goto LABEL_95;
- goto LABEL_94;
- }
- v3 = *(unsigned __int16 **)a1;
- v4 = *(unsigned __int16 **)(a1 + 16);
- if ( v3 != v4 )
- {
- if ( *v3 == 92 )
- {
- v5 = v3 + 1;
- if ( v3 + 1 != v4 )
- {
- if ( (v6 = *(_DWORD *)(a1 + 128), (v6 & 8) == 0) && (unsigned __int16)(*v5 - 40) <= 1u
- || (v6 & 0x10) == 0 && ((*v5 - 123) & 0xFFFD) == 0 )
- {
- ++v3;
- }
- }
- }
- *(_QWORD *)a1 = v3 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- v7 = *(_DWORD *)(a1 + 128);
- if ( (v7 & 0x200000) == 0 )
- {
- if ( (v7 & 0x10000) != 0 )
- {
- v13 = *(_WORD *)(a1 + 120);
- switch ( v13 )
- {
- case 'f':
- v14 = 12;
- goto LABEL_48;
- case 'n':
- v14 = 10;
- goto LABEL_48;
- case 'r':
- v14 = 13;
- goto LABEL_48;
- case 't':
- v14 = 9;
- goto LABEL_48;
- case 'v':
- v14 = 11;
- goto LABEL_48;
- }
- }
- if ( (v7 & 0x8000) != 0 )
- {
- v15 = *(_WORD *)(a1 + 120);
- if ( v15 == 97 )
- {
- v14 = 7;
- goto LABEL_48;
- }
- if ( v15 == 98 )
- {
- v14 = 8;
- LABEL_48:
- *(_DWORD *)(a1 + 116) = v14;
- v16 = *(unsigned __int16 **)a1;
- v17 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v17 )
- {
- if ( *v16 == 92 )
- {
- v18 = v16 + 1;
- if ( v16 + 1 != v17
- && ((v7 & 8) == 0 && (unsigned __int16)(*v18 - 40) <= 1u
- || (v7 & 0x10) == 0 && ((*v18 - 123) & 0xFFFD) == 0) )
- {
- ++v16;
- }
- }
- v19 = v16 + 1;
- goto LABEL_96;
- }
- LABEL_97:
- sub_1800040D0((unsigned __int16 **)a1);
- return 1i64;
- }
- }
- *(_DWORD *)(a1 + 116) = 92;
- return 1i64;
- }
- if ( (v7 & 0x4000) != 0 && *(_WORD *)(a1 + 120) == 92 )
- {
- v8 = *(unsigned __int16 **)a1;
- v9 = *(unsigned __int16 **)(a1 + 16);
- *(_DWORD *)(a1 + 116) = 92;
- if ( v8 != v9 )
- {
- if ( *v8 == 92 )
- {
- v10 = v8 + 1;
- if ( v8 + 1 != v9
- && ((v7 & 8) == 0 && (unsigned __int16)(*v10 - 40) <= 1u || (v7 & 0x10) == 0 && ((*v10 - 123) & 0xFFFD) == 0) )
- {
- ++v8;
- }
- }
- *(_QWORD *)a1 = v8 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- return 1i64;
- }
- if ( (v7 & 0x20000) != 0 && sub_180007CD0(a1, 0) )
- return 2i64;
- if ( sub_180007BC0(a1, 2u) )
- {
- if ( *(_DWORD *)(a1 + 116) )
- sub_1800040C0(v12, 2u);
- return 1i64;
- }
- return sub_180007F60(a1) != 0;
- }
- // 180009495: variable 'v12' is possibly undefined
- //----- (00000001800094A0) ----------------------------------------------------
- void __fastcall sub_1800094A0(__int64 a1, __int64 a2, unsigned __int16 a3)
- {
- unsigned int v5; // edi
- unsigned int v6; // er14
- __int64 v7; // rsi
- _OWORD *v8; // rax
- _BYTE *v9; // rdx
- char v10; // al
- __int16 v11; // r12
- __int64 v12; // rsi
- void *v13; // rbx
- unsigned int v14; // eax
- unsigned int v15; // er13
- void *v16; // rax
- void *v17; // rbx
- unsigned int v18; // eax
- unsigned int v19; // ebp
- void *v20; // rax
- __int64 v21; // rbx
- unsigned int v22; // edi
- unsigned int v23; // edi
- void *v24; // rax
- if ( (*(_DWORD *)(a1 + 16) & 0x100) != 0 )
- {
- v5 = (unsigned __int16)std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), a2);
- v6 = (unsigned __int16)std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), a3);
- }
- else
- {
- v5 = (unsigned __int16)a2;
- v6 = a3;
- }
- v7 = *(_QWORD *)(a1 + 8);
- if ( v6 >= v5 )
- {
- do
- {
- if ( v6 >= *(_DWORD *)(a1 + 32) )
- break;
- v8 = *(_OWORD **)(v7 + 40);
- if ( !v8 )
- {
- v8 = sub_18000A224(0x20ui64);
- *v8 = 0i64;
- v8[1] = 0i64;
- *(_QWORD *)(v7 + 40) = v8;
- }
- v9 = (char *)v8 + ((unsigned __int64)v5 >> 3);
- v10 = v5++ & 7;
- *v9 |= 1 << v10;
- }
- while ( v5 <= v6 );
- if ( v6 >= v5 )
- {
- if ( v6 - v5 >= *(_DWORD *)(a1 + 36) )
- {
- v17 = *(void **)(v7 + 56);
- if ( !v17 )
- {
- v17 = sub_18000A224(0x10ui64);
- *(_QWORD *)v17 = 0i64;
- *((_QWORD *)v17 + 1) = 0i64;
- *(_QWORD *)(v7 + 56) = v17;
- }
- v18 = *((_DWORD *)v17 + 1);
- if ( *(_DWORD *)v17 <= v18 )
- {
- v19 = v18 + 16;
- v20 = realloc(*((void **)v17 + 1), 2i64 * (v18 + 16));
- if ( !v20 )
- {
- LABEL_24:
- std::_Xbad_alloc();
- __debugbreak();
- }
- *((_QWORD *)v17 + 1) = v20;
- *(_DWORD *)v17 = v19;
- }
- *(_WORD *)(*((_QWORD *)v17 + 1) + 2i64 * (unsigned int)(*((_DWORD *)v17 + 1))++) = v5;
- v21 = *(_QWORD *)(v7 + 56);
- v22 = *(_DWORD *)(v21 + 4);
- if ( *(_DWORD *)v21 <= v22 )
- {
- v23 = v22 + 16;
- v24 = realloc(*(void **)(v21 + 8), 2i64 * v23);
- if ( !v24 )
- {
- std::_Xbad_alloc();
- __debugbreak();
- }
- *(_QWORD *)(v21 + 8) = v24;
- *(_DWORD *)v21 = v23;
- }
- *(_WORD *)(*(_QWORD *)(v21 + 8) + 2i64 * (unsigned int)(*(_DWORD *)(v21 + 4))++) = v6;
- }
- else
- {
- do
- {
- v11 = v5;
- if ( (*(_DWORD *)(a1 + 16) & 0x100) != 0 )
- v11 = std::ctype<wchar_t>::tolower(*(_QWORD *)(*(_QWORD *)(a1 + 24) + 8i64), (unsigned __int16)v5);
- v12 = *(_QWORD *)(a1 + 8);
- v13 = *(void **)(v12 + 48);
- if ( !v13 )
- {
- v13 = sub_18000A224(0x10ui64);
- *(_QWORD *)v13 = 0i64;
- *((_QWORD *)v13 + 1) = 0i64;
- *(_QWORD *)(v12 + 48) = v13;
- }
- v14 = *((_DWORD *)v13 + 1);
- if ( *(_DWORD *)v13 <= v14 )
- {
- v15 = v14 + 16;
- v16 = realloc(*((void **)v13 + 1), 2i64 * (v14 + 16));
- if ( !v16 )
- goto LABEL_24;
- *((_QWORD *)v13 + 1) = v16;
- *(_DWORD *)v13 = v15;
- }
- ++v5;
- *(_WORD *)(*((_QWORD *)v13 + 1) + 2i64 * (unsigned int)(*((_DWORD *)v13 + 1))++) = v11;
- }
- while ( v5 <= v6 );
- }
- }
- }
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- // 18000C100: using guessed type void std::_Xbad_alloc(void);
- //----- (00000001800096C0) ----------------------------------------------------
- char __fastcall sub_1800096C0(__int64 a1, unsigned __int16 a2, char a3)
- {
- __int64 v3; // rsi
- unsigned int v4; // ebx
- unsigned __int64 v5; // rdi
- __int64 v9; // rcx
- char result; // al
- _OWORD *v11; // rax
- _BYTE *v12; // rdx
- v3 = *(_QWORD *)(a1 + 8);
- v4 = 0;
- v5 = 0i64;
- do
- {
- v9 = *(_QWORD *)(a1 + 24);
- if ( a2 == 0xFFFF )
- {
- if ( (_WORD)v4 == 95 || (result = std::ctype<wchar_t>::is(*(_QWORD *)(v9 + 8), 263i64, (unsigned __int16)v4)) != 0 )
- result = 1;
- }
- else
- {
- result = std::ctype<wchar_t>::is(*(_QWORD *)(v9 + 8), a2, (unsigned __int16)v4);
- }
- if ( result != a3 )
- {
- v11 = *(_OWORD **)(v3 + 40);
- if ( !v11 )
- {
- v11 = sub_18000A224(0x20ui64);
- *v11 = 0i64;
- v11[1] = 0i64;
- *(_QWORD *)(v3 + 40) = v11;
- }
- v12 = (char *)v11 + (v5 >> 3);
- result = v4 & 7;
- *v12 |= 1 << (v4 & 7);
- }
- ++v4;
- ++v5;
- }
- while ( v4 < 0x100 );
- *(_WORD *)(v3 + 64) |= a2;
- return result;
- }
- // 18000C0D0: using guessed type __int64 __fastcall std::ctype<wchar_t>::is(_QWORD, _QWORD, _QWORD);
- //----- (00000001800097A0) ----------------------------------------------------
- __int64 __fastcall sub_1800097A0(__int64 a1, unsigned __int16 *a2, unsigned __int16 *a3, char a4)
- {
- unsigned __int16 v4; // r15
- __int64 v5; // r12
- __int64 v8; // rcx
- __int64 v9; // r8
- char *v10; // r14
- unsigned __int16 *v11; // rbx
- unsigned __int16 v12; // si
- __int16 v13; // di
- char v15; // [rsp+20h] [rbp-48h]
- unsigned __int16 *v16; // [rsp+28h] [rbp-40h]
- __int64 v17; // [rsp+30h] [rbp-38h]
- v4 = 0;
- LODWORD(v5) = 0;
- v15 = a4;
- v16 = a2;
- if ( L"alnum" )
- {
- v8 = 0i64;
- v9 = a3 - a2;
- v17 = v9;
- do
- {
- if ( v9 == LODWORD((&off_18000C650)[v8 + 2]) )
- {
- v10 = (&off_18000C650)[v8 + 1];
- v11 = a2;
- if ( a2 == a3 )
- break;
- while ( 1 )
- {
- v12 = *(_WORD *)v10;
- v13 = std::ctype<wchar_t>::tolower(*(_QWORD *)(a1 + 8), *v11);
- if ( v13 != (unsigned __int16)std::ctype<wchar_t>::tolower(*(_QWORD *)(a1 + 8), v12) )
- break;
- ++v11;
- v10 += 2;
- if ( v11 == a3 )
- goto LABEL_7;
- }
- a2 = v16;
- v9 = v17;
- }
- v5 = (unsigned int)(v5 + 1);
- v8 = 3 * v5;
- }
- while ( (&off_18000C650)[3 * v5 + 1] );
- LABEL_7:
- a4 = v15;
- }
- if ( (&off_18000C650)[3 * (unsigned int)v5 + 1] )
- v4 = *((_WORD *)&off_18000C650 + 12 * (unsigned int)v5 + 10);
- if ( a4 && (v4 & 3) != 0 )
- v4 |= 3u;
- return v4;
- }
- // 18000C0C8: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD);
- // 18000C520: using guessed type wchar_t aAlnum[6];
- // 18000C650: using guessed type char *off_18000C650;
- //----- (0000000180009910) ----------------------------------------------------
- __int16 __fastcall sub_180009910(__int64 a1, int a2)
- {
- unsigned int v2; // edi
- unsigned int v5; // ebp
- unsigned __int16 *v6; // r14
- __int64 v7; // rcx
- unsigned int v8; // eax
- unsigned __int16 *v9; // rcx
- unsigned __int16 *v10; // rax
- _WORD *v11; // rdx
- int v12; // er8
- unsigned __int16 v13; // ax
- __int64 v14; // rcx
- unsigned __int16 *v15; // rcx
- unsigned __int16 *v16; // rax
- _WORD *v17; // rdx
- int v18; // er8
- __int64 v19; // rcx
- unsigned __int16 *v20; // rcx
- unsigned __int16 *v21; // rax
- _WORD *v22; // rdx
- int v23; // er8
- v2 = 0;
- if ( a2 == 58 )
- {
- v5 = 1;
- }
- else if ( a2 == 61 )
- {
- v5 = 0;
- }
- else
- {
- v5 = 14;
- if ( a2 == 46 )
- v5 = 0;
- }
- v6 = *(unsigned __int16 **)a1;
- v7 = *(unsigned int *)(a1 + 124);
- if ( (_DWORD)v7 != 58 )
- {
- v8 = v7;
- do
- {
- v7 = v8;
- if ( v8 == 61 || v8 == 46 || v8 == -1 )
- break;
- v9 = *(unsigned __int16 **)a1;
- v10 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v10 )
- {
- if ( *v9 == 92 )
- {
- v11 = v9 + 1;
- if ( v9 + 1 != v10 )
- {
- if ( (v12 = *(_DWORD *)(a1 + 128), (v12 & 8) == 0) && (unsigned __int16)(*v11 - 40) <= 1u
- || (v12 & 0x10) == 0 && ((*v11 - 123) & 0xFFFD) == 0 )
- {
- ++v9;
- }
- }
- }
- *(_QWORD *)a1 = v9 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- v7 = *(unsigned int *)(a1 + 124);
- ++v2;
- v8 = v7;
- }
- while ( (_DWORD)v7 != 58 );
- }
- if ( (_DWORD)v7 != a2 )
- sub_1800040C0(v7, v5);
- switch ( a2 )
- {
- case ':':
- v13 = sub_1800097A0(*(_QWORD *)(a1 + 104), v6, *(unsigned __int16 **)a1, BYTE1(*(_DWORD *)(a1 + 112)) & 1);
- if ( !v13 )
- sub_1800040C0(v14, 1u);
- sub_1800096C0(a1 + 64, v13, 0);
- break;
- case '=':
- if ( v6 == *(unsigned __int16 **)a1 )
- sub_1800040C0(v7, 0);
- sub_180009B70(a1 + 64, (__int16 *)v6, *(__int16 **)a1, v2);
- break;
- case '.':
- if ( v6 == *(unsigned __int16 **)a1 )
- sub_1800040C0(v7, 0);
- sub_180009D50(v7, (__int16 *)v6, *(__int16 **)a1, v2, (__int64 *)(*(_QWORD *)(a1 + 72) + 32i64));
- break;
- }
- v15 = *(unsigned __int16 **)a1;
- v16 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v16 )
- {
- if ( *v15 == 92 )
- {
- v17 = v15 + 1;
- if ( v15 + 1 != v16 )
- {
- if ( (v18 = *(_DWORD *)(a1 + 128), (v18 & 8) == 0) && (unsigned __int16)(*v17 - 40) <= 1u
- || (v18 & 0x10) == 0 && ((*v17 - 123) & 0xFFFD) == 0 )
- {
- ++v15;
- }
- }
- }
- *(_QWORD *)a1 = v15 + 1;
- }
- sub_1800040D0((unsigned __int16 **)a1);
- if ( *(_DWORD *)(a1 + 124) != 93 )
- sub_1800040C0(v19, v5);
- v20 = *(unsigned __int16 **)a1;
- v21 = *(unsigned __int16 **)(a1 + 16);
- if ( *(unsigned __int16 **)a1 != v21 )
- {
- if ( *v20 == 92 )
- {
- v22 = v20 + 1;
- if ( v20 + 1 != v21 )
- {
- if ( (v23 = *(_DWORD *)(a1 + 128), (v23 & 8) == 0) && (unsigned __int16)(*v22 - 40) <= 1u
- || (v23 & 0x10) == 0 && ((*v22 - 123) & 0xFFFD) == 0 )
- {
- ++v20;
- }
- }
- }
- *(_QWORD *)a1 = v20 + 1;
- }
- return sub_1800040D0((unsigned __int16 **)a1);
- }
- // 180009B39: variable 'v19' is possibly undefined
- // 180009B4C: variable 'v14' is possibly undefined
- //----- (0000000180009B70) ----------------------------------------------------
- void __fastcall sub_180009B70(__int64 a1, __int16 *a2, __int16 *a3, unsigned int a4)
- {
- __int64 v8; // rsi
- unsigned int i; // ebx
- __int64 *v10; // rax
- void **v11; // rdx
- __int64 v12; // rcx
- char *v13; // r8
- char v14; // di
- _BYTE *v15; // rcx
- _OWORD *v16; // rax
- _BYTE *v17; // rdx
- void *v18; // rcx
- _BYTE *v19; // [rsp+38h] [rbp-90h] BYREF
- unsigned __int64 v20; // [rsp+50h] [rbp-78h]
- __int16 v21; // [rsp+58h] [rbp-70h] BYREF
- char v22[6]; // [rsp+5Ah] [rbp-6Eh] BYREF
- void *Block[3]; // [rsp+60h] [rbp-68h] BYREF
- unsigned __int64 v24; // [rsp+78h] [rbp-50h]
- v8 = *(_QWORD *)(a1 + 8);
- sub_180009E30(*(_QWORD **)(a1 + 24), (__int64)Block, a2, a3);
- for ( i = 0; i < 0x100; ++i )
- {
- v21 = i;
- v10 = (__int64 *)sub_180009E30(*(_QWORD **)(a1 + 24), (__int64)&v19, &v21, v22);
- v11 = Block;
- if ( v24 >= 8 )
- v11 = (void **)Block[0];
- v12 = (__int64)v10;
- if ( (unsigned __int64)v10[3] >= 8 )
- v12 = *v10;
- v13 = (char *)v10[2];
- if ( v13 == Block[2] )
- {
- if ( !v13 )
- {
- LABEL_10:
- v14 = 1;
- goto LABEL_12;
- }
- while ( *(_WORD *)v12 == *(_WORD *)v11 )
- {
- v12 += 2i64;
- v11 = (void **)((char *)v11 + 2);
- if ( !--v13 )
- goto LABEL_10;
- }
- }
- v14 = 0;
- LABEL_12:
- if ( v20 >= 8 )
- {
- v15 = v19;
- if ( 2 * v20 + 2 >= 0x1000 )
- {
- v15 = (_BYTE *)*((_QWORD *)v19 - 1);
- if ( (unsigned __int64)(v19 - v15 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v15);
- }
- if ( v14 )
- {
- v16 = *(_OWORD **)(v8 + 40);
- if ( !v16 )
- {
- v16 = sub_18000A224(0x20ui64);
- *v16 = 0i64;
- v16[1] = 0i64;
- *(_QWORD *)(v8 + 40) = v16;
- }
- v17 = (char *)v16 + ((unsigned __int64)i >> 3);
- v12 = (unsigned __int8)*v17;
- LODWORD(v12) = v12 | (1 << (i & 7));
- *v17 = v12;
- }
- }
- sub_180009D50(v12, a2, a3, a4, (__int64 *)(v8 + 72));
- if ( v24 >= 8 )
- {
- v18 = Block[0];
- if ( 2 * v24 + 2 >= 0x1000 )
- {
- v18 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v18 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v18);
- }
- }
- // 180009CCF: variable 'v12' is possibly undefined
- // 180009B70: using guessed type char var_6E[6];
- //----- (0000000180009D50) ----------------------------------------------------
- void __fastcall sub_180009D50(__int64 a1, __int16 *a2, __int16 *a3, unsigned int a4, __int64 *a5)
- {
- __int64 *v6; // r14
- __int64 v9; // rdi
- __int64 v10; // rbx
- unsigned int v11; // eax
- __int16 v12; // bp
- unsigned int v13; // edi
- void *v14; // rax
- _QWORD *v15; // [rsp+40h] [rbp+8h]
- v6 = a5;
- v9 = *a5;
- if ( !*a5 )
- goto LABEL_6;
- do
- {
- v10 = v9;
- if ( a4 >= *(_DWORD *)v9 )
- break;
- v6 = (__int64 *)(v9 + 24);
- v9 = *(_QWORD *)(v9 + 24);
- v10 = v9;
- }
- while ( v9 );
- v9 = v10;
- if ( !v10 || a4 != *(_DWORD *)v10 )
- {
- LABEL_6:
- v15 = sub_18000A224(0x20ui64);
- *(_DWORD *)v15 = a4;
- v15[1] = 0i64;
- v15[2] = 0i64;
- *v6 = (__int64)v15;
- v15[3] = v9;
- v10 = *v6;
- }
- for ( ; a2 != a3; ++*(_DWORD *)(v10 + 12) )
- {
- v11 = *(_DWORD *)(v10 + 12);
- v12 = *a2;
- if ( *(_DWORD *)(v10 + 8) <= v11 )
- {
- v13 = v11 + 16;
- v14 = realloc(*(void **)(v10 + 16), 2i64 * (v11 + 16));
- if ( !v14 )
- {
- std::_Xbad_alloc();
- JUMPOUT(0x180009E2Bi64);
- }
- *(_QWORD *)(v10 + 16) = v14;
- *(_DWORD *)(v10 + 8) = v13;
- }
- ++a2;
- *(_WORD *)(*(_QWORD *)(v10 + 16) + 2i64 * *(unsigned int *)(v10 + 12)) = v12;
- }
- }
- // 180009E25: control flows out of bounds to 180009E2B
- // 18000C100: using guessed type void std::_Xbad_alloc(void);
- //----- (0000000180009E30) ----------------------------------------------------
- __int64 __fastcall sub_180009E30(_QWORD *a1, __int64 a2, _BYTE *a3, _BYTE *a4)
- {
- __int64 v7; // rbx
- size_t v8; // rbp
- unsigned __int64 v9; // rax
- __int64 v10; // r15
- char *v11; // r14
- unsigned __int64 v12; // rbx
- void *v13; // rax
- char *v14; // rsi
- __int64 v15; // r15
- unsigned __int64 v16; // rdx
- _QWORD *v17; // rcx
- void *v18; // rcx
- char *v19; // rax
- void *Block[2]; // [rsp+28h] [rbp-90h] BYREF
- __m128i si128; // [rsp+38h] [rbp-80h]
- __int64 v23; // [rsp+48h] [rbp-70h]
- __int128 v24; // [rsp+50h] [rbp-68h]
- __int64 v25; // [rsp+60h] [rbp-58h]
- v23 = a2;
- *(_OWORD *)a2 = 0i64;
- *(_QWORD *)(a2 + 16) = 0i64;
- *(_QWORD *)(a2 + 24) = 7i64;
- *(_WORD *)a2 = 0;
- if ( a3 != a4 )
- {
- v24 = 0i64;
- v7 = 0i64;
- v25 = 0i64;
- v8 = a4 - a3;
- v9 = (a4 - a3) >> 1;
- v10 = 0i64;
- v11 = 0i64;
- if ( (unsigned __int64)(a4 - a3) < 2 )
- {
- v14 = (char *)v24;
- }
- else
- {
- if ( v9 > 0x7FFFFFFFFFFFFFFFi64 )
- sub_1800033B0();
- v12 = 2 * v9;
- if ( 2 * v9 < 0x1000 )
- {
- if ( v12 )
- v11 = (char *)sub_18000A224(2 * v9);
- else
- v11 = 0i64;
- }
- else
- {
- if ( v12 + 39 <= v12 )
- Concurrency::cancel_current_task();
- v13 = sub_18000A224(v12 + 39);
- if ( !v13 )
- LABEL_28:
- invalid_parameter_noinfo_noreturn();
- v11 = (char *)(((unsigned __int64)v13 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
- *((_QWORD *)v11 - 1) = v13;
- }
- v14 = v11;
- *(_QWORD *)&v24 = v11;
- v7 = (__int64)&v11[v12];
- v10 = v7;
- v25 = v7;
- memmove(v11, a3, v8);
- *((_QWORD *)&v24 + 1) = v7;
- }
- v15 = (v10 - (__int64)v11) >> 1;
- std::ctype<wchar_t>::tolower(a1[1], v14, &v11[2 * v15]);
- (*(void (__fastcall **)(_QWORD, void **, char *, char *, int))(*(_QWORD *)*a1 + 32i64))(
- *a1,
- Block,
- v14,
- &v14[2 * v15],
- 1);
- if ( (void **)a2 != Block )
- {
- v16 = *(_QWORD *)(a2 + 24);
- if ( v16 >= 8 )
- {
- v17 = *(_QWORD **)a2;
- if ( 2 * v16 + 2 >= 0x1000 )
- {
- if ( (unsigned __int64)v17 - *(v17 - 1) - 8 > 0x1F )
- goto LABEL_23;
- v17 = (_QWORD *)*(v17 - 1);
- }
- j_j_free(v17);
- }
- *(_QWORD *)(a2 + 24) = 7i64;
- *(_OWORD *)a2 = *(_OWORD *)Block;
- *(__m128i *)(a2 + 16) = si128;
- si128 = _mm_load_si128((const __m128i *)&xmmword_18000CA00);
- LOWORD(Block[0]) = 0;
- }
- if ( si128.m128i_i64[1] >= 8ui64 )
- {
- v18 = Block[0];
- if ( (unsigned __int64)(2 * si128.m128i_i64[1] + 2) >= 0x1000 )
- {
- v18 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v18 - 8) > 0x1F )
- LABEL_23:
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v18);
- }
- if ( v14 )
- {
- v19 = v14;
- if ( (unsigned __int64)(2 * ((v7 - (__int64)v14) >> 1)) >= 0x1000 )
- {
- v14 = (char *)*((_QWORD *)v14 - 1);
- if ( (unsigned __int64)(v19 - v14 - 8) > 0x1F )
- goto LABEL_28;
- }
- j_j_free(v14);
- }
- }
- return a2;
- }
- // 18000C0C0: using guessed type __int64 __fastcall std::ctype<wchar_t>::tolower(_QWORD, _QWORD, _QWORD);
- // 18000CA00: using guessed type __int128 xmmword_18000CA00;
- //----- (000000018000A09C) ----------------------------------------------------
- _QWORD *__fastcall sub_18000A09C(__int64 a1)
- {
- _QWORD *result; // rax
- result = sub_18000A224(0x10ui64);
- if ( result )
- {
- *result = Block;
- result[1] = a1;
- }
- Block = result;
- return result;
- }
- //----- (000000018000A0E0) ----------------------------------------------------
- const __m128i *__fastcall sub_18000A0E0(const __m128i *a1, const __m128i *a2, __int16 a3)
- {
- signed __int64 v4; // r9
- const __m128i *v6; // r10
- unsigned __int64 v13; // r9
- const __m128i *v14; // r10
- __m128i v15; // xmm1
- __m128i v16; // xmm1
- __int64 v17; // rax
- const __m128i *result; // rax
- v4 = (char *)a2 - (char *)a1;
- if ( (((char *)a2 - (char *)a1) & 0xFFFFFFFFFFFFFFE0ui64) != 0 && (dword_18001000C & 0x20) != 0 )
- {
- _EAX = a3;
- v6 = (const __m128i *)((char *)a1 + (((char *)a2 - (char *)a1) & 0xFFFFFFFFFFFFFFE0ui64));
- __asm
- {
- vmovd xmm2, eax
- vpunpcklwd xmm2, xmm2, xmm2
- vpshufd xmm2, xmm2, 0
- vinsertf128 ymm2, ymm2, xmm2, 1
- }
- while ( 1 )
- {
- __asm
- {
- vpcmpeqw ymm1, ymm2, ymmword ptr [rcx]
- vpmovmskb eax, ymm1
- }
- if ( _EAX )
- break;
- a1 += 2;
- if ( a1 == v6 )
- {
- v4 &= 0x1Fu;
- __asm { vzeroupper }
- goto LABEL_7;
- }
- }
- __asm { tzcnt eax, eax }
- result = (const __m128i *)((char *)a1 + _EAX);
- __asm { vzeroupper }
- }
- else
- {
- LABEL_7:
- v13 = v4 & 0xFFFFFFFFFFFFFFF0ui64;
- if ( v13 )
- {
- v14 = (const __m128i *)((char *)a1 + v13);
- v15 = _mm_cvtsi32_si128(a3);
- v16 = _mm_shuffle_epi32(_mm_unpacklo_epi16(v15, v15), 0);
- while ( 1 )
- {
- LODWORD(v17) = _mm_movemask_epi8(_mm_cmpeq_epi16(_mm_loadu_si128(a1), v16));
- if ( (_DWORD)v17 )
- break;
- if ( ++a1 == v14 )
- goto LABEL_11;
- }
- _BitScanForward((unsigned int *)&v17, v17);
- return (const __m128i *)((char *)a1 + v17);
- }
- else
- {
- LABEL_11:
- while ( a1 != a2 )
- {
- if ( a1->m128i_i16[0] == a3 )
- break;
- a1 = (const __m128i *)((char *)a1 + 2);
- }
- return a1;
- }
- }
- return result;
- }
- // 18000A1A3: variable 'v17' is possibly undefined
- // 18001000C: using guessed type int dword_18001000C;
- //----- (000000018000A1F8) ----------------------------------------------------
- _QWORD *__fastcall sub_18000A1F8(_QWORD *a1, char a2)
- {
- *a1 = &type_info::`vftable';
- if ( (a2 & 1) != 0 )
- j_j_free(a1);
- return a1;
- }
- // 18000C338: using guessed type void *type_info::`vftable';
- //----- (000000018000A224) ----------------------------------------------------
- void *__fastcall sub_18000A224(size_t Size)
- {
- size_t i; // rbx
- void *result; // rax
- for ( i = Size; ; Size = i )
- {
- result = malloc(Size);
- if ( result )
- break;
- if ( !callnewh(i) )
- {
- if ( i != -1i64 )
- Concurrency::cancel_current_task();
- Concurrency::cancel_current_task();
- }
- }
- return result;
- }
- //----- (000000018000A260) ----------------------------------------------------
- __int64 __fastcall sub_18000A260(__int64 a1, int a2, __int64 a3)
- {
- int v3; // edx
- int v4; // edx
- __int64 result; // rax
- if ( !a2 )
- return sub_18000A3C8(a3 != 0);
- v3 = a2 - 1;
- if ( !v3 )
- return sub_18000A2B0(a1, a3);
- v4 = v3 - 1;
- if ( v4 )
- {
- if ( v4 != 1 )
- return 1i64;
- LOBYTE(result) = sub_18000A670();
- }
- else
- {
- LOBYTE(result) = sub_18000A648();
- }
- return (unsigned __int8)result;
- }
- //----- (000000018000A2B0) ----------------------------------------------------
- __int64 __fastcall sub_18000A2B0(__int64 a1, __int64 a2)
- {
- char v4; // bl
- char v5; // di
- _QWORD *v6; // rax
- if ( !sub_18000A72C(0) )
- return 0i64;
- v4 = sub_18000A5C0();
- v5 = 1;
- if ( dword_1800103D0 )
- {
- sub_18000AE58(7u);
- __debugbreak();
- JUMPOUT(0x18000A3C6i64);
- }
- dword_1800103D0 = 1;
- if ( sub_18000A630() )
- {
- sub_18000AFA4();
- sub_18000AE00();
- sub_18000AE2C();
- if ( !initterm_e((_PIFV *)&First, (_PIFV *)&Last) )
- {
- if ( sub_18000A5FC() )
- {
- initterm((_PVFV *)&qword_18000C2D0, (_PVFV *)&qword_18000C2E0);
- dword_1800103D0 = 2;
- v5 = 0;
- }
- }
- }
- sub_18000A89C(v4);
- if ( v5 )
- return 0i64;
- v6 = sub_18000AE48();
- if ( *v6 )
- {
- if ( sub_18000A804((__int64)v6) )
- _guard_dispatch_icall_fptr(a1, 2i64, a2);
- }
- ++dword_1800103CC;
- return 1i64;
- }
- // 18000A3C5: control flows out of bounds to 18000A3C6
- // 18000B150: using guessed type __int64 __fastcall guard_dispatch_icall_nop();
- // 18000C2A8: using guessed type __int64 (__fastcall *_guard_dispatch_icall_fptr)(_QWORD, _QWORD, _QWORD);
- // 1800103CC: using guessed type int dword_1800103CC;
- // 1800103D0: using guessed type int dword_1800103D0;
- //----- (000000018000A3C8) ----------------------------------------------------
- __int64 __fastcall sub_18000A3C8(char a1)
- {
- char v3; // bl
- __int64 v4; // rcx
- BOOL v5; // ebx
- DWORD v6; // edx
- HINSTANCE v7; // rcx
- LPVOID v8; // r8
- if ( dword_1800103CC <= 0 )
- return 0i64;
- --dword_1800103CC;
- v3 = sub_18000A5C0();
- if ( dword_1800103D0 == 2 )
- {
- sub_18000A6E8();
- sub_18000AE10();
- sub_18000AFE0();
- dword_1800103D0 = 0;
- sub_18000A89C(v3);
- LOBYTE(v4) = a1;
- v5 = sub_18000A8C0(v4, 0) != 0;
- sub_18000A718();
- return v5;
- }
- else
- {
- sub_18000AE58(7u);
- __debugbreak();
- return sub_18000A44C(v7, v6, v8);
- }
- }
- // 18000A42A: variable 'v4' is possibly undefined
- // 18000A44B: variable 'v7' is possibly undefined
- // 18000A44B: variable 'v6' is possibly undefined
- // 18000A44B: variable 'v8' is possibly undefined
- // 1800103CC: using guessed type int dword_1800103CC;
- // 1800103D0: using guessed type int dword_1800103D0;
- //----- (000000018000A44C) ----------------------------------------------------
- __int64 __fastcall sub_18000A44C(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
- {
- unsigned int v7; // ebx
- BOOL v8; // eax
- if ( !fdwReason && dword_1800103CC <= 0 )
- return 0i64;
- if ( fdwReason - 1 > 1 || (v7 = sub_18000A260((__int64)hinstDLL, fdwReason, (__int64)lpvReserved)) != 0 )
- {
- v8 = DllMain(hinstDLL, fdwReason, lpvReserved);
- v7 = v8;
- if ( fdwReason == 1 && !v8 )
- {
- DllMain(hinstDLL, 0, lpvReserved);
- sub_18000A3C8(lpvReserved != 0i64);
- }
- if ( !fdwReason || fdwReason == 3 )
- return (unsigned int)sub_18000A260((__int64)hinstDLL, fdwReason, (__int64)lpvReserved) != 0;
- }
- return v7;
- }
- // 18000C2A8: using guessed type __int64 (__fastcall *_guard_dispatch_icall_fptr)(_QWORD, _QWORD, _QWORD);
- // 1800103CC: using guessed type int dword_1800103CC;
- //----- (000000018000A5C0) ----------------------------------------------------
- char sub_18000A5C0()
- {
- int v0; // eax
- PVOID StackBase; // rcx
- signed __int64 v2; // rax
- LOBYTE(v0) = __uncaught_exception();
- if ( v0 )
- {
- StackBase = NtCurrentTeb()->NtTib.StackBase;
- while ( 1 )
- {
- v2 = _InterlockedCompareExchange64(&qword_1800103D8, (signed __int64)StackBase, 0i64);
- if ( !v2 )
- break;
- if ( StackBase == (PVOID)v2 )
- return 1;
- }
- }
- return 0;
- }
- // 18000A5CB: variable 'v0' is possibly undefined
- // 1800103D8: using guessed type __int64 qword_1800103D8;
- //----- (000000018000A5FC) ----------------------------------------------------
- char sub_18000A5FC()
- {
- int v0; // eax
- _crt_argv_mode v1; // eax
- LOBYTE(v0) = __uncaught_exception();
- if ( v0 )
- {
- sub_18000A9C0();
- }
- else
- {
- v1 = (unsigned int)sub_18000B01C();
- if ( configure_narrow_argv(v1) )
- return 0;
- initialize_narrow_environment();
- }
- return 1;
- }
- // 18000A607: variable 'v0' is possibly undefined
- //----- (000000018000A630) ----------------------------------------------------
- bool sub_18000A630()
- {
- return sub_18000A778(0) != 0;
- }
- //----- (000000018000A648) ----------------------------------------------------
- char sub_18000A648()
- {
- if ( !sub_18000B0A4() )
- return 0;
- if ( !sub_18000B0A4() )
- {
- sub_18000B0A4();
- return 0;
- }
- return 1;
- }
- //----- (000000018000A670) ----------------------------------------------------
- char sub_18000A670()
- {
- sub_18000B0A4();
- sub_18000B0A4();
- return 1;
- }
- //----- (000000018000A688) ----------------------------------------------------
- int __fastcall sub_18000A688(
- __int64 a1,
- int a2,
- __int64 a3,
- void (__fastcall *a4)(__int64, _QWORD, __int64),
- unsigned int ExceptionNum,
- struct _EXCEPTION_POINTERS *ExceptionPtr)
- {
- int v10; // eax
- LOBYTE(v10) = __uncaught_exception();
- if ( !v10 && a2 == 1 )
- a4(a1, 0i64, a3);
- return seh_filter_dll(ExceptionNum, ExceptionPtr);
- }
- // 18000A6AE: variable 'v10' is possibly undefined
- //----- (000000018000A6E8) ----------------------------------------------------
- void sub_18000A6E8()
- {
- int v0; // eax
- LOBYTE(v0) = __uncaught_exception();
- if ( v0 )
- {
- execute_onexit_table(&Table);
- }
- else if ( !(unsigned int)sub_18000B0A8() )
- {
- cexit();
- }
- }
- // 18000A6F3: variable 'v0' is possibly undefined
- //----- (000000018000A718) ----------------------------------------------------
- char sub_18000A718()
- {
- sub_18000B0A4();
- return sub_18000B0A4();
- }
- //----- (000000018000A72C) ----------------------------------------------------
- char __fastcall sub_18000A72C(int a1)
- {
- char v1; // al
- v1 = byte_1800103E0;
- if ( !a1 )
- v1 = 1;
- byte_1800103E0 = v1;
- sub_18000A9C0();
- if ( !sub_18000B0A4() )
- return 0;
- if ( !sub_18000B0A4() )
- {
- sub_18000B0A4();
- return 0;
- }
- return 1;
- }
- // 1800103E0: using guessed type char byte_1800103E0;
- //----- (000000018000A778) ----------------------------------------------------
- char __fastcall sub_18000A778(unsigned int a1)
- {
- int v2; // eax
- if ( !byte_1800103E1 )
- {
- if ( a1 > 1 )
- {
- sub_18000AE58(5u);
- JUMPOUT(0x18000A802i64);
- }
- LOBYTE(v2) = __uncaught_exception();
- if ( !v2 || a1 )
- {
- *(__m128i *)&Table._first = _mm_load_si128((const __m128i *)&xmmword_18000C320);
- Table._end = (_PVFV *)-1i64;
- *(_OWORD *)&stru_180010400._first = *(_OWORD *)&Table._first;
- stru_180010400._end = (_PVFV *)-1i64;
- }
- else if ( initialize_onexit_table(&Table) || initialize_onexit_table(&stru_180010400) )
- {
- return 0;
- }
- byte_1800103E1 = 1;
- }
- return 1;
- }
- // 18000A7FD: control flows out of bounds to 18000A802
- // 18000A795: variable 'v2' is possibly undefined
- // 18000C320: using guessed type __int128 xmmword_18000C320;
- // 1800103E1: using guessed type char byte_1800103E1;
- //----- (000000018000A804) ----------------------------------------------------
- bool __fastcall sub_18000A804(__int64 a1)
- {
- _DWORD *v2; // rcx
- unsigned __int64 v3; // r8
- _DWORD *v4; // rdx
- _DWORD *v5; // r9
- unsigned __int64 v6; // rcx
- if ( MEMORY[0x180000000] != 23117 )
- return 0;
- v2 = (_DWORD *)(0x180000000i64 + MEMORY[0x18000003C]);
- if ( *v2 != 17744 || *(_WORD *)(0x180000018i64 + MEMORY[0x18000003C]) != 523 )
- return 0;
- v3 = a1 - 0x180000000i64;
- v4 = (_DWORD *)((char *)v2 + *(unsigned __int16 *)(0x180000014i64 + MEMORY[0x18000003C]) + 24);
- v5 = &v4[10 * *(unsigned __int16 *)(0x180000006i64 + MEMORY[0x18000003C])];
- while ( v4 != v5 )
- {
- v6 = (unsigned int)v4[3];
- if ( v3 >= v6 && v3 < (unsigned int)(v6 + v4[2]) )
- return v4 && v4[9] >= 0;
- v4 += 10;
- }
- v4 = 0i64;
- return v4 && v4[9] >= 0;
- }
- //----- (000000018000A89C) ----------------------------------------------------
- char __fastcall sub_18000A89C(char a1)
- {
- int v2; // eax
- LOBYTE(v2) = __uncaught_exception();
- if ( v2 && !a1 )
- _InterlockedExchange64(&qword_1800103D8, 0i64);
- return v2;
- }
- // 18000A8AD: variable 'v2' is possibly undefined
- // 1800103D8: using guessed type __int64 qword_1800103D8;
- //----- (000000018000A8C0) ----------------------------------------------------
- char __fastcall sub_18000A8C0(__int64 a1, char a2)
- {
- if ( !byte_1800103E0 || !a2 )
- {
- sub_18000B0A4();
- sub_18000B0A4();
- }
- return 1;
- }
- // 1800103E0: using guessed type char byte_1800103E0;
- //----- (000000018000A8EC) ----------------------------------------------------
- _onexit_t __fastcall sub_18000A8EC(_onexit_t Function)
- {
- int v2; // eax
- __int64 v3; // rdx
- if ( Table._first == (_PVFV *)-1i64 )
- v2 = crt_atexit((_PVFV)Function);
- else
- v2 = register_onexit_function(&Table, Function);
- v3 = 0i64;
- if ( !v2 )
- return Function;
- return (_onexit_t)v3;
- }
- //----- (000000018000A9C0) ----------------------------------------------------
- __int64 sub_18000A9C0()
- {
- int v5; // er11
- int v6; // er9
- int v7; // esi
- int v9; // er10
- int v14; // edi
- int v15; // eax
- unsigned __int64 v16; // rax
- __int64 v17; // rcx
- int v18; // er8
- int v23; // eax
- char v25; // [rsp+20h] [rbp+8h]
- _RAX = 0i64;
- __asm { cpuid }
- v5 = 0;
- v6 = _RBX;
- v7 = _RAX;
- _RAX = 1i64;
- v9 = _RCX ^ 0x6C65746E | _RDX ^ 0x49656E69;
- __asm { cpuid }
- v14 = _RCX;
- if ( !(v6 ^ 0x756E6547 | v9)
- && ((qword_180010018 = -1i64, v15 = _RAX & 0xFFF3FF0, qword_180010010 = 0x8000i64, v15 == 67264)
- || v15 == 132704
- || v15 == 132720
- || (v16 = (unsigned int)(v15 - 198224), (unsigned int)v16 <= 0x20) && (v17 = 0x100010001i64, _bittest64(&v17, v16))) )
- {
- v18 = dword_180010418 | 1;
- dword_180010418 |= 1u;
- }
- else
- {
- v18 = dword_180010418;
- }
- _RAX = 7i64;
- if ( v7 >= 7 )
- {
- __asm { cpuid }
- v5 = _RBX;
- if ( (_RBX & 0x200) != 0 )
- dword_180010418 = v18 | 2;
- }
- dword_180010008 = 1;
- dword_18001000C = 2;
- if ( (v14 & 0x100000) != 0 )
- {
- dword_180010008 = 2;
- dword_18001000C = 6;
- if ( (v14 & 0x8000000) != 0 && (v14 & 0x10000000) != 0 )
- {
- __asm { xgetbv }
- v25 = _RAX;
- if ( (_RAX & 6) == 6 )
- {
- v23 = dword_18001000C | 8;
- dword_180010008 = 3;
- dword_18001000C |= 8u;
- if ( (v5 & 0x20) != 0 )
- {
- dword_180010008 = 5;
- dword_18001000C = v23 | 0x20;
- if ( (v5 & 0xD0030000) == -805109760 && (v25 & 0xE0) == 0xE0 )
- {
- dword_18001000C |= 0x40u;
- dword_180010008 = 6;
- }
- }
- }
- }
- }
- return 0i64;
- }
- // 180010008: using guessed type int dword_180010008;
- // 18001000C: using guessed type int dword_18001000C;
- // 180010010: using guessed type __int64 qword_180010010;
- // 180010018: using guessed type __int64 qword_180010018;
- // 180010418: using guessed type int dword_180010418;
- //----- (000000018000AB6C) ----------------------------------------------------
- BOOL __fastcall sub_18000AB6C(struct _EXCEPTION_POINTERS *ExceptionInfo)
- {
- HANDLE CurrentProcess; // rax
- SetUnhandledExceptionFilter(0i64);
- UnhandledExceptionFilter(ExceptionInfo);
- CurrentProcess = GetCurrentProcess();
- return TerminateProcess(CurrentProcess, 0xC0000409);
- }
- //----- (000000018000ABA0) ----------------------------------------------------
- BOOL __fastcall sub_18000ABA0(DWORD64 a1)
- {
- DWORD64 retaddr; // [rsp+38h] [rbp+0h]
- DWORD64 v3; // [rsp+40h] [rbp+8h] BYREF
- v3 = a1;
- if ( IsProcessorFeaturePresent(0x17u) )
- __fastfail(2u);
- sub_18000AC74(&ContextRecord);
- ContextRecord.Rip = retaddr;
- ContextRecord.Rsp = (DWORD64)&v3;
- qword_180010430 = retaddr;
- ContextRecord.Rcx = v3;
- dword_180010420 = -1073740791;
- dword_180010424 = 1;
- dword_180010438 = 1;
- unk_180010440 = 2i64;
- return sub_18000AB6C((struct _EXCEPTION_POINTERS *)&ExceptionInfo);
- }
- // 180010020: using guessed type __int64 qword_180010020;
- // 180010420: using guessed type int dword_180010420;
- // 180010424: using guessed type int dword_180010424;
- // 180010430: using guessed type __int64 qword_180010430;
- // 180010438: using guessed type int dword_180010438;
- //----- (000000018000AC74) ----------------------------------------------------
- struct _IMAGE_RUNTIME_FUNCTION_ENTRY *__fastcall sub_18000AC74(PCONTEXT ContextRecord)
- {
- DWORD64 Rip; // rsi
- int i; // edi
- struct _IMAGE_RUNTIME_FUNCTION_ENTRY *result; // rax
- unsigned __int64 ImageBase; // [rsp+60h] [rbp+8h] BYREF
- unsigned __int64 EstablisherFrame; // [rsp+68h] [rbp+10h] BYREF
- PVOID HandlerData; // [rsp+70h] [rbp+18h] BYREF
- RtlCaptureContext(ContextRecord);
- Rip = ContextRecord->Rip;
- for ( i = 0; i < 2; ++i )
- {
- result = RtlLookupFunctionEntry(Rip, &ImageBase, 0i64);
- if ( !result )
- break;
- result = (struct _IMAGE_RUNTIME_FUNCTION_ENTRY *)RtlVirtualUnwind(
- 0,
- ImageBase,
- Rip,
- result,
- ContextRecord,
- &HandlerData,
- &EstablisherFrame,
- 0i64);
- }
- return result;
- }
- //----- (000000018000ACF0) ----------------------------------------------------
- _QWORD *__fastcall sub_18000ACF0(_QWORD *a1)
- {
- a1[2] = 0i64;
- a1[1] = "bad allocation";
- *a1 = &std::bad_alloc::`vftable';
- return a1;
- }
- // 18000C378: using guessed type void *std::bad_alloc::`vftable';
- //----- (000000018000AD30) ----------------------------------------------------
- __int64 sub_18000AD30()
- {
- uintptr_t v0; // rax
- __int64 result; // rax
- unsigned __int64 v2; // [rsp+30h] [rbp+10h] BYREF
- struct _FILETIME SystemTimeAsFileTime; // [rsp+38h] [rbp+18h] BYREF
- LARGE_INTEGER PerformanceCount; // [rsp+40h] [rbp+20h] BYREF
- v0 = _security_cookie;
- if ( _security_cookie == 0x2B992DDFA232i64 )
- {
- SystemTimeAsFileTime = 0i64;
- GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
- v2 = (unsigned __int64)SystemTimeAsFileTime;
- v2 ^= GetCurrentThreadId();
- v2 ^= GetCurrentProcessId();
- QueryPerformanceCounter(&PerformanceCount);
- v0 = ((unsigned __int64)&v2 ^ v2 ^ PerformanceCount.QuadPart ^ ((unsigned __int64)PerformanceCount.LowPart << 32)) & 0xFFFFFFFFFFFFi64;
- if ( v0 == 0x2B992DDFA232i64 )
- v0 = 0x2B992DDFA233i64;
- _security_cookie = v0;
- }
- result = ~v0;
- qword_180010020 = result;
- return result;
- }
- // 180010020: using guessed type __int64 qword_180010020;
- //----- (000000018000AE00) ----------------------------------------------------
- void sub_18000AE00()
- {
- InitializeSListHead(&stru_180010990);
- }
- // 180010990: using guessed type union _SLIST_HEADER stru_180010990;
- //----- (000000018000AE10) ----------------------------------------------------
- __int64 sub_18000AE10()
- {
- return _std_type_info_destroy_list(&stru_180010990);
- }
- // 18000B048: using guessed type __int64 __fastcall _std_type_info_destroy_list(_QWORD);
- // 180010990: using guessed type union _SLIST_HEADER stru_180010990;
- //----- (000000018000AE1C) ----------------------------------------------------
- void *sub_18000AE1C()
- {
- return &unk_1800109A0;
- }
- //----- (000000018000AE24) ----------------------------------------------------
- void *sub_18000AE24()
- {
- return &unk_1800109A8;
- }
- //----- (000000018000AE2C) ----------------------------------------------------
- _QWORD *sub_18000AE2C()
- {
- _QWORD *v0; // rax
- _QWORD *result; // rax
- v0 = sub_18000AE1C();
- *v0 |= 0x24ui64;
- result = sub_18000AE24();
- *result |= 2ui64;
- return result;
- }
- //----- (000000018000AE48) ----------------------------------------------------
- void *sub_18000AE48()
- {
- return &unk_1800109D0;
- }
- //----- (000000018000AE50) ----------------------------------------------------
- void sub_18000AE50()
- {
- dword_1800109B0 = 0;
- }
- // 1800109B0: using guessed type int dword_1800109B0;
- //----- (000000018000AE58) ----------------------------------------------------
- void __fastcall sub_18000AE58(unsigned int a1)
- {
- DWORD64 Rip; // rbx
- struct _IMAGE_RUNTIME_FUNCTION_ENTRY *v3; // rax
- bool v4; // bl
- struct _EXCEPTION_POINTERS ExceptionInfo; // [rsp+40h] [rbp-C0h] BYREF
- _QWORD v6[20]; // [rsp+50h] [rbp-B0h] BYREF
- struct _CONTEXT ContextRecord; // [rsp+F0h] [rbp-10h] BYREF
- DWORD64 retaddr; // [rsp+5C8h] [rbp+4C8h]
- __int64 v9; // [rsp+5D0h] [rbp+4D0h] BYREF
- unsigned __int64 ImageBase; // [rsp+5D8h] [rbp+4D8h] BYREF
- unsigned __int64 EstablisherFrame; // [rsp+5E0h] [rbp+4E0h] BYREF
- PVOID HandlerData; // [rsp+5E8h] [rbp+4E8h] BYREF
- if ( IsProcessorFeaturePresent(0x17u) )
- __fastfail(a1);
- sub_18000AE50();
- memset(&ContextRecord, 0, sizeof(ContextRecord));
- RtlCaptureContext(&ContextRecord);
- Rip = ContextRecord.Rip;
- v3 = RtlLookupFunctionEntry(ContextRecord.Rip, &ImageBase, 0i64);
- if ( v3 )
- RtlVirtualUnwind(0, ImageBase, Rip, v3, &ContextRecord, &HandlerData, &EstablisherFrame, 0i64);
- ContextRecord.Rip = retaddr;
- ContextRecord.Rsp = (DWORD64)&v9;
- memset(v6, 0, 0x98ui64);
- v6[2] = retaddr;
- v6[0] = 0x140000015i64;
- ExceptionInfo.ExceptionRecord = (PEXCEPTION_RECORD)v6;
- v4 = IsDebuggerPresent();
- ExceptionInfo.ContextRecord = &ContextRecord;
- SetUnhandledExceptionFilter(0i64);
- if ( !UnhandledExceptionFilter(&ExceptionInfo) && !v4 )
- sub_18000AE50();
- }
- //----- (000000018000AFA4) ----------------------------------------------------
- void sub_18000AFA4()
- {
- void (**i)(void); // rbx
- for ( i = qword_18000D9F8; i < qword_18000D9F8; ++i )
- {
- if ( *i )
- (*i)();
- }
- }
- // 18000D9F8: using guessed type void (*qword_18000D9F8[2])(void);
- //----- (000000018000AFE0) ----------------------------------------------------
- void sub_18000AFE0()
- {
- void (**i)(void); // rbx
- for ( i = &qword_18000DA08; i < &qword_18000DA08; ++i )
- {
- if ( *i )
- (*i)();
- }
- }
- // 18000DA08: using guessed type void (*qword_18000DA08)(void);
- //----- (000000018000B01C) ----------------------------------------------------
- __int64 sub_18000B01C()
- {
- return 1i64;
- }
- //----- (000000018000B0A4) ----------------------------------------------------
- char sub_18000B0A4()
- {
- return 1;
- }
- //----- (000000018000B0A8) ----------------------------------------------------
- __int64 sub_18000B0A8()
- {
- return 0i64;
- }
- //----- (000000018000B0AC) ----------------------------------------------------
- __int64 __fastcall sub_18000B0AC(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
- {
- __int64 v4; // rbx
- __int64 result; // rax
- v4 = *(_QWORD *)(a4 + 56);
- _GSHandlerCheckCommon(a2, a4, v4 + 4);
- result = 1i64;
- if ( ((((*(_DWORD *)(a1 + 4) & 0x66) != 0) + 1) & *(_DWORD *)(v4 + 4)) != 0 )
- return _CxxFrameHandler4(a1, a2, a3, a4);
- return result;
- }
- // 18000A964: using guessed type __int64 __fastcall _GSHandlerCheckCommon(_QWORD, _QWORD, _QWORD);
- // 18000B030: using guessed type __int64 __fastcall _CxxFrameHandler4(_QWORD, _QWORD, _QWORD, _QWORD);
- //----- (000000018000B180) ----------------------------------------------------
- __int64 __fastcall sub_18000B180(__int64 a1, __int64 a2)
- {
- __int64 result; // rax
- result = *(_DWORD *)(a2 + 56) & 1;
- if ( (_DWORD)result )
- {
- *(_DWORD *)(a2 + 56) &= ~1u;
- return sub_1800020A0(*(_QWORD *)(a2 + 96));
- }
- return result;
- }
- //----- (000000018000B1A6) ----------------------------------------------------
- void __fastcall sub_18000B1A6(__int64 a1, __int64 a2)
- {
- sub_180002510(a2 + 104);
- }
- //----- (000000018000B1D0) ----------------------------------------------------
- __int64 __fastcall sub_18000B1D0(__int64 a1, __int64 a2)
- {
- __int64 result; // rax
- result = *(_DWORD *)(a2 + 48) & 1;
- if ( (_DWORD)result )
- {
- *(_DWORD *)(a2 + 48) &= ~1u;
- return sub_180002350(*(_QWORD *)(a2 + 56));
- }
- return result;
- }
- //----- (000000018000B2D0) ----------------------------------------------------
- void __fastcall sub_18000B2D0(__int64 a1, __int64 a2)
- {
- j_j_free(*(void **)(a2 + 136));
- }
- //----- (000000018000B2F0) ----------------------------------------------------
- void __fastcall sub_18000B2F0(__int64 a1, __int64 a2)
- {
- if ( (*(_DWORD *)(a2 + 32) & 1) != 0 )
- {
- *(_DWORD *)(a2 + 32) &= ~1u;
- sub_180002510(a2 + 40);
- }
- }
- //----- (000000018000B316) ----------------------------------------------------
- void __fastcall sub_18000B316(__int64 a1, __int64 a2)
- {
- if ( (*(_DWORD *)(a2 + 32) & 2) != 0 )
- {
- *(_DWORD *)(a2 + 32) &= ~2u;
- std::_Locinfo::~_Locinfo((std::_Locinfo *)(a2 + 144));
- }
- }
- // 18000C110: using guessed type void std::_Locinfo::~_Locinfo(std::_Locinfo *__hidden this);
- //----- (000000018000B340) ----------------------------------------------------
- void __fastcall sub_18000B340(__int64 a1, __int64 a2)
- {
- std::locale::facet::~facet(*(std::locale::facet **)(a2 + 136));
- }
- // 18000C0D8: using guessed type void std::locale::facet::~facet(std::locale::facet *__hidden this);
- //----- (000000018000B426) ----------------------------------------------------
- __int64 __fastcall sub_18000B426(__int64 a1, __int64 a2)
- {
- return sub_180008EF0(a2 + 80);
- }
- //----- (000000018000B4E0) ----------------------------------------------------
- void sub_18000B4E0()
- {
- __int64 v0; // rcx
- void (__fastcall ***v1)(_QWORD, __int64); // rax
- void *v2; // rbx
- while ( 1 )
- {
- v2 = Block;
- if ( !Block )
- break;
- v0 = *((_QWORD *)Block + 1);
- Block = *(void **)Block;
- v1 = (void (__fastcall ***)(_QWORD, __int64))(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v0 + 16i64))(v0);
- if ( v1 )
- (**v1)(v1, 1i64);
- j_j_free(v2);
- }
- }
- // nfuncs=199 queued=159 decompiled=159 lumina nreq=0 worse=0 better=0
- // ALL OK, 159 function(s) have been successfully decompiled
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement