2025-10-22
โ๏ธ NimCrackMe1

flag{852ff73f9be462962d949d563743b86d}
main functions

38 bytes to var_50
40, 5, 12, 71, 18, 75, 21, 92, 9, 18, 23, 85, 9, 75, 66, 8, 85, 90, 69, 88, 68, 87, 69, 119, 93, 84, 68, 92, 69, 19, 89, 91, 71, 66, 94, 89, 22, 93
0x28 is decimal 40
5 is decimal 5
0x47 is decimal 12, etc

23 bytes string loaded TM__cGo7QGde1ZstH4i7xlaOag_4:


xor the 2 from
*(var_20_1 + var_40 + 8) = *(rdx_1 + temp1_1 + 8) ^ *(var_20_1 + rdx + 8);
*(var_20_1 + var_40 + 8): This is the destination, writing the resulting byte into the new string (var_40).
*(rdx_1 + temp1_1 + 8): This is the key byte. temp1_1 is the result of the modulo operation (var_20_1 % rax_1), which makes the key repeat.
^: This is the XOR operator.
*(var_20_1 + rdx + 8): This is the encoded flag byte.

encoded_flag = bytes([
40, 5, 12, 71, 18, 75, 21, 92, 9, 18, 23, 85, 9, 75, 66, 8, 85, 90,
69, 88, 68, 87, 69, 119, 93, 84, 68, 92, 69, 19, 89, 91, 71, 66,
94, 89, 22, 93
])
# (Hex: 4e 69 6d 20 69 73 20 6e 6f 74 20 66 6f 72 20 6d 61 6c 77 61 72 65 21)
key = b"Nim is not for malware!"
flag_bytes = b""
for i in range(len(encoded_flag)):
flag_bytes += bytes([encoded_flag[i] ^ key[i % len(key)]])
print(flag_bytes.decode('utf-8'))

๐ Webshellz

flag e was from base64 decode value from stream
flag{fb4e078a739ac4ce687eb78c2e51aafe}


flag 6 was from new user VJGSuERc6qYAYPdRc556JTHqxqWwLbPwzABc0XgIhgwYEWdQji1 base62 decoded
flag{03638631595684f0c8c461c24b0879e6}

flag d was from # MZWGCZ33MM3WEYJXGZRTAYJUGQ4DIZTFHBRTCMZVMEYTCOJVMU4GIOJUMVSH2=== the server_port base32 decoded
flag{c7ba76c0a4484fe8c135a1195e8d94ed}


Nim dumps
HexRays dump
/* This file was generated by the Hex-Rays decompiler version 9.2.0.250908.
Copyright (c) 2007-2021 Hex-Rays <info@hex-rays.com>
Detected compiler: Visual C++
*/
#include <windows.h>
#include <defs.h>
#include <stdarg.h>
//-------------------------------------------------------------------------
// Function declarations
void __cdecl _mingw_invalidParameterHandler(const wchar_t *, const wchar_t *, const wchar_t *, unsigned int, uintptr_t); // idb
__int64 pre_c_init(); // weak
__int64 pre_cpp_init(); // weak
int _tmainCRTStartup();
int WinMainCRTStartup();
int mainCRTStartup();
int __cdecl atexit(void (__cdecl *)());
int _gcc_register_frame();
__int64 __fastcall _gcc_deregister_frame(); // weak
__int64 __fastcall nimFrame(__int64 a1);
_QWORD **popFrame();
__int64 __fastcall minuspercent___system_u813(__int64 a1, __int64 a2);
void *nimErrorFlag();
__int64 __fastcall nimDecRefIsLastCyclicDyn(__int64 *a1);
_QWORD **__fastcall eqdestroy___system_u5217(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u56(__int64 a1);
_QWORD **__fastcall add__system_u2978(__int64 *a1, __int64 a2, __int64 a3);
_QWORD **__fastcall nimTraceRefDyn(__int64 **a1, __int64 *a2);
_QWORD **__fastcall eqtrace___system_u5229(__int64 a1, __int64 *a2);
_QWORD **__fastcall eqdestroy___system_u4744(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u60(__int64 a1);
_QWORD **__fastcall eqtrace___system_u4756(__int64 a1, __int64 *a2);
_QWORD **__fastcall eqdestroy___system_u4813(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u62(__int64 a1);
_QWORD **__fastcall eqtrace___system_u4825(__int64 a1, __int64 *a2);
_QWORD **__fastcall eqdestroy___system_u4903(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u64(__int64 a1);
_QWORD **__fastcall eqtrace___system_u4915(__int64 a1, __int64 *a2);
_QWORD **__fastcall eqdestroy___system_u5283(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u66(__int64 a1);
_QWORD **__fastcall eqtrace___system_u5295(__int64 a1, __int64 *a2);
_QWORD **__fastcall eqdestroy___system_u9056(__int64 a1);
__int64 __fastcall rttiDestroy__systemZexceptions_u68(__int64 a1);
_QWORD **__fastcall eqtrace___system_u9068(__int64 a1, __int64 *a2);
_QWORD **__fastcall nimAddCharV1(__int64 *a1, char a2, __int64 a3);
void *__fastcall nimCopyMem(void *a1, const void *a2, size_t a3);
void *__fastcall copyMem__system_u1731(void *a1, const void *a2, size_t a3);
__int64 __fastcall nimFrame_0(__int64 a1);
_QWORD **popFrame_0();
_QWORD **__fastcall addChars__stdZprivateZdigitsutils_u104(__int64 *a1, __int64 a2, unsigned __int64 a3, __int64 a4);
void *nimErrorFlag_0();
_QWORD **__fastcall addIntImpl__stdZprivateZdigitsutils_u61(__int64 *a1, unsigned __int64 a2);
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u184(__int64 *a1, unsigned __int64 a2);
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u187(__int64 *a1, __int64 a2);
__int64 __fastcall nimFrame_1(__int64 a1);
_QWORD **popFrame_1();
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u204(__int64 *a1, __int64 a2);
_QWORD *__fastcall dollar___systemZdollars_u14(_QWORD *a1, __int64 a2);
_QWORD *__fastcall dollar___systemZdollars_u34(_QWORD *a1, __int64 a2);
void __fastcall initLock__coreZlocks_u7(struct _RTL_CRITICAL_SECTION *a1);
void *nimErrorFlag_1();
void __fastcall acquire__coreZlocks_u14(struct _RTL_CRITICAL_SECTION *a1);
void *__fastcall nimSetMem__systemZmemory_u7(void *a1, int a2, size_t a3);
__int64 __fastcall nimZeroMem(void *a1, size_t a2);
__int64 __fastcall nimFrame_2(__int64 a1);
_QWORD **popFrame_2();
__int64 __fastcall minuspercent___system_u813_0(__int64 a1, __int64 a2);
_QWORD **__fastcall nimIncRefCyclic(__int64 a1);
__int64 __fastcall nimDecRefIsLastCyclicDyn_0(__int64 *a1);
unsigned __int64 __fastcall eqcopy___stdZexitprocs_u97(__int64 *a1, __int64 a2);
__int64 *__fastcall dollar___stdZexitprocs_u6(__int64 *a1, char a2);
_QWORD **__fastcall eqdestroy___stdZexitprocs_u94(__int64 **a1);
__int64 __fastcall eqwasMoved___stdZexitprocs_u91(_BYTE *a1);
void __fastcall release__coreZlocks_u16(struct _RTL_CRITICAL_SECTION *a1);
void __fastcall callClosures__stdZexitprocs_u19();
_QWORD **__fastcall addExitProc__stdZexitprocs_u184(__int64 *a1);
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatsexitprocsdotnim_Init000();
__int64 __fastcall nimFrame_3(__int64 a1);
_QWORD **popFrame_3();
_QWORD **restoreConsoleOutputCP__stdZsyncio_u657();
void *__fastcall nimSetMem__systemZmemory_u7_0(void *a1, int a2, size_t a3);
void *nimErrorFlag_2();
__int64 __fastcall nimZeroMem_0(void *a1, size_t a2);
_QWORD **restoreConsoleCP__stdZsyncio_u658();
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_Init000();
FARPROC atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_DatInit000();
int fprintf(FILE *const Stream, const char *const Format, ...);
int printf(const char *const Format, ...);
void *__fastcall nimToCStringConv(_QWORD *a1);
HMODULE __fastcall nimLoadLibrary(__int64 *a1);
int __fastcall rawWrite(FILE *a1, const char *a2);
void __fastcall __noreturn nimLoadLibraryError(__int64 *a1);
void *__fastcall nimSetMem__systemZmemory_u7_1(void *a1, int a2, size_t a3);
void *nimErrorFlag_3();
__int64 __fastcall nimZeroMem_1(void *a1, size_t a2);
void *__fastcall nimCopyMem_0(void *a1, const void *a2, size_t a3);
void *__fastcall copyMem__system_u1731_0(void *a1, const void *a2, size_t a3);
_QWORD **popFrame_4();
_QWORD **__fastcall unregisterCycle__system_u3092(__int64 a1);
__int64 __fastcall roundup__system_u5881(__int64 a1, __int64 a2);
__int64 __fastcall msbit__system_u6016(unsigned int a1);
_QWORD **__fastcall mappingSearch__system_u6041(__int64 *a1, __int64 *a2, _QWORD *a3);
__int64 __fastcall lsbit__system_u6024(int a1);
__int64 __fastcall findSuitableBlock__system_u6074(__int64 a1, __int64 *a2, __int64 *a3);
void __noreturn raiseOutOfMem__system_u5876();
LPVOID __fastcall osAllocPages__system_u5901(SIZE_T a1);
LPVOID __fastcall allocPages__system_u6210(__int64 a1, SIZE_T a2);
LPVOID __fastcall osTryAllocPages__system_u5904(SIZE_T a1);
LPVOID __fastcall tryAllocPages__system_u6214(__int64 a1, SIZE_T a2);
_QWORD **__fastcall incCurrMem__system_u6190(__int64 a1, __int64 a2);
__int64 __fastcall zeroMem__system_u1728(void *a1, size_t a2);
void *__fastcall llAlloc__system_u6218(__int64 a1, signed __int64 a2);
_QWORD *__fastcall addHeapLink__system_u6256(__int64 a1, __int64 a2, __int64 a3);
__int64 __fastcall pluspercent___system_u793(__int64 a1, __int64 a2);
_QWORD *__fastcall intSetGet__system_u6351(__int64 a1, __int64 a2);
_BOOL8 __fastcall contains__system_u6400(__int64 a1, __int64 a2);
__int64 __fastcall pageIndex__system_u6636(__int64 a1);
__int64 __fastcall minuspercent___system_u813_1(__int64 a1, __int64 a2);
__int64 *__fastcall requestOsChunks__system_u6653(__int64 a1, signed __int64 a2);
__int64 __fastcall pageIndex__system_u6643(__int64 a1);
_BOOL8 __fastcall isAccessible__system_u6678(__int64 a1, __int64 a2);
_QWORD **__fastcall updatePrevSize__system_u6696(__int64 a1, __int64 a2, __int64 a3);
_QWORD *__fastcall intSetPut__system_u6383(__int64 a1, __int64 a2, __int64 a3);
_QWORD **__fastcall incl__system_u6441(__int64 a1, __int64 a2, __int64 a3);
__int64 *__fastcall splitChunk2__system_u6701(__int64 a1, __int64 a2, __int64 a3);
__int64 *__fastcall mappingInsert__system_u6059(__int64 *a1, __int64 a2);
_QWORD **__fastcall setBit__system_u6027(char a1, _DWORD *a2);
_QWORD **__fastcall addChunkToMatrix__system_u6180(__int64 a1, __int64 *a2);
_QWORD **__fastcall splitChunk__system_u6725(__int64 a1, __int64 a2, __int64 a3);
_QWORD **__fastcall clearBit__system_u6034(char a1, _DWORD *a2);
_QWORD **__fastcall removeChunkFromMatrix2__system_u6171(__int64 a1, __int64 a2, __int64 a3, __int64 a4);
_QWORD *__fastcall getBigChunk__system_u6754(__int64 a1, __int64 a2);
_QWORD *__fastcall getSmallChunk__system_u6782(__int64 a1);
unsigned __int64 __fastcall pageAddr__system_u6650(__int64 a1);
_QWORD **__fastcall compensateCounters__system_u6876(__int64 a1, __int64 a2, __int64 a3);
_QWORD **__fastcall listAdd__system_u6975(__int64 a1, __int64 a2);
_QWORD **__fastcall listRemove__system_u7052(__int64 a1, __int64 a2);
_QWORD **__fastcall excl__system_u6463(__int64 a1, __int64 a2);
_QWORD **__fastcall decCurrMem__system_u6198(__int64 a1, __int64 a2);
_QWORD **__fastcall osDeallocPages__system_u5907(void *a1);
_QWORD **__fastcall freeHugeChunk__system_u6778(__int64 a1, _QWORD *a2);
_BOOL8 __fastcall chunkUnused__system_u6539(_QWORD *a1);
_BOOL8 __fastcall isSmallChunk__system_u6533(__int64 a1);
_QWORD **__fastcall removeChunkFromMatrix__system_u6129(__int64 a1, __int64 *a2);
_QWORD **__fastcall freeBigChunk__system_u6730(__int64 a1, __int64 *a2);
_QWORD **__fastcall deallocBigChunk__system_u6800(__int64 a1, __int64 *a2);
_QWORD **__fastcall addToSharedFreeListBigChunks__system_u6811(__int64 a1, signed __int64 a2);
_QWORD **__fastcall freeDeferredObjects__system_u6911(__int64 a1, __int64 *a2);
_QWORD *__fastcall getHugeChunk__system_u6774(__int64 a1, SIZE_T a2);
_QWORD *__fastcall rawAlloc__system_u6943(__int64 a1, __int64 a2);
_QWORD *__fastcall alloc__system_u7201(__int64 a1, __int64 a2);
_QWORD *__fastcall allocImpl__system_u1747(__int64 a1);
_QWORD *__fastcall allocSharedImpl(__int64 a1);
_QWORD **raiseRangeErrorNoArgs();
_QWORD **__fastcall init__system_u3330(_QWORD *a1, __int64 a2);
__int64 __fastcall ptrSize__system_u7189(__int64 a1);
_QWORD **__fastcall addToSharedFreeList__system_u6835(__int64 a1, signed __int64 *a2, __int64 a3);
_QWORD **__fastcall rawDealloc__system_u7119(__int64 a1, signed __int64 *a2);
_QWORD **__fastcall dealloc__system_u7209(__int64 a1, signed __int64 *a2);
_QWORD *__fastcall realloc__system_u7212(__int64 a1, signed __int64 *a2, __int64 a3);
_QWORD *__fastcall reallocImpl__system_u1753(signed __int64 *a1, __int64 a2);
_QWORD *__fastcall reallocSharedImpl__system_u1766(signed __int64 *a1, __int64 a2);
_QWORD **__fastcall resize__system_u3246(__int64 a1);
_QWORD **__fastcall add__system_u3238(__int64 *a1, __int64 a2, __int64 a3);
_QWORD **__fastcall init__system_u3382(_QWORD *a1, __int64 a2);
_QWORD **__fastcall trace__system_u2913(__int64 a1, __int64 a2, __int64 a3);
_QWORD *__fastcall pop__system_u3128(_QWORD *a1, __int64 *a2);
_QWORD **__fastcall markGray__system_u3149(unsigned __int64 *a1, __int64 a2, __int64 *a3);
_QWORD **__fastcall scanBlack__system_u3120(_QWORD *a1, __int64 a2, __int64 *a3);
_QWORD **__fastcall scan__system_u3205(unsigned __int64 *a1, __int64 a2, __int64 *a3);
_QWORD **__fastcall collectColor__system_u3230(_QWORD *a1, __int64 a2, __int64 a3, __int64 *a4);
_QWORD **__fastcall deallocImpl__system_u1751(signed __int64 *a1);
_QWORD **__fastcall deallocSharedImpl__system_u1764(signed __int64 *a1);
_QWORD **__fastcall deallocShared(signed __int64 *a1);
_QWORD **__fastcall alignedDealloc(signed __int64 *a1, __int64 a2);
_QWORD **__fastcall nimRawDispose(__int64 a1, __int64 a2);
_QWORD **__fastcall free__system_u2961(__int64 a1, __int64 a2);
_QWORD **__fastcall deinit__system_u3369(__int64 a1);
_QWORD **__fastcall collectCyclesBacon__system_u3302(__int64 a1, __int64 a2);
_QWORD **__fastcall deinit__system_u3394(__int64 a1);
_QWORD **collectCycles__system_u3430();
_QWORD **__fastcall registerCycle__system_u3455(__int64 a1, __int64 a2);
_QWORD **__fastcall rememberCycle__system_u3495(char a1, _QWORD *a2, __int64 a3);
_QWORD **__fastcall nimDestroyAndDispose(_QWORD **a1);
_QWORD **__fastcall eqdestroy___stdZassertions_u74(__int64 a1);
_QWORD **__fastcall resize__system_u2986(__int64 a1);
signed __int64 __fastcall nimAsgnStrV2(__int64 a1, __int128 *a2, __int64 a3);
_QWORD *__fastcall eqdup___system_u2662(_QWORD *a1, __int64 *a2, __int64 a3);
_QWORD *__fastcall eqsink___stdZassertions_u83(_QWORD *a1, __int64 *a2);
_QWORD *__fastcall shrink__stdZassertions_u102(_QWORD *a1, __int64 a2);
_QWORD *__fastcall alignedAlloc__system_u1912(__int64 a1, __int64 a2, __int64 a3);
_QWORD *__fastcall newSeqPayloadUninit(signed __int64 a1, unsigned __int64 a2, __int64 a3);
__int64 __fastcall resize__system_u2227(signed __int64 a1, __int64 a2, __int64 a3);
_QWORD *__fastcall alignedRealloc__system_u1972(signed __int64 *a1, size_t a2, __int64 a3, __int64 a4);
signed __int64 *__fastcall prepareSeqAddUninit(unsigned __int64 a1, signed __int64 *a2, __int64 a3, unsigned __int64 a4, __int64 a5);
_QWORD *__fastcall setLen__stdZassertions_u94(__int64 a1, _QWORD *a2, __int64 a3);
_QWORD *__fastcall newSeq__system_u4212(_QWORD *a1, _QWORD *a2);
_QWORD *__fastcall newSeq__system_u4207(_QWORD *a1, _QWORD *a2);
_QWORD *__fastcall auxWriteStackTrace__system_u4173(_QWORD *a1, __int64 *a2, __int64 a3);
_QWORD *__fastcall rawWriteStackTrace__system_u4432(__int64 *a1);
_QWORD *__fastcall add__system_u4515(__int64 a1, _QWORD *a2, __int64 a3);
_QWORD **__fastcall nimIncRefCyclic_0(__int64 a1);
__int64 __fastcall nimDecRefIsLastCyclicDyn_1(__int64 *a1);
_QWORD **__fastcall eqcopy___stdZtypedthreads_u187(__int64 **a1, __int64 a2);
_QWORD **__fastcall eqsink___stdZtypedthreads_u195(__int64 **a1, __int64 *a2);
_QWORD **__fastcall pushCurrentException(__int64 a1);
_BYTE *__fastcall raiseExceptionAux__system_u4487(__int64 a1);
_BYTE *__fastcall raiseExceptionEx(__int64 a1, __int64 a2);
_QWORD **__fastcall sysFatal__system_u5210(__int64 *a1);
_QWORD **raiseOverflow();
__int64 __fastcall align__system_u1634(__int64 a1, __int64 a2);
_QWORD *__fastcall allocShared0Impl__system_u1762(size_t a1);
_QWORD *__fastcall alignedAlloc0__system_u1958(size_t a1, __int64 a2, __int64 a3);
__int64 __fastcall nimNewObj(__int64 a1, __int64 a2);
_QWORD **__fastcall sysFatal__system_u4979(__int64 *a1);
_QWORD **__fastcall prepareAdd(__int64 *a1, __int64 a2, __int64 a3);
_QWORD **__fastcall sysFatal__system_u4806(__int64 *a1);
_QWORD *__fastcall rawNewString(_QWORD *a1, __int64 a2);
signed __int64 __fastcall raiseIndexError2(__int64 a1, __int64 a2);
char *__fastcall realloc0Impl__system_u1756(signed __int64 *a1, __int64 a2, __int64 a3);
char *__fastcall reallocShared0Impl__system_u1769(signed __int64 *a1, __int64 a2, __int64 a3);
__int64 *__fastcall setLengthStrV2(__int64 *a1, signed __int64 a2, __int64 a3);
signed __int64 __fastcall raiseRangeErrorI(__int64 a1, __int64 a2, __int64 a3);
_QWORD **__fastcall appendString(__int64 *a1, __int64 *a2);
_QWORD **__fastcall nimAddCharV1_0(__int64 *a1, char a2, __int64 a3);
__int64 __fastcall add__system_u3639(__int64 *a1, __int64 a2, __int64 a3);
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u204_0(__int64 *a1, __int64 a2);
signed __int64 __fastcall auxWriteStackTrace__system_u4293(_QWORD *a1, __int64 *a2);
_QWORD **__fastcall rawWriteStackTrace__system_u4426(__int64 *a1);
__int64 *__fastcall toNimStr(__int64 *a1, const void *a2, __int64 a3);
size_t __fastcall nimCStrLen(const char *a1);
_QWORD *__fastcall cstrToNimstr(_QWORD *a1, const char *a2);
__int64 *getCurrentException();
_BOOL8 __fastcall isObjDisplayCheck(__int64 a1, __int16 a2, int a3);
_QWORD *__fastcall dollar___system_u4269(_QWORD *a1, __int64 *a2);
signed __int64 *__fastcall reportUnhandledErrorAux__system_u4443(__int64 a1);
signed __int64 *__fastcall reportUnhandledError__system_u4454(__int64 a1);
_QWORD **__fastcall eqdestroy___stdZtypedthreads_u184(__int64 *a1);
_QWORD **raiseDefect();
_QWORD **popCurrentException();
int __fastcall rawWriteString(FILE *a1, const void *a2, size_t a3);
int __fastcall writeToStdErr__system_u4072(const void *a1, size_t a2);
int __fastcall showErrorMessage__system_u4077(const char *a1, size_t a2);
int __fastcall showErrorMessage2__system_u4085(size_t *a1);
signed __int64 writeStackTrace__system_u2672();
__int64 callDepthLimitReached__system_u4678();
__int64 __fastcall nimFrame_4(__int64 a1);
unsigned __int64 __fastcall percentpercent___system_u873(unsigned __int64 a1, unsigned __int64 a2);
void __fastcall __noreturn procAddrError(const char *a1);
FARPROC __fastcall nimGetProcAddr(HMODULE a1, const CHAR *a2);
_QWORD **__fastcall sysFatal__system_u4896(__int64 *a1);
signed __int64 *__fastcall raiseFieldErrorStr(__int64 *a1, __int64 *a2);
_QWORD **__fastcall reset__stdZexitprocs_u58(__int64 **a1);
__int64 *__fastcall shrink__stdZexitprocs_u38(__int64 *a1, __int64 a2);
__int64 *__fastcall setLen__stdZexitprocs_u31(__int64 *a1, __int64 a2);
_QWORD **__fastcall add__stdZexitprocs_u190(__int64 a1, _QWORD *a2);
_QWORD **__fastcall eqdup___system_u4017(__int64 *a1, __int64 a2, _QWORD *a3);
void __fastcall __noreturn signalHandler(int a1);
_crt_signal_t registerSignalHandler__system_u4698();
void __fastcall colonanonymous___system_u9048();
__int64 *__fastcall mnewString(__int64 *a1, __int64 a2);
_QWORD **__fastcall nimPrepareStrMutationImpl__system_u2410(_QWORD *a1);
_QWORD **__fastcall sysFatal__system_u5276(__int64 *a1);
_QWORD **raiseDivByZero();
_QWORD **raiseRangeErrorU();
_QWORD **__fastcall raiseEIO__system_u9050(__int64 *a1);
_QWORD **__fastcall writeWindows__system_u9129(FILE *a1, __int64 *a2, char a3);
_QWORD **__fastcall echoBinSafe(__int64 a1, __int64 a2);
__int64 nimTestErrorFlag();
__int64 atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatssystemdotnim_Init000();
__int64 __fastcall floorMod__pureZtimes_u1259(__int64 a1, __int64 a2);
__int64 __fastcall floorDiv__pureZtimes_u317(__int64 a1, __int64 a2);
void *__fastcall nimToCStringConv_0(_QWORD *a1);
__int64 __fastcall nimFrame_5(__int64 a1);
_QWORD **popFrame_5();
HMODULE __fastcall loadLib__pureZdynlib_u3(__int64 *a1);
FARPROC __fastcall symAddr__pureZdynlib_u74(HMODULE a1, const CHAR *a2);
void *nimErrorFlag_4();
__int64 __fastcall nimFrame_6(__int64 a1);
_QWORD **popFrame_6();
__int64 __fastcall rdFileTime__windowsZwinlean_u282(__int64 a1);
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_Init000();
FARPROC atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_DatInit000();
__int64 __fastcall nimFrame_7(__int64 a1);
_QWORD **popFrame_7();
__int64 __fastcall toUnix__pureZtimes_u1230(__int64 *a1);
void *__fastcall nimSetMem__systemZmemory_u7_2(void *a1, int a2, size_t a3);
void *nimErrorFlag_5();
__int64 __fastcall nimZeroMem_2(void *a1, size_t a2);
_QWORD *__fastcall initTime__pureZtimes_u1200(_QWORD *a1, __int64 a2, __int64 a3);
_QWORD *__fastcall fromWinTime__pureZtimes_u1250(_QWORD *a1, __int64 a2);
_QWORD *__fastcall getTime__pureZtimes_u1281(_QWORD *a1);
unsigned __int64 __fastcall nimPrepareStrMutationV2(_QWORD *a1);
__int64 __fastcall nimFrame_8(__int64 a1);
_QWORD **popFrame_8();
__int64 *__fastcall buildEncodedFlag__crackme_u18(__int64 *a1);
__int64 *__fastcall xorStrings__crackme_u3(__int64 *a1, __int64 *a2, __int64 *a3);
void *nimErrorFlag_6();
_QWORD **main__crackme_u20();
_QWORD **PreMainInner();
_QWORD **PreMain();
_QWORD **NimMainInner();
_QWORD **NimMain();
int __fastcall main(int argc, const char **argv, const char **envp);
_QWORD **NimMainModule();
void (*_do_global_dtors())(void);
int _do_global_ctors();
int _main();
__int64 setargv();
__int64 __fastcall _dyn_tls_dtor(__int64 a1, unsigned int a2);
__int64 __fastcall TlsCallback_0(__int64 a1, int a2);
__int64 _tlregdtor(); // weak
int __cdecl matherr(struct _exception *Except);
void __cdecl fpreset();
void __noreturn _report_error(char *Format, ...);
int __fastcall mark_section_writable(const void *a1);
void pei386_runtime_relocator();
__int64 (__fastcall *__fastcall _mingw_raise_matherr(int a1, __int64 a2, double a3, double a4, __int64 a5))(_QWORD);
void __fastcall _mingw_setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction);
void _mingwthr_run_key_dtors_part_0();
__int64 __fastcall __w64_mingwthr_add_key_dtor(int a1, __int64 a2);
__int64 __fastcall __w64_mingwthr_remove_key_dtor(int a1);
__int64 __fastcall _mingw_TLScallback(__int64 a1, unsigned int a2);
void __cdecl __noreturn exit_0(int Code);
void __cdecl __noreturn exit_0(int Code);
_BOOL8 __fastcall ValidateImageBase(__int64 a1);
__int64 __fastcall FindPESection(__int64 a1, unsigned __int64 a2);
const char *__fastcall FindPESectionByName(char *Str2);
__int64 __fastcall _mingw_GetSectionForAddress(__int64 a1);
__int64 _mingw_GetSectionCount();
__int64 __fastcall FindPESectionExec(__int64 a1);
void *GetPEImageBase();
_BOOL8 __fastcall IsNonwritableInCurrentImage(__int64 a1);
char *__fastcall _mingw_enum_import_library_names(int a1);
void __fastcall emutls_destroy(void *ptr);
void __cdecl emutls_init();
void *__fastcall _emutls_get_address(__emutls_object *obj);
void __fastcall _emutls_register_common(__emutls_object *obj, word size, word align, void *templ);
__int64 __fastcall _mingw_vfprintf(FILE *Stream, char *a2, const char **a3);
char *__fastcall _pformat_cvt(int a1, __int64 *a2, int a3, int *a4, int *a5);
__int64 __fastcall _pformat_putc(char a1, __int64 a2);
__int64 __fastcall _pformat_wputchars(__int64 a1, int a2, __int64 a3);
__int64 __fastcall _pformat_putchars(__int64 a1, int a2, __int64 a3);
__int64 __fastcall _pformat_puts(const char *a1, __int64 a2);
__int64 __fastcall _pformat_emit_inf_or_nan(int a1, __int64 a2, __int64 a3);
__int64 __fastcall _pformat_xint_isra_0(int a1, unsigned __int64 a2, __int64 a3);
__int64 __fastcall _pformat_int_isra_0(unsigned __int64 a1, __int64 a2);
__int64 __fastcall _pformat_emit_radix_point(__int64 a1);
__int64 __fastcall _pformat_emit_float(int a1, char *a2, int a3, __int64 a4);
__int64 __fastcall _pformat_emit_efloat(int a1, char *a2, int a3, _DWORD *a4);
void __fastcall _pformat_efloat(long double *a1, _DWORD *a2);
void __fastcall _pformat_float(long double *a1, __int64 a2);
void __fastcall _pformat_gfloat(long double *a1, _DWORD *a2);
__int64 __fastcall _pformat_emit_xfloat_isra_0(unsigned __int64 a1, __int16 a2, __int64 a3);
__int64 __fastcall _mingw_pformat(__int16 a1, FILE *a2, signed int a3, char *a4, const char **a5);
char *__fastcall _rv_alloc_D2A(int a1);
char *__fastcall _nrv_alloc_D2A(char *a1, _QWORD *a2, int a3);
void __fastcall _freedtoa(__int64 a1);
__int64 __fastcall _quorem_D2A(__int64 a1, __int64 a2);
char *__fastcall _gdtoa(int *a1, int a2, int *a3, _DWORD *a4, int a5, int a6, int *a7, char **a8);
void __fastcall _rshift_D2A(__int64 a1, int a2);
__int64 __fastcall _trailz_D2A(__int64 a1);
void __fastcall dtoa_lock(int a1);
void __fastcall dtoa_lock_cleanup();
_QWORD *__fastcall _Balloc_D2A(signed int a1);
void __fastcall _Bfree_D2A(int *a1);
int *__fastcall _multadd_D2A(int *a1, int a2, int a3);
_DWORD *__fastcall _i2b_D2A(int a1);
_QWORD *__fastcall _mult_D2A(_DWORD *a1, _DWORD *a2);
int *__fastcall _pow5mult_D2A(int *a1, int a2);
_QWORD *__fastcall _lshift_D2A(int *a1, int a2);
__int64 __fastcall _cmp_D2A(__int64 a1, __int64 a2);
_QWORD *__fastcall _diff_D2A(__int64 a1, __int64 a2);
double __fastcall _b2d_D2A(__int64 a1, _DWORD *a2);
_QWORD *__fastcall _d2b_D2A(double a1, _DWORD *a2, _DWORD *a3);
_BYTE *__fastcall _strcp_D2A(_BYTE *a1, char *a2);
size_t __cdecl strnlen(const char *String, size_t MaxCount);
size_t __cdecl wcsnlen(const wchar_t *Source, size_t MaxCount);
int __cdecl vfprintf(FILE *const Stream, const char *const Format, va_list ArgList);
int fprintf_0(FILE *const Stream, const char *const Format, ...);
__int64 get_output_format(); // weak
__int64 __fastcall _getmainargs(int *a1, char ***a2, char ***a3, int a4, int *a5);
__int64 __fastcall _wgetmainargs(int *a1, wchar_t ***a2, wchar_t ***a3, int a4, int *a5);
_onexit_t __cdecl onexit(_onexit_t Func);
int __cdecl at_quick_exit(void (__cdecl *)());
void __fastcall amsg_exit(int a1);
int _ms_fwprintf(FILE *Stream, wchar_t *Format, ...);
void __cdecl tzset();
void __cdecl tzset_0();
// int *__cdecl _daylight_0();
// int *__cdecl _timezone();
// char **__cdecl _tzname_0();
// void *__cdecl memset(void *, int Val, size_t Size);
// size_t __cdecl strlen(const char *Str);
// int __cdecl strncmp_0(const char *Str1, const char *Str2, size_t MaxCount);
// size_t __cdecl wcslen_0(const wchar_t *String);
// FILE *__cdecl _acrt_iob_func_0(unsigned int Ix);
// int *__cdecl _p__commode();
// int *__cdecl _p__fmode();
// int __cdecl _stdio_common_vfprintf(unsigned __int64 Options, FILE *Stream, const char *Format, _locale_t Locale, va_list ArgList);
// int __cdecl _stdio_common_vfwprintf_0(unsigned __int64 Options, FILE *Stream, const wchar_t *Format, _locale_t Locale, va_list ArgList);
// int __cdecl fflush_0(FILE *Stream);
// int __cdecl fputc(int Character, FILE *Stream);
// size_t __cdecl fwrite(const void *Buffer, size_t ElementSize, size_t ElementCount, FILE *Stream);
// int *__cdecl _p___argc();
// char ***__cdecl _p___argv();
// wchar_t ***__cdecl _p___wargv();
// void __cdecl cexit_0();
// errno_t __cdecl configure_narrow_argv_0(_crt_argv_mode mode);
// errno_t __cdecl configure_wide_argv(_crt_argv_mode mode);
// int __cdecl crt_at_quick_exit_0(_PVFV Function);
// int __cdecl crt_atexit(_PVFV Function);
// int *__cdecl errno();
// int __cdecl initialize_narrow_environment();
// int __cdecl initialize_wide_environment();
// void __cdecl initterm(_PVFV *First, _PVFV *Last);
// void __cdecl _set_app_type(_crt_app_type Type);
// _invalid_parameter_handler __cdecl set_invalid_parameter_handler_0(_invalid_parameter_handler Handler);
// void __cdecl __noreturn abort();
// _crt_signal_t __cdecl signal_0(int Signal, _crt_signal_t Function);
// char *__cdecl strerror_0(int ErrorMessage);
// void *__cdecl memcpy_0(void *, const void *Src, size_t Size);
// void __cdecl _setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction);
// struct lconv *__cdecl localeconv();
// int __cdecl set_new_mode_0(int NewMode);
// void *__cdecl calloc(size_t Count, size_t Size);
// void __cdecl free(void *Block);
// void *__cdecl malloc_0(size_t Size);
// void *__cdecl realloc_0(void *Block, size_t Size);
// void __cdecl lock_file(FILE *Stream);
// void __cdecl unlock_file_0(FILE *Stream);
// char ***__cdecl _p__environ();
// wchar_t ***__cdecl _p__wenviron_0();
// size_t __cdecl mbrtowc_0(wchar_t *DstCh, const char *SrcCh, size_t SizeInBytes, mbstate_t *State);
// size_t __cdecl wcrtomb(char *Dest, wchar_t Source, mbstate_t *State);
signed __int64 __fastcall mutex_impl_init(volatile signed __int64 *a1, signed __int64 a2);
__int64 __fastcall pthread_mutex_lock(volatile signed __int64 *a1);
__int64 __fastcall pthread_mutex_timedlock(volatile signed __int64 *a1, __int64 a2);
__int64 __fastcall pthread_mutex_unlock(volatile signed __int64 *a1);
__int64 __fastcall pthread_mutex_trylock(volatile signed __int64 *a1);
__int64 __fastcall pthread_mutex_init(__int64 *a1, _DWORD *a2);
__int64 __fastcall pthread_mutex_destroy(_QWORD **a1);
__int64 __fastcall pthread_mutexattr_init(_DWORD *a1);
__int64 __fastcall pthread_mutexattr_destroy(__int64 a1);
__int64 __fastcall pthread_mutexattr_gettype(_DWORD *a1, int *a2);
__int64 __fastcall pthread_mutexattr_settype(unsigned int *a1, unsigned int a2);
__int64 __fastcall pthread_mutexattr_getpshared(_DWORD *a1, int *a2);
__int64 __fastcall pthread_mutexattr_setpshared(_DWORD *a1, unsigned int a2);
__int64 __fastcall pthread_mutexattr_getprotocol(_DWORD *a1, int *a2);
__int64 __fastcall pthread_mutexattr_setprotocol(unsigned int *a1, int a2);
__int64 __fastcall pthread_mutexattr_getprioceiling(_DWORD *a1, _DWORD *a2);
__int64 __fastcall pthread_mutexattr_setprioceiling(_DWORD *a1, int a2);
__int64 __fastcall SetThreadName_VEH(_DWORD **a1);
__int64 __fastcall _pthread_get_pointer(unsigned __int64 a1);
void *__fastcall enterOnceObject(__int64 a1);
unsigned __int64 __fastcall _pthread_register_pointer(__int64 a1);
DWORD pthread_tls_init();
void __noreturn replace_spin_keys_part_0();
__int64 __fastcall leaveOnceObject_part_0(_DWORD *Block);
__int64 __fastcall pthread_once_cleanup(volatile signed __int64 *Block);
__int64 pop_pthread_mem();
__int64 __fastcall push_pthread_mem_part_0(_QWORD *a1);
__int64 __fastcall push_pthread_mem(_QWORD *a1);
void pthread_once_raw_constprop_0_isra_0();
__int64 _pthread_self_lite_part_0();
LPVOID _pthread_self_lite();
void __fastcall pthread_cleanup_dest_part_0(unsigned __int64 a1);
void __fastcall __noreturn pthread_create_wrapper(volatile signed __int64 *a1);
__int64 __fastcall _dyn_tls_pthread(__int64 a1, int a2, __int64 a3);
__int64 __fastcall _pth_gpointer_locked(unsigned __int64 a1);
void __fastcall thread_print_set(int a1);
int __fastcall thread_print(unsigned __int64 a1, const char *a2);
__int64 pthread_timechange_handler_np(); // weak
__int64 pthread_num_processors_np(); // weak
__int64 __fastcall pthread_set_num_processors_np(int a1);
__int64 __fastcall pthread_once(int *a1, void (__fastcall *a2)(__int64, _QWORD *), __int64 a3, __int64 a4, int a5, __int64 a6);
__int64 __fastcall pthread_key_create(_DWORD *a1, __int64 a2);
__int64 __fastcall pthread_key_delete(unsigned int a1);
__int64 __fastcall pthread_getspecific(unsigned int a1);
__int64 __fastcall pthread_setspecific(unsigned int a1, __int64 a2);
_BOOL8 __fastcall pthread_equal(__int64 a1, __int64 a2);
void __fastcall pthread_cleanup_dest(unsigned __int64 a1);
__int64 pthread_self(); // weak
_QWORD *pthread_getevent();
__int64 __fastcall pthread_gethandle(unsigned __int64 a1);
__int64 pthread_getclean();
__int64 __fastcall pthread_get_concurrency(_DWORD *a1);
__int64 __fastcall pthread_set_concurrency(int a1);
void __fastcall __noreturn pthread_exit(unsigned __int64 ReturnCode);
__int64 _pthread_shallcancel();
__int64 __fastcall pthread_setnobreak(int a1);
void __noreturn pthread_invoke_cancel();
void __fastcall test_cancel_locked(unsigned __int64 a1);
__int64 pthread_testcancel();
__int64 __fastcall pthread_delay_np(__int64 a1);
__int64 __fastcall pthread_delay_np_ms(DWORD dwMilliseconds); // idb
__int64 __fastcall pthread_cancel(unsigned __int64 a1);
__int64 __fastcall pthread_kill(unsigned __int64 a1, int a2);
__int64 __fastcall pthread_get_state(_DWORD *a1, unsigned int a2);
__int64 __fastcall pthread_set_state(int *a1, int a2, int a3);
__int64 __fastcall pthread_attr_init(__int64 a1);
__int64 __fastcall pthread_attr_destroy(_QWORD *a1);
__int64 __fastcall pthread_attr_setdetachstate(unsigned int *a1, int a2);
__int64 __fastcall pthread_attr_getdetachstate(_DWORD *a1, int *a2);
__int64 __fastcall pthread_attr_setinheritsched(unsigned int *a1, int a2);
__int64 __fastcall pthread_attr_getinheritsched(_DWORD *a1, int *a2);
__int64 __fastcall pthread_attr_setscope(unsigned int *a1, int a2);
__int64 __fastcall pthread_attr_getscope(_DWORD *a1, int *a2);
__int64 __fastcall pthread_attr_getstack(__int64 a1, _QWORD *a2, _QWORD *a3);
__int64 __fastcall pthread_attr_setstack(__int64 a1, __int64 a2, __int64 a3);
__int64 __fastcall pthread_attr_getstackaddr(__int64 a1, _QWORD *a2);
__int64 __fastcall pthread_attr_setstackaddr(__int64 a1, __int64 a2);
__int64 __fastcall pthread_attr_getstacksize(__int64 a1, _QWORD *a2);
__int64 __fastcall pthread_attr_setstacksize(__int64 a1, __int64 a2);
__int64 __fastcall pthread_setcancelstate(unsigned int a1, int *a2);
__int64 __fastcall pthread_setcanceltype(int a1, int *a2);
__int64 __fastcall pthread_create(_QWORD *a1, int *a2, __int64 a3, __int64 a4);
__int64 __fastcall pthread_join(unsigned __int64 a1, _QWORD *a2);
__int64 __fastcall pthread_tryjoin(unsigned __int64 a1, _QWORD *a2);
__int64 __fastcall pthread_detach(unsigned __int64 a1);
__int64 pthread_getconcurrency(); // weak
__int64 __fastcall pthread_setconcurrency(int a1);
__int64 __fastcall pthread_setname_np(unsigned __int64 a1, const char *a2);
__int64 __fastcall pthread_getname_np(unsigned __int64 a1, _BYTE *a2, size_t a3);
unsigned __int64 pthread_time_in_ms();
unsigned __int64 __fastcall pthread_time_in_ms_from_timespec(__int64 a1);
unsigned __int64 __fastcall pthread_rel_time_in_ms(__int64 a1);
DWORD __fastcall pthread_wait_for_single_object(HANDLE hHandle, DWORD a2);
DWORD __fastcall pthread_wait_for_multiple_objects(DWORD nCount, HANDLE *lpHandles, BOOL bWaitAll, DWORD a4);
__int64 __fastcall rwl_ref_destroy(_DWORD **a1, _QWORD *a2);
__int64 __fastcall rwl_ref_unlock(_DWORD **a1);
__int64 __fastcall rwl_unref(__int64 a1, unsigned int a2);
__int64 __fastcall st_cancelwrite(__int64 a1);
void __fastcall rwl_print_set(int a1);
int __fastcall rwl_print(const void **a1, const char *a2);
__int64 __fastcall pthread_rwlock_init(__int64 **a1);
__int64 __fastcall rwlock_static_init(__int64 **a1);
__int64 __fastcall rwl_ref_constprop_0(__int64 **a1);
__int64 __fastcall pthread_rwlock_destroy(_DWORD **a1);
__int64 __fastcall pthread_rwlock_rdlock(__int64 **a1);
__int64 __fastcall pthread_rwlock_timedrdlock(__int64 **a1, __int64 a2);
__int64 __fastcall pthread_rwlock_tryrdlock(__int64 **a1);
__int64 __fastcall pthread_rwlock_trywrlock(__int64 **a1);
__int64 __fastcall pthread_rwlock_unlock(_DWORD **a1);
__int64 __fastcall pthread_rwlock_wrlock(__int64 **a1);
__int64 __fastcall pthread_rwlock_timedwrlock(__int64 **a1, __int64 a2);
__int64 __fastcall pthread_rwlockattr_destroy(__int64 a1);
__int64 __fastcall pthread_rwlockattr_init(_DWORD *a1);
__int64 __fastcall pthread_rwlockattr_getpshared(_DWORD *a1, _DWORD *a2);
__int64 __fastcall pthread_rwlockattr_setpshared(unsigned int *a1, unsigned int a2);
__int64 __fastcall pthread_spin_init(_QWORD *a1);
__int64 pthread_spin_destroy();
__int64 __fastcall pthread_spin_lock(volatile __int64 *a1);
__int64 __fastcall pthread_spin_trylock(volatile __int64 *a1);
__int64 __fastcall pthread_spin_unlock(_QWORD *a1);
__int64 __fastcall do_sema_b_release(HANDLE hSemaphore, LONG lReleaseCount, LPCRITICAL_SECTION lpCriticalSection, volatile signed __int32 *a4);
void __fastcall cond_print_set(int a1, FILE *a2);
int __fastcall cond_print(const void **a1, const char *a2);
__int64 __fastcall pthread_condattr_destroy(_DWORD *a1);
__int64 __fastcall pthread_condattr_init(_DWORD *a1);
__int64 __fastcall pthread_condattr_getpshared(_DWORD *a1, _DWORD *a2);
__int64 __fastcall pthread_condattr_getclock(__int64 a1, _DWORD *a2);
__int64 __fastcall pthread_condattr_setclock(__int64 a1, int a2);
__int64 __fastcall _pthread_clock_nanosleep(unsigned int a1, char a2, __int64 a3, _QWORD *a4);
__int64 __fastcall pthread_condattr_setpshared(_DWORD *a1, unsigned int a2);
__int64 __fastcall pthread_cond_init(_QWORD *a1, _DWORD *a2);
__int64 __fastcall do_sema_b_wait_intern(HANDLE hHandle, int a2, DWORD a3);
__int64 __fastcall do_sema_b_wait(HANDLE hHandle, int a2, DWORD a3, struct _RTL_CRITICAL_SECTION *a4, volatile signed __int32 *a5);
__int64 __fastcall pthread_cond_destroy(__int64 *a1);
__int64 __fastcall pthread_cond_signal(__int64 *a1);
__int64 __fastcall pthread_cond_broadcast(__int64 *a1);
__int64 __fastcall pthread_cond_wait(unsigned __int64 *a1, volatile signed __int64 *a2);
_DWORD *__fastcall cleanup_wait(__int64 *a1);
__int64 __fastcall pthread_cond_timedwait_impl(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3, int a4);
__int64 __fastcall pthread_cond_timedwait(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3);
__int64 __fastcall pthread_cond_timedwait_relative_np(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3);
__int64 __fastcall pthread_check(unsigned __int64 a1);
__int64 __fastcall sched_get_priority_min(unsigned int a1);
__int64 __fastcall sched_get_priority_max(unsigned int a1);
__int64 __fastcall pthread_attr_setschedparam(__int64 a1, _DWORD *a2);
__int64 __fastcall pthread_attr_getschedparam(__int64 a1, _DWORD *a2);
__int64 __fastcall pthread_attr_setschedpolicy(__int64 a1, unsigned int a2);
__int64 __fastcall pthread_attr_getschedpolicy(__int64 a1, _DWORD *a2);
__int64 __fastcall pthread_getschedparam(unsigned __int64 a1, _DWORD *a2, _DWORD *a3);
__int64 __fastcall pthread_setschedparam(unsigned __int64 a1, unsigned int a2, int *a3);
__int64 __fastcall sched_getscheduler(__int64 dwProcessId);
__int64 __fastcall sched_setscheduler(__int64 dwProcessId, unsigned int a2, __int64 a3);
__int64 sched_yield();
int printf_0(const char *const Format, ...);
// char *__cdecl strdup(const char *String);
// __int64 __fastcall _intrinsic_setjmpex(_QWORD, _QWORD); weak
// void *__cdecl memmove_0(void *, const void *Src, size_t Size);
void __noreturn pthread_tls_init_cold(void); // weak
void __noreturn pthread_once_raw_constprop_0_isra_0_cold(void); // weak
void __noreturn _pthread_self_lite_part_0_cold(void); // weak
void __noreturn thread_print_cold();
void __fastcall __noreturn pthread_once_cold(__int64 a1, __int64 a2, __int64 a3, __int64 a4, int a5, __int64 a6);
// __int64 __fastcall _IAT_start__(_QWORD, _QWORD); weak
//-------------------------------------------------------------------------
// Data declarations
__emutls_object _emutls_v_allocator__system_u7250 = { 12960uLL, 8uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_nimInErrorMode__system_u4460 = { 1uLL, 1uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_localRaiseHook__system_u3633 = { 8uLL, 8uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_rootsThreshold__system_u3301 = { 8uLL, 8uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_roots__system_u3091 = { 24uLL, 8uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_framePtr__system_u2692 = { 8uLL, 8uLL, { 0uLL }, NULL }; // idb
__emutls_object _emutls_v_currException__system_u4105 = { 8uLL, 8uLL, { 0uLL }, NULL }; // idb
__int64 (*p_0)[58] = &qword_14001EE30; // weak
int fpi_0[8] = { 64, -16445, 16320, 1, 0, 14, 0, 0 }; // weak
_UNKNOWN *pmem_next = &private_mem; // weak
int daylight = 1073869848;
int timezone = 1073869852;
char *tzname[2] = { &initial_tznames, (char *)0x708000000001LL };
__int64 data = -1LL; // weak
signed __int64 mtx_pthr_locked = -3LL; // weak
__int64 *pthread_key_lock = (__int64 *)0xFFFFFFFFFFFFFFFFLL; // weak
DWORD pthread_tls = 4294967295u; // idb
__int64 cond_locked = -1LL; // weak
__int64 rwl_global = -1LL; // weak
_UNKNOWN cond_locked_0; // weak
_UNKNOWN unk_140020080; // weak
char digits100__stdZprivateZdigitsutils_u2[209] = "00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899addChars"; // weak
_UNKNOWN TM__n49a9aYp5BrbXv9a6OCpJYm0g_2; // weak
_UNKNOWN TM__JXL39bfraktrl3ZkJ5EQGjw_7; // weak
_UNKNOWN TM__JXL39bfraktrl3ZkJ5EQGjw_9; // weak
_UNKNOWN TM__JXL39bfraktrl3ZkJ5EQGjw_11; // weak
_UNKNOWN TM__JXL39bfraktrl3ZkJ5EQGjw_14; // weak
__int64 TM__JXL39bfraktrl3ZkJ5EQGjw_15 = 60LL; // weak
_UNKNOWN unk_1400204E0; // weak
__int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_5 = 8LL; // weak
_UNKNOWN TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_6; // weak
__int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_7 = 8LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_2; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_4; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_5 = 29LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_13; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_14 = 18LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_70; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_71 = 18LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_81; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_82 = 20LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_90; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_92; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_93 = 6LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_94; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_95 = 13LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_107; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_108 = 7LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_109; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_110 = 4LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_112; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_113 = 34LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_114; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_115 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_116; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_117 = 20LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_119 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_122; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_123 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_124; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_125 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_129; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_130 = 17LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_131; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_132 = 3LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_133 = 1LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_135 = 1LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_136 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_137; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_138 = 28LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_139; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_140 = 2LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_141; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_142 = 2LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_143; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_144 = 50LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_145; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_146 = 117LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_147; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_148 = 1LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_155; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_156 = 31LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_157; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_158 = 61LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_159; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_160 = 31LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_161; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_162 = 26LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_163; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_164 = 27LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_167; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_168 = 15LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_174; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_175 = 16LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_176 = 18LL; // weak
_UNKNOWN TM__Q5wkpxktOdTGvlSRo9bzt9aw_177; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_178 = 27LL; // weak
__int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_180 = 27LL; // weak
char fsLookupTable__system_u6015[256] =
{
'\xFF',
'\0',
'\x01',
'\x01',
'\x02',
'\x02',
'\x02',
'\x02',
'\x03',
'\x03',
'\x03',
'\x03',
'\x03',
'\x03',
'\x03',
'\x03',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x04',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x05',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\x06',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a',
'\a'
}; // weak
_UNKNOWN unk_140021110; // weak
_UNKNOWN unk_140021920; // weak
__int64 TM__k6kyf4Co79a84IkK9blFuQVA_3 = 10LL; // weak
_UNKNOWN TM__k6kyf4Co79a84IkK9blFuQVA_6; // weak
__int64 TM__k6kyf4Co79a84IkK9blFuQVA_7 = 8LL; // weak
_UNKNOWN TM__k6kyf4Co79a84IkK9blFuQVA_8; // weak
__int64 TM__k6kyf4Co79a84IkK9blFuQVA_9 = 8LL; // weak
_UNKNOWN TM__cGo7QGde1ZstH4i7xlaOag_4; // weak
__int64 TM__cGo7QGde1ZstH4i7xlaOag_5 = 23LL; // weak
_UNKNOWN TM__cGo7QGde1ZstH4i7xlaOag_6; // weak
_DWORD p05_0[8] = { 5, 25, 125, 0, 0, 0, 0, 0 }; // weak
__int64 *refptr_Dl_1426063656_ = &Dl_1426063656_; // weak
__int64 (__fastcall **refptr_NTIv2__1DmnNWJVVT9bplfmaalVeUA_)() = &_data_start__; // weak
__int64 (__fastcall **refptr_NTIv2__RKHXYNwSRXz825VbZValEQ_)() = &NTIv2__RKHXYNwSRXz825VbZValEQ_; // weak
__int64 (__fastcall **refptr_NTIv2__k6VacnfEHcFyOMal5EruvA_)() = &NTIv2__k6VacnfEHcFyOMal5EruvA_; // weak
__int64 (__fastcall **refptr_NTIv2__lVI5mUyBp9bAT9cco7UvZP8Q_)() = &NTIv2__lVI5mUyBp9bAT9cco7UvZP8Q_; // weak
__int64 (__fastcall **refptr_NTIv2__txzrG6zQAbHR6Hap9b2RC7g_)() = &NTIv2__txzrG6zQAbHR6Hap9b2RC7g_; // weak
__int64 (__fastcall **refptr_NTIv2__xTnzBHckcPoKiwygsku9csg_)() = &NTIv2__xTnzBHckcPoKiwygsku9csg_; // weak
_UNKNOWN *refptr__CRT_MT = &CRT_MT; // weak
_UNKNOWN *refptr__MINGW_INSTALL_DEBUG_MATHERR = &MINGW_INSTALL_DEBUG_MATHERR; // weak
__int64 *refptr___CTOR_LIST__ = &_CTOR_LIST__; // weak
_UNKNOWN *refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ = &__RUNTIME_PSEUDO_RELOC_LIST__; // weak
_UNKNOWN *refptr___RUNTIME_PSEUDO_RELOC_LIST__ = &__RUNTIME_PSEUDO_RELOC_LIST__; // weak
__int64 (__fastcall **refptr___dyn_tls_init_callback)() = &_dyn_tls_init_callback; // weak
__emutls_object *const refptr___emutls_v_framePtr__system_u2692 = &_emutls_v_framePtr__system_u2692; // idb
__emutls_object *const refptr___emutls_v_nimInErrorMode__system_u4460 = &_emutls_v_nimInErrorMode__system_u4460; // idb
_UNKNOWN *refptr___image_base__ = (_UNKNOWN *)0x140000000LL; // weak
_UNKNOWN **refptr___imp___initenv = &__initenv; // weak
_UNKNOWN *refptr___imp__exit = &_exit; // weak
_UNKNOWN *refptr___imp__tzset = &_tzset; // weak
_UNKNOWN *refptr___imp_exit = &exit; // weak
_UNKNOWN *refptr___mingw_app_type = &_mingw_app_type; // weak
_UNKNOWN *refptr___mingw_initltsdrot_force = &_mingw_initltsdrot_force; // weak
_UNKNOWN *refptr___mingw_initltsdyn_force = &_mingw_initltsdyn_force; // weak
_UNKNOWN *refptr___mingw_initltssuo_force = &_mingw_initltssuo_force; // weak
_UNKNOWN *refptr___mingw_module_is_dll = &_mingw_module_is_dll; // weak
__int64 *refptr___mingw_oldexcpt_handler = &_mingw_oldexcpt_handler; // weak
_UNKNOWN *refptr___native_startup_lock = &_native_startup_lock; // weak
_UNKNOWN *refptr___native_startup_state = &_native_startup_state; // weak
_UNKNOWN *refptr___tens_D2A = &_tens_D2A; // weak
_PVFV *const refptr___xc_a = &__crt_xc_start__; // idb
_PVFV *const refptr___xc_z = &_xc_z; // idb
_PVFV *const refptr___xi_a = &__crt_xi_start__; // idb
_PVFV *const refptr___xi_z = &_xi_z; // idb
int *refptr__commode = &commode; // weak
_UNKNOWN *refptr__dowildcard = &dowildcard; // weak
int *refptr__fmode = &fmode; // weak
const LPTOP_LEVEL_EXCEPTION_FILTER refptr__gnu_exception_handler = &gnu_exception_handler; // idb
__int64 (__fastcall *refptr__matherr)() = &matherr; // weak
_UNKNOWN *refptr__newmode = &newmode; // weak
_UNKNOWN *refptr_nim_program_result = &nim_program_result; // weak
int startinfo; // weak
int has_cctor; // weak
int managedapp; // weak
int mainret; // weak
char **envp; // idb
char **argv; // idb
int argc; // idb
__int64 gFuns__stdZexitprocs_u15; // weak
__int64 qword_140027048; // weak
struct _RTL_CRITICAL_SECTION gFunsLock__stdZexitprocs_u14; // weak
int consoleOutputCP__stdZsyncio_u655; // weak
__int64 (*Dl_520094348_)(void); // weak
int consoleCP__stdZsyncio_u656; // weak
__int64 (*Dl_520094349_)(void); // weak
__int64 (__fastcall *Dl_520094344_)(_QWORD); // weak
__int64 (__fastcall *Dl_520094346_)(_QWORD); // weak
__int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2; // weak
__int64 (__fastcall *globalRaiseHook__system_u3630)(_QWORD); // weak
__int64 (*outOfMemHook__system_u3635)(void); // weak
__int64 (__fastcall *unhandledExceptionHook__system_u3638)(_QWORD); // weak
__int64 (__fastcall *errorMessageWriter__system_u4067)(_QWORD); // weak
__int64 (__fastcall *onUnhandledException__system_u4442)(_QWORD); // weak
struct _RTL_CRITICAL_SECTION echoLock__system_u9047; // idb
__int64 inet_ntop_real__windowsZwinlean_u796; // weak
__int64 ws2__windowsZwinlean_u797; // weak
__int64 Dl_1426063656_; // weak
__int64 TM__k6kyf4Co79a84IkK9blFuQVA_4; // weak
int cmdCount; // weak
__int64 cmdLine; // weak
__int64 gEnv; // weak
int initialized; // weak
int was_init_0; // weak
int maxSections; // weak
__int64 the_secs; // weak
__int64 (__fastcall *stUserMathErr)(_QWORD); // weak
void *key_dtor_list; // idb
int _mingwthr_cs_init; // weak
struct _RTL_CRITICAL_SECTION _mingwthr_cs; // idb
__gthread_once_t once_0; // idb
pointer emutls_size; // idb
__gthread_key_t emutls_key; // idb
__gthread_mutex_t emutls_mutex; // idb
__int64 p5s; // weak
_UNKNOWN private_mem; // weak
_QWORD freelist[1]; // weak
__int64 qword_140027C28; // weak
int dtoa_CS_init; // weak
struct _RTL_CRITICAL_SECTION dtoa_CritSec; // idb
struct _RTL_CRITICAL_SECTION CriticalSection; // idb
void *pthread_key_dest; // idb
int dummy_concurrency_level; // weak
__int64 once_obj; // weak
int print_state; // weak
PVOID SetThreadName_VEH_handle; // idb
__int64 idListNextId; // weak
__int64 idListMax; // weak
__int64 idListCnt; // weak
void *idList; // idb
__int64 pthr_last; // weak
__int64 pthr_root; // weak
int pthread_key_sch; // weak
int pthread_key_max; // weak
int pthread_tls_once; // weak
int pthread_concur; // weak
int pthread_cancelling; // weak
int print_state_0; // weak
FILE *fo; // idb
int print_state_1; // weak
// extern BOOL (__stdcall *CloseHandle)(HANDLE hObject);
// extern HANDLE (__stdcall *CreateEventA)(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName);
// extern HANDLE (__stdcall *CreateSemaphoreA)(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName);
// extern void (__stdcall *DeleteCriticalSection)(LPCRITICAL_SECTION lpCriticalSection);
// extern BOOL (__stdcall *DuplicateHandle)(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions);
// extern void (__stdcall *EnterCriticalSection)(LPCRITICAL_SECTION lpCriticalSection);
// extern HANDLE (__stdcall *GetCurrentProcess)();
// extern DWORD (__stdcall *GetCurrentProcessId)();
// extern HANDLE (__stdcall *GetCurrentThread)();
// extern DWORD (__stdcall *GetCurrentThreadId)();
// extern BOOL (__stdcall *GetHandleInformation)(HANDLE hObject, LPDWORD lpdwFlags);
// extern DWORD (__stdcall *GetLastError)();
// extern FARPROC (__stdcall *GetProcAddress)(HMODULE hModule, LPCSTR lpProcName);
// extern BOOL (__stdcall *GetProcessAffinityMask)(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask);
// extern void (__stdcall *GetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime);
// extern BOOL (__stdcall *GetThreadContext)(HANDLE hThread, LPCONTEXT lpContext);
// extern int (__stdcall *GetThreadPriority)(HANDLE hThread);
// extern ULONGLONG (__stdcall *GetTickCount64)();
// extern void (__stdcall *InitializeCriticalSection)(LPCRITICAL_SECTION lpCriticalSection);
// extern BOOL (__stdcall *IsDebuggerPresent)();
// extern void (__stdcall *LeaveCriticalSection)(LPCRITICAL_SECTION lpCriticalSection);
// extern HMODULE (__stdcall *LoadLibraryA)(LPCSTR lpLibFileName);
// extern HANDLE (__stdcall *OpenProcess)(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);
// extern void (__stdcall *OutputDebugStringA)(LPCSTR lpOutputString);
// extern void (__stdcall *RaiseException)(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, const ULONG_PTR *lpArguments);
// extern BOOL (__stdcall *ReleaseSemaphore)(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);
// extern ULONG (__stdcall *RemoveVectoredExceptionHandler)(PVOID Handle);
// extern BOOL (__stdcall *ResetEvent)(HANDLE hEvent);
// extern DWORD (__stdcall *ResumeThread)(HANDLE hThread);
// extern BOOL (__stdcall *SetEvent)(HANDLE hEvent);
// extern void (__stdcall *SetLastError)(DWORD dwErrCode);
// extern BOOL (__stdcall *SetProcessAffinityMask)(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask);
// extern BOOL (__stdcall *SetThreadContext)(HANDLE hThread, const CONTEXT *lpContext);
// extern BOOL (__stdcall *SetThreadPriority)(HANDLE hThread, int nPriority);
// extern LPTOP_LEVEL_EXCEPTION_FILTER (__stdcall *SetUnhandledExceptionFilter)(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
// extern void (__stdcall *Sleep)(DWORD dwMilliseconds);
// extern DWORD (__stdcall *SuspendThread)(HANDLE hThread);
// extern DWORD (__stdcall *TlsAlloc)();
// extern LPVOID (__stdcall *TlsGetValue)(DWORD dwTlsIndex);
// extern BOOL (__stdcall *TlsSetValue)(DWORD dwTlsIndex, LPVOID lpTlsValue);
// extern BOOL (__stdcall *TryEnterCriticalSection)(LPCRITICAL_SECTION lpCriticalSection);
// extern LPVOID (__stdcall *VirtualAlloc)(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
// extern BOOL (__stdcall *VirtualFree)(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType);
// extern BOOL (__stdcall *VirtualProtect)(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
// extern SIZE_T (__stdcall *VirtualQuery)(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);
// extern DWORD (__stdcall *WaitForMultipleObjects)(DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds);
// extern DWORD (__stdcall *WaitForSingleObject)(HANDLE hHandle, DWORD dwMilliseconds);
// extern char *(__cdecl *_ultoa)(unsigned int Value, char *Buffer, int Radix);
// extern void (__cdecl __noreturn *longjmp)(jmp_buf Buf, int Value);
// extern uintptr_t (__cdecl *_beginthreadex)(void *Security, unsigned int StackSize, _beginthreadex_proc_type StartAddress, void *ArgList, unsigned int InitFlag, unsigned int *ThrdAddr);
// extern void (__cdecl *_endthreadex)(unsigned int ReturnCode);
// extern int *(__cdecl *_errno)();
// extern FILE *(__cdecl *__acrt_iob_func)(unsigned int Ix);
// extern int (__cdecl *_fileno)(FILE *Stream);
// extern int (__cdecl *_setmode)(int FileHandle, int Mode);
__int64 (__fastcall *_xl_f)() = &_dyn_tls_pthread; // weak
//----- (0000000140001010) ----------------------------------------------------
__int64 pre_c_init()
{
BOOL v0; // ecx
char *v1; // rax
__int16 v3; // dx
v0 = 0;
*(_DWORD *)refptr___mingw_initltsdrot_force = 1;
*(_DWORD *)refptr___mingw_initltsdyn_force = 1;
*(_DWORD *)refptr___mingw_initltssuo_force = 1;
if ( *(_WORD *)refptr___image_base__ == 23117 )
{
v1 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v1 == 17744 )
{
v3 = *((_WORD *)v1 + 12);
if ( v3 == 267 )
{
if ( *((_DWORD *)v1 + 29) > 0xEu )
v0 = *((_DWORD *)v1 + 58) != 0;
}
else if ( v3 == 523 && *((_DWORD *)v1 + 33) > 0xEu )
{
v0 = *((_DWORD *)v1 + 62) != 0;
}
}
}
managedapp = v0;
if ( *(_DWORD *)refptr___mingw_app_type )
_set_app_type(_crt_gui_app);
else
_set_app_type(_crt_console_app);
*_p__fmode() = *refptr__fmode;
*_p__commode() = *refptr__commode;
setargv();
if ( *(_DWORD *)refptr__MINGW_INSTALL_DEBUG_MATHERR == 1 )
_mingw_setusermatherr((_UserMathErrorFunctionPointer)refptr__matherr);
return 0;
}
// 140001010: using guessed type __int64 pre_c_init();
// 140022500: using guessed type _UNKNOWN *refptr__MINGW_INSTALL_DEBUG_MATHERR;
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
// 1400225C0: using guessed type _UNKNOWN *refptr___mingw_app_type;
// 1400225D0: using guessed type _UNKNOWN *refptr___mingw_initltsdrot_force;
// 1400225E0: using guessed type _UNKNOWN *refptr___mingw_initltsdyn_force;
// 1400225F0: using guessed type _UNKNOWN *refptr___mingw_initltssuo_force;
// 140022690: using guessed type int *refptr__commode;
// 1400226B0: using guessed type int *refptr__fmode;
// 1400226D0: using guessed type __int64 (__fastcall *refptr__matherr)();
// 14002700C: using guessed type int managedapp;
//----- (0000000140001130) ----------------------------------------------------
__int64 pre_cpp_init()
{
startinfo = *(_DWORD *)refptr__newmode;
return _getmainargs(&argc, &argv, &envp, *(_DWORD *)refptr__dowildcard, &startinfo);
}
// 140001130: using guessed type __int64 pre_cpp_init();
// 1400226A0: using guessed type _UNKNOWN *refptr__dowildcard;
// 1400226E0: using guessed type _UNKNOWN *refptr__newmode;
// 140027004: using guessed type int startinfo;
//----- (0000000140001180) ----------------------------------------------------
int _tmainCRTStartup()
{
PVOID StackBase; // rsi
signed __int64 v1; // rax
_DWORD *v2; // rsi
int v3; // edi
int v4; // ebx
size_t v5; // rdi
char **v6; // rax
char **v7; // rbp
char **v8; // r12
size_t v9; // rdi
unsigned __int64 v10; // rbx
size_t v11; // rsi
char *v12; // rax
char *v13; // rdx
char **v14; // rdi
const char **v15; // r8
int v16; // ecx
int result; // eax
StackBase = NtCurrentTeb()->NtTib.StackBase;
while ( 1 )
{
v1 = _InterlockedCompareExchange64(
(volatile signed __int64 *)refptr___native_startup_lock,
(signed __int64)StackBase,
0);
if ( !v1 )
{
v2 = refptr___native_startup_state;
v3 = 0;
if ( *(_DWORD *)refptr___native_startup_state == 1 )
goto LABEL_20;
goto LABEL_6;
}
if ( StackBase == (PVOID)v1 )
break;
Sleep(0x3E8u);
}
v2 = refptr___native_startup_state;
v3 = 1;
if ( *(_DWORD *)refptr___native_startup_state == 1 )
{
LABEL_20:
amsg_exit(31);
if ( *v2 == 1 )
goto LABEL_21;
LABEL_9:
if ( v3 )
goto LABEL_10;
goto LABEL_22;
}
LABEL_6:
if ( *v2 )
{
has_cctor = 1;
}
else
{
*v2 = 1;
initterm(refptr___xi_a, refptr___xi_z);
}
if ( *v2 != 1 )
goto LABEL_9;
LABEL_21:
initterm(refptr___xc_a, refptr___xc_z);
*v2 = 2;
if ( v3 )
goto LABEL_10;
LABEL_22:
_InterlockedExchange64((volatile __int64 *)refptr___native_startup_lock, 0);
LABEL_10:
if ( *refptr___dyn_tls_init_callback )
((void (__fastcall *)(_QWORD, __int64, _QWORD))*refptr___dyn_tls_init_callback)(0, 2, 0);
pei386_runtime_relocator();
*refptr___mingw_oldexcpt_handler = (__int64)SetUnhandledExceptionFilter(refptr__gnu_exception_handler);
set_invalid_parameter_handler_0(_mingw_invalidParameterHandler);
fpreset();
v4 = argc;
v5 = 8LL * (argc + 1);
v6 = (char **)malloc_0(v5);
v7 = argv;
v8 = v6;
if ( v4 <= 0 )
{
v14 = v6;
}
else
{
v9 = v5 - 8;
v10 = 0;
do
{
v11 = strlen(v7[v10 / 8]) + 1;
v12 = (char *)malloc_0(v11);
v8[v10 / 8] = v12;
v13 = v7[v10 / 8];
v10 += 8LL;
memcpy_0(v12, v13, v11);
}
while ( v9 != v10 );
v14 = (char **)((char *)v8 + v9);
}
*v14 = 0;
argv = v8;
_main();
v15 = (const char **)envp;
v16 = argc;
*(_QWORD *)*refptr___imp___initenv = envp;
result = main(v16, (const char **)argv, v15);
mainret = result;
if ( !managedapp )
exit_0(result);
if ( !has_cctor )
{
cexit_0();
return mainret;
}
return result;
}
// 140022540: using guessed type __int64 (__fastcall **refptr___dyn_tls_init_callback)();
// 140022580: using guessed type _UNKNOWN **refptr___imp___initenv;
// 140022610: using guessed type __int64 *refptr___mingw_oldexcpt_handler;
// 140022620: using guessed type _UNKNOWN *refptr___native_startup_lock;
// 140022630: using guessed type _UNKNOWN *refptr___native_startup_state;
// 140027008: using guessed type int has_cctor;
// 14002700C: using guessed type int managedapp;
// 140027010: using guessed type int mainret;
//----- (00000001400013D0) ----------------------------------------------------
int WinMainCRTStartup()
{
*(_DWORD *)refptr___mingw_app_type = 1;
return _tmainCRTStartup();
}
// 1400225C0: using guessed type _UNKNOWN *refptr___mingw_app_type;
//----- (00000001400013F0) ----------------------------------------------------
int mainCRTStartup()
{
*(_DWORD *)refptr___mingw_app_type = 0;
return _tmainCRTStartup();
}
// 1400225C0: using guessed type _UNKNOWN *refptr___mingw_app_type;
//----- (0000000140001410) ----------------------------------------------------
int __cdecl atexit(void (__cdecl *a1)())
{
return -(onexit((_onexit_t)a1) == 0);
}
//----- (0000000140001430) ----------------------------------------------------
int _gcc_register_frame()
{
return atexit((void (__cdecl *)())_gcc_deregister_frame);
}
// 140001440: using guessed type __int64 __fastcall _gcc_deregister_frame();
//----- (0000000140001450) ----------------------------------------------------
__int64 __fastcall nimFrame(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (00000001400014E0) ----------------------------------------------------
_QWORD **popFrame()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140001507) ----------------------------------------------------
__int64 __fastcall minuspercent___system_u813(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
void *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+58h] [rbp-8h]
v4 = &unk_140020080;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 0;
v7 = 0;
nimFrame((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 368;
v8 = a1 - a2;
popFrame();
return v8;
}
//----- (0000000140001580) ----------------------------------------------------
void *nimErrorFlag()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (00000001400015A5) ----------------------------------------------------
__int64 __fastcall nimDecRefIsLastCyclicDyn(__int64 *a1)
{
_BYTE v2[8]; // [rsp+30h] [rbp-50h] BYREF
const char *v3; // [rsp+38h] [rbp-48h]
__int64 v4; // [rsp+40h] [rbp-40h]
const char *v5; // [rsp+48h] [rbp-38h]
__int16 v6; // [rsp+50h] [rbp-30h]
_QWORD *v7; // [rsp+60h] [rbp-20h]
_QWORD *v8; // [rsp+68h] [rbp-18h]
void *v9; // [rsp+70h] [rbp-10h]
unsigned __int8 v10; // [rsp+7Fh] [rbp-1h]
v3 = "nimDecRefIsLastCyclicDyn";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v4 = 0;
v6 = 0;
nimFrame((__int64)v2);
v9 = nimErrorFlag();
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v10 = 0;
v4 = 513;
if ( a1 )
{
v4 = 58;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v8 = 0;
v8 = (_QWORD *)minuspercent___system_u813((__int64)a1, 16);
v7 = v8;
v4 = 515;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( *v8 <= 0xFu )
{
v4 = 516;
v10 = 1;
LABEL_7:
v4 = 521;
rememberCycle__system_u3495(v10, v7, *a1);
goto LABEL_8;
}
v4 = 519;
if ( !__OFSUB__(*v7, 16) )
{
*v7 -= 16LL;
goto LABEL_7;
}
raiseOverflow();
}
LABEL_8:
popFrame();
return v10;
}
//----- (0000000140001707) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u5217(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (00000001400017E1) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u56(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u5217(a1);
return *v2;
}
//----- (0000000140001816) ----------------------------------------------------
_QWORD **__fastcall add__system_u2978(__int64 *a1, __int64 a2, __int64 a3)
{
bool v3; // dl
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+58h] [rbp-18h]
__int64 v11; // [rsp+60h] [rbp-10h]
__int64 v12; // [rsp+68h] [rbp-8h]
v6 = "add";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v7 = 0;
v9 = 0;
nimFrame((__int64)v5);
v7 = 28;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
if ( a1[1] <= *a1 )
{
v7 = 29;
resize__system_u2986((__int64)a1);
}
v7 = 30;
v12 = a2;
v11 = a3;
*(_QWORD *)(a1[2] + 16 * *a1) = a2;
*(_QWORD *)(a1[2] + 16 * *a1 + 8) = v11;
v7 = 31;
v3 = __OFADD__(1, *a1);
v10 = *a1 + 1;
if ( v3 )
raiseOverflow();
else
*a1 = v10;
return popFrame();
}
//----- (000000014000193C) ----------------------------------------------------
_QWORD **__fastcall nimTraceRefDyn(__int64 **a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 *v8; // [rsp+50h] [rbp-10h]
__int64 **v9; // [rsp+58h] [rbp-8h]
v4 = "nimTraceRefDyn";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v5 = 0;
v7 = 0;
nimFrame((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v9 = a1;
v5 = 137;
if ( *a1 )
{
v8 = a2;
v5 = 139;
add__system_u2978(a2, (__int64)v9, **v9);
}
return popFrame();
}
//----- (00000001400019EF) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u5229(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (0000000140001A2E) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u4744(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (0000000140001B08) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u60(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u4744(a1);
return *v2;
}
//----- (0000000140001B3D) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u4756(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (0000000140001B7C) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u4813(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (0000000140001C56) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u62(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u4813(a1);
return *v2;
}
//----- (0000000140001C8B) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u4825(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (0000000140001CCA) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u4903(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (0000000140001DA4) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u64(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u4903(a1);
return *v2;
}
//----- (0000000140001DD9) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u4915(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (0000000140001E18) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u5283(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (0000000140001EF2) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u66(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u5283(a1);
return *v2;
}
//----- (0000000140001F27) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u5295(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (0000000140001F66) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___system_u9056(__int64 a1)
{
__int64 v1; // rdx
_QWORD **result; // rax
_QWORD v3[3]; // [rsp+20h] [rbp-20h] BYREF
unsigned __int8 v4; // [rsp+3Eh] [rbp-2h]
char IsLastCyclicDyn; // [rsp+3Fh] [rbp-1h]
IsLastCyclicDyn = 0;
IsLastCyclicDyn = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 8));
if ( IsLastCyclicDyn == 1 )
nimDestroyAndDispose(*(_QWORD ***)(a1 + 8));
if ( *(_QWORD *)(a1 + 32) && (**(_QWORD **)(a1 + 32) & 0x4000000000000000LL) == 0 )
deallocShared(*(signed __int64 **)(a1 + 32));
v1 = *(_QWORD *)(a1 + 48);
v3[0] = *(_QWORD *)(a1 + 40);
v3[1] = v1;
eqdestroy___stdZassertions_u74((__int64)v3);
v4 = 0;
v4 = nimDecRefIsLastCyclicDyn(*(__int64 **)(a1 + 56));
result = (_QWORD **)(v4 ^ 1u);
if ( v4 == 1 )
return nimDestroyAndDispose(*(_QWORD ***)(a1 + 56));
return result;
}
//----- (0000000140002040) ----------------------------------------------------
__int64 __fastcall rttiDestroy__systemZexceptions_u68(__int64 a1)
{
unsigned __int8 *v2; // [rsp+28h] [rbp-8h]
v2 = (unsigned __int8 *)nimErrorFlag();
eqdestroy___system_u9056(a1);
return *v2;
}
//----- (0000000140002075) ----------------------------------------------------
_QWORD **__fastcall eqtrace___system_u9068(__int64 a1, __int64 *a2)
{
nimTraceRefDyn((__int64 **)(a1 + 8), a2);
return nimTraceRefDyn((__int64 **)(a1 + 56), a2);
}
//----- (00000001400020C0) ----------------------------------------------------
_QWORD **__fastcall nimAddCharV1(__int64 *a1, char a2, __int64 a3)
{
_QWORD **result; // rax
prepareAdd(a1, 1, a3);
*(_BYTE *)(a1[1] + *a1 + 8) = a2;
if ( __OFADD__(1, *a1) )
return raiseOverflow();
result = (_QWORD **)++*a1;
*(_BYTE *)(a1[1] + *a1 + 8) = 0;
return result;
}
//----- (0000000140002152) ----------------------------------------------------
void *__fastcall nimCopyMem(void *a1, const void *a2, size_t a3)
{
return memcpy_0(a1, a2, a3);
}
//----- (0000000140002190) ----------------------------------------------------
void *__fastcall copyMem__system_u1731(void *a1, const void *a2, size_t a3)
{
return nimCopyMem(a1, a2, a3);
}
//----- (00000001400021C2) ----------------------------------------------------
__int64 __fastcall nimFrame_0(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (0000000140002252) ----------------------------------------------------
_QWORD **popFrame_0()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140002279) ----------------------------------------------------
_QWORD **__fastcall addChars__stdZprivateZdigitsutils_u104(__int64 *a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
__int64 v4; // r8
_BYTE v6[8]; // [rsp+20h] [rbp-40h] BYREF
char *v7; // [rsp+28h] [rbp-38h]
__int64 v8; // [rsp+30h] [rbp-30h]
const char *v9; // [rsp+38h] [rbp-28h]
__int16 v10; // [rsp+40h] [rbp-20h]
__int64 v11; // [rsp+50h] [rbp-10h]
__int64 v12; // [rsp+58h] [rbp-8h]
v7 = "addChars";
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v8 = 0;
v10 = 0;
nimFrame_0((__int64)v6);
v8 = 44;
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v12 = *a1;
v8 = 45;
v11 = v12 + a4;
if ( __OFADD__(v12, a4) )
{
raiseOverflow();
}
else if ( v11 >= 0 )
{
setLengthStrV2(a1, v11, v4);
v8 = 53;
if ( v12 >= 0 && v12 < *a1 )
{
if ( a3 <= 0x17 )
{
if ( a4 >= 0 )
copyMem__system_u1731((void *)(a1[1] + v12 + 8), (const void *)(a2 + a3), a4);
else
raiseRangeErrorI(a4, 0, 0x7FFFFFFFFFFFFFFFLL);
}
else
{
raiseIndexError2(a3, 23);
}
}
else
{
raiseIndexError2(v12, *a1 - 1);
}
}
else
{
raiseRangeErrorI(v11, 0, 0x7FFFFFFFFFFFFFFFLL);
}
return popFrame_0();
}
// 140002350: variable 'v4' is possibly undefined
//----- (0000000140002404) ----------------------------------------------------
void *nimErrorFlag_0()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (0000000140002429) ----------------------------------------------------
_QWORD **__fastcall addIntImpl__stdZprivateZdigitsutils_u61(__int64 *a1, unsigned __int64 a2)
{
unsigned __int64 v3; // [rsp+30h] [rbp-B0h]
unsigned __int64 v4; // [rsp+40h] [rbp-A0h]
__int64 v5; // [rsp+48h] [rbp-98h]
_BYTE v6[8]; // [rsp+50h] [rbp-90h] BYREF
const char *v7; // [rsp+58h] [rbp-88h]
__int64 v8; // [rsp+60h] [rbp-80h]
const char *v9; // [rsp+68h] [rbp-78h]
__int16 v10; // [rsp+70h] [rbp-70h]
__int64 v11; // [rsp+88h] [rbp-58h]
_BYTE v12[32]; // [rsp+90h] [rbp-50h] BYREF
unsigned __int64 v13; // [rsp+B0h] [rbp-30h]
unsigned __int16 v14; // [rsp+BEh] [rbp-22h]
unsigned __int64 v15; // [rsp+C0h] [rbp-20h]
void *v16; // [rsp+C8h] [rbp-18h]
unsigned __int64 v17; // [rsp+D0h] [rbp-10h]
unsigned __int64 v18; // [rsp+D8h] [rbp-8h]
v7 = "addIntImpl";
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v8 = 0;
v10 = 0;
nimFrame_0((__int64)v6);
v16 = nimErrorFlag_0();
v18 = a2;
v17 = 23;
v8 = 64;
while ( v18 > 0x63 )
{
v15 = v18;
v18 /= 0x64u;
v8 = 67;
if ( 2 * (v15 - 100 * v18) > 0x7FFF )
{
raiseRangeErrorNoArgs();
return popFrame_0();
}
v14 = 2 * (v15 - 100 * v18);
v8 = 68;
if ( v17 > 0x17 )
goto LABEL_24;
v5 = (__int16)v14 + 1LL;
if ( v5 < -32768 || v5 > 0x7FFF )
goto LABEL_36;
if ( (unsigned __int16)v5 > 0xC7u )
{
raiseIndexError2((__int16)v5, 199);
return popFrame_0();
}
v12[v17] = digits100__stdZprivateZdigitsutils_u2[(__int16)v5];
v8 = 69;
v4 = v17 - 1;
if ( __OFSUB__(v17, 1) )
goto LABEL_36;
if ( v4 > 0x17 )
{
raiseIndexError2(v4, 23);
return popFrame_0();
}
if ( v14 > 0xC7u )
{
raiseIndexError2((__int16)v14, 199);
return popFrame_0();
}
v12[v4] = digits100__stdZprivateZdigitsutils_u2[(__int16)v14];
v8 = 70;
if ( __OFSUB__(v17, 2) )
goto LABEL_36;
v17 -= 2LL;
}
v8 = 73;
if ( v18 <= 9 )
{
v8 = 74;
if ( v17 <= 0x17 )
{
v12[v17] = v18 + 48;
goto LABEL_35;
}
LABEL_24:
raiseIndexError2(v17, 23);
return popFrame_0();
}
v13 = 2 * v18;
v8 = 77;
if ( v17 > 0x17 )
goto LABEL_24;
if ( v13 + 1 <= 0xC7 )
{
v12[v17] = digits100__stdZprivateZdigitsutils_u2[v13 + 1];
v8 = 78;
v3 = v17 - 1;
if ( !__OFSUB__(v17, 1) )
{
if ( v3 > 0x17 )
{
raiseIndexError2(v3, 23);
return popFrame_0();
}
if ( v13 > 0xC7 )
{
raiseIndexError2(v13, 199);
return popFrame_0();
}
v12[v3] = digits100__stdZprivateZdigitsutils_u2[v13];
v8 = 79;
if ( !__OFSUB__(v17, 1) )
{
--v17;
LABEL_35:
v8 = 80;
v11 = 24 - v17;
if ( !__OFSUB__(24, v17) )
{
addChars__stdZprivateZdigitsutils_u104(a1, (__int64)v12, v17, v11);
return popFrame_0();
}
}
}
LABEL_36:
raiseOverflow();
return popFrame_0();
}
raiseIndexError2(v13 + 1, 199);
return popFrame_0();
}
//----- (0000000140002911) ----------------------------------------------------
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u184(__int64 *a1, unsigned __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
void *v8; // [rsp+58h] [rbp-8h]
v4 = "addInt";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v5 = 0;
v7 = 0;
nimFrame_0((__int64)v3);
v8 = nimErrorFlag_0();
v5 = 88;
addIntImpl__stdZprivateZdigitsutils_u61(a1, a2);
return popFrame_0();
}
//----- (000000014000298B) ----------------------------------------------------
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u187(__int64 *a1, __int64 a2)
{
__int64 v2; // r8
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
unsigned __int64 v9; // [rsp+58h] [rbp-8h]
v5 = "addInt";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v6 = 0;
v8 = 0;
nimFrame_0((__int64)v4);
v9 = 0;
v6 = 100;
if ( a2 >= 0 )
{
v6 = 107;
v9 = a2;
}
else
{
v6 = 101;
if ( a2 == 0x8000000000000000uLL )
{
v6 = 102;
v9 = 0x8000000000000000uLL;
}
else
{
v6 = 104;
v9 = -a2;
}
v6 = 105;
nimAddCharV1(a1, 45, v2);
}
v6 = 113;
addInt__stdZprivateZdigitsutils_u184(a1, v9);
return popFrame_0();
}
// 140002A4B: variable 'v2' is possibly undefined
//----- (0000000140002A90) ----------------------------------------------------
__int64 __fastcall nimFrame_1(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (0000000140002B20) ----------------------------------------------------
_QWORD **popFrame_1()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140002B47) ----------------------------------------------------
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u204(__int64 *a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "addInt";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v5 = 0;
v7 = 0;
nimFrame_1((__int64)v3);
v5 = 116;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
addInt__stdZprivateZdigitsutils_u187(a1, a2);
return popFrame_1();
}
//----- (0000000140002BB6) ----------------------------------------------------
_QWORD *__fastcall dollar___systemZdollars_u14(_QWORD *a1, __int64 a2)
{
void *v2; // rdx
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h] BYREF
void *v10; // [rsp+58h] [rbp-8h]
v5 = "$";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\dollars.nim";
v6 = 0;
v8 = 0;
nimFrame_1((__int64)v4);
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\dollars.nim";
v9 = 0;
v10 = &TM__n49a9aYp5BrbXv9a6OCpJYm0g_2;
v6 = 21;
addInt__stdZprivateZdigitsutils_u204(&v9, a2);
popFrame_1();
v2 = v10;
*a1 = v9;
a1[1] = v2;
return a1;
}
//----- (0000000140002C56) ----------------------------------------------------
_QWORD *__fastcall dollar___systemZdollars_u34(_QWORD *a1, __int64 a2)
{
void *v2; // rdx
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h] BYREF
void *v10; // [rsp+58h] [rbp-8h]
v5 = "$";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\dollars.nim";
v6 = 0;
v8 = 0;
nimFrame_1((__int64)v4);
v9 = 0;
v10 = &TM__n49a9aYp5BrbXv9a6OCpJYm0g_2;
v6 = 21;
addInt__stdZprivateZdigitsutils_u187(&v9, a2);
popFrame_1();
v2 = v10;
*a1 = v9;
a1[1] = v2;
return a1;
}
//----- (0000000140002CF0) ----------------------------------------------------
void __fastcall initLock__coreZlocks_u7(struct _RTL_CRITICAL_SECTION *a1)
{
InitializeCriticalSection(a1);
}
//----- (0000000140002D13) ----------------------------------------------------
void *nimErrorFlag_1()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (0000000140002D38) ----------------------------------------------------
void __fastcall acquire__coreZlocks_u14(struct _RTL_CRITICAL_SECTION *a1)
{
EnterCriticalSection(a1);
}
//----- (0000000140002D5B) ----------------------------------------------------
void *__fastcall nimSetMem__systemZmemory_u7(void *a1, int a2, size_t a3)
{
return memset(a1, a2, a3);
}
//----- (0000000140002D97) ----------------------------------------------------
__int64 __fastcall nimZeroMem(void *a1, size_t a2)
{
unsigned __int8 *v3; // [rsp+28h] [rbp-8h]
v3 = (unsigned __int8 *)nimErrorFlag_1();
nimSetMem__systemZmemory_u7(a1, 0, a2);
return *v3;
}
//----- (0000000140002DDC) ----------------------------------------------------
__int64 __fastcall nimFrame_2(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (0000000140002E6C) ----------------------------------------------------
_QWORD **popFrame_2()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140002E93) ----------------------------------------------------
__int64 __fastcall minuspercent___system_u813_0(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
void *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+58h] [rbp-8h]
v4 = &unk_1400204E0;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 0;
v7 = 0;
nimFrame_2((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 368;
v8 = a1 - a2;
popFrame_2();
return v8;
}
//----- (0000000140002F0C) ----------------------------------------------------
_QWORD **__fastcall nimIncRefCyclic(__int64 a1)
{
bool v1; // dl
char v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8; // [rsp+58h] [rbp-18h]
__int64 *v9; // [rsp+60h] [rbp-10h]
__int64 *v10; // [rsp+68h] [rbp-8h]
v4 = "nimIncRefCyclic";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v5 = 0;
v7 = 0;
nimFrame_2((__int64)v3);
v5 = 58;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v10 = 0;
v10 = (__int64 *)minuspercent___system_u813_0(a1, 16);
v9 = v10;
v5 = 46;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v1 = __OFADD__(16, *v10);
v8 = *v10 + 16;
if ( v1 )
raiseOverflow();
else
*v9 = v8;
return popFrame_2();
}
//----- (0000000140002FF4) ----------------------------------------------------
__int64 __fastcall nimDecRefIsLastCyclicDyn_0(__int64 *a1)
{
_BYTE v2[8]; // [rsp+30h] [rbp-50h] BYREF
const char *v3; // [rsp+38h] [rbp-48h]
__int64 v4; // [rsp+40h] [rbp-40h]
const char *v5; // [rsp+48h] [rbp-38h]
__int16 v6; // [rsp+50h] [rbp-30h]
_QWORD *v7; // [rsp+60h] [rbp-20h]
_QWORD *v8; // [rsp+68h] [rbp-18h]
void *v9; // [rsp+70h] [rbp-10h]
unsigned __int8 v10; // [rsp+7Fh] [rbp-1h]
v3 = "nimDecRefIsLastCyclicDyn";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v4 = 0;
v6 = 0;
nimFrame_2((__int64)v2);
v9 = nimErrorFlag_1();
v10 = 0;
v4 = 513;
if ( a1 )
{
v4 = 58;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v8 = 0;
v8 = (_QWORD *)minuspercent___system_u813_0((__int64)a1, 16);
v7 = v8;
v4 = 515;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( *v8 <= 0xFu )
{
v4 = 516;
v10 = 1;
LABEL_7:
v4 = 521;
rememberCycle__system_u3495(v10, v7, *a1);
goto LABEL_8;
}
v4 = 519;
if ( !__OFSUB__(*v7, 16) )
{
*v7 -= 16LL;
goto LABEL_7;
}
raiseOverflow();
}
LABEL_8:
popFrame_2();
return v10;
}
//----- (000000014000314B) ----------------------------------------------------
unsigned __int64 __fastcall eqcopy___stdZexitprocs_u97(__int64 *a1, __int64 a2)
{
unsigned __int64 result; // rax
__int64 v4; // [rsp+0h] [rbp-50h] BYREF
__int64 v5; // [rsp+20h] [rbp-30h]
__int64 v6; // [rsp+28h] [rbp-28h]
__int64 *v7; // [rsp+30h] [rbp-20h]
unsigned __int8 v8; // [rsp+46h] [rbp-Ah]
char IsLastCyclicDyn_0; // [rsp+47h] [rbp-9h]
__int64 *v10; // [rsp+48h] [rbp-8h]
nimZeroMem(&v4 + 4, 0x18u);
v5 = *a1;
v6 = a1[1];
v7 = (__int64 *)a1[2];
nimZeroMem(a1, 0x18u);
*(_BYTE *)a1 = *(_BYTE *)a2;
if ( *(_BYTE *)a1 )
{
a1[1] = 0;
a1[1] = *(_QWORD *)(a2 + 8);
}
else
{
nimZeroMem(a1 + 1, 0x10u);
v10 = (__int64 *)a1[2];
if ( *(_QWORD *)(a2 + 16) )
nimIncRefCyclic(*(_QWORD *)(a2 + 16));
a1[2] = *(_QWORD *)(a2 + 16);
a1[1] = *(_QWORD *)(a2 + 8);
IsLastCyclicDyn_0 = 0;
IsLastCyclicDyn_0 = nimDecRefIsLastCyclicDyn_0(v10);
if ( IsLastCyclicDyn_0 == 1 )
nimDestroyAndDispose((_QWORD **)v10);
}
result = (unsigned __int8)v5;
if ( !(_BYTE)v5 )
{
v8 = 0;
v8 = nimDecRefIsLastCyclicDyn_0(v7);
result = v8 ^ 1u;
if ( v8 == 1 )
return (unsigned __int64)nimDestroyAndDispose((_QWORD **)v7);
}
return result;
}
//----- (000000014000329B) ----------------------------------------------------
__int64 *__fastcall dollar___stdZexitprocs_u6(__int64 *a1, char a2)
{
__int64 v3; // [rsp+0h] [rbp-10h]
void *v4; // [rsp+8h] [rbp-8h]
if ( a2 )
{
if ( a2 == 1 )
{
v3 = 7;
v4 = &TM__JXL39bfraktrl3ZkJ5EQGjw_9;
}
else
{
v3 = 0;
v4 = &TM__JXL39bfraktrl3ZkJ5EQGjw_11;
}
}
else
{
v3 = 8;
v4 = &TM__JXL39bfraktrl3ZkJ5EQGjw_7;
}
*a1 = v3;
a1[1] = (__int64)v4;
return a1;
}
//----- (0000000140003316) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___stdZexitprocs_u94(__int64 **a1)
{
_QWORD **result; // rax
result = (_QWORD **)*(unsigned __int8 *)a1;
if ( !*(_BYTE *)a1 )
{
result = (_QWORD **)((unsigned __int8)nimDecRefIsLastCyclicDyn_0(a1[2]) ^ 1u);
if ( !(_BYTE)result )
return nimDestroyAndDispose((_QWORD **)a1[2]);
}
return result;
}
//----- (0000000140003372) ----------------------------------------------------
__int64 __fastcall eqwasMoved___stdZexitprocs_u91(_BYTE *a1)
{
*a1 = 0;
if ( !*a1 )
return nimZeroMem(a1 + 8, 0x10u);
*((_QWORD *)a1 + 1) = 0;
return (__int64)a1;
}
//----- (00000001400033C1) ----------------------------------------------------
void __fastcall release__coreZlocks_u16(struct _RTL_CRITICAL_SECTION *a1)
{
LeaveCriticalSection(a1);
}
//----- (00000001400033E4) ----------------------------------------------------
void __fastcall callClosures__stdZexitprocs_u19()
{
_QWORD *v0; // rax
__int64 v1[2]; // [rsp+20h] [rbp-60h] BYREF
__int64 v2[2]; // [rsp+30h] [rbp-50h] BYREF
_QWORD v3[5]; // [rsp+40h] [rbp-40h] BYREF
__int64 v4; // [rsp+68h] [rbp-18h]
__int64 *v5; // [rsp+70h] [rbp-10h] BYREF
void (*v6)(void); // [rsp+78h] [rbp-8h]
__int64 v7; // [rsp+80h] [rbp+0h]
__int64 v8; // [rsp+88h] [rbp+8h]
_BYTE v9[8]; // [rsp+90h] [rbp+10h] BYREF
const char *v10; // [rsp+98h] [rbp+18h]
__int64 v11; // [rsp+A0h] [rbp+20h]
const char *v12; // [rsp+A8h] [rbp+28h]
__int16 v13; // [rsp+B0h] [rbp+30h]
__int64 v14[2]; // [rsp+D0h] [rbp+50h] BYREF
char v15; // [rsp+E7h] [rbp+67h]
__int64 v16; // [rsp+E8h] [rbp+68h]
__int64 v17; // [rsp+F0h] [rbp+70h]
__int64 v18; // [rsp+F8h] [rbp+78h]
char *v19; // [rsp+100h] [rbp+80h]
__int64 v20; // [rsp+108h] [rbp+88h]
v10 = "callClosures";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v11 = 0;
v13 = 0;
nimFrame_2((__int64)v9);
v19 = (char *)nimErrorFlag_1();
v11 = 83;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\core\\locks.nim";
acquire__coreZlocks_u14(&gFunsLock__stdZexitprocs_u14);
if ( !*v19 )
{
v18 = 0;
v17 = 0;
v11 = 45;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v16 = gFuns__stdZexitprocs_u15;
v8 = gFuns__stdZexitprocs_u15 - 1;
if ( __OFSUB__(gFuns__stdZexitprocs_u15, 1) )
{
raiseOverflow();
}
else
{
v17 = v8;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v20 = v8;
v11 = 34;
while ( v20 >= 0 )
{
nimZeroMem(&v5, 0x18u);
v18 = v20;
v11 = 934;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
if ( v20 < 0 || v18 >= gFuns__stdZexitprocs_u15 )
{
raiseIndexError2(v18, gFuns__stdZexitprocs_u15 - 1);
goto LABEL_22;
}
v0 = (_QWORD *)(qword_140027048 + 24 * v18);
v3[0] = v0[1];
v3[1] = v0[2];
v3[2] = v0[3];
eqcopy___stdZexitprocs_u97((__int64 *)&v5, (__int64)v3);
v11 = 47;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
if ( (_BYTE)v5 )
{
v11 = 49;
if ( ((unsigned __int8)v5 & 7) != 1 )
{
dollar___stdZexitprocs_u6(v14, (char)v5);
v2[0] = TM__JXL39bfraktrl3ZkJ5EQGjw_15;
v2[1] = (__int64)&TM__JXL39bfraktrl3ZkJ5EQGjw_14;
v1[0] = v14[0];
v1[1] = v14[1];
raiseFieldErrorStr(v2, v1);
goto LABEL_22;
}
v6();
if ( *v19 )
goto LABEL_22;
}
else
{
v11 = 48;
if ( v7 )
((void (__fastcall *)(__int64))v6)(v7);
else
v6();
if ( *v19 )
goto LABEL_22;
}
v11 = 39;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v4 = v20 - 1;
if ( __OFSUB__(v20, 1) )
{
raiseOverflow();
goto LABEL_22;
}
v20 = v4;
v11 = 934;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
eqdestroy___stdZexitprocs_u94(&v5);
}
v11 = 50;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
setLen__stdZexitprocs_u31(&gFuns__stdZexitprocs_u15, 0);
}
LABEL_22:
v15 = *v19;
*v19 = 0;
v11 = 88;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\core\\locks.nim";
release__coreZlocks_u16(&gFunsLock__stdZexitprocs_u14);
if ( !*v19 )
*v19 = v15;
}
popFrame_2();
}
// 1400204D0: using guessed type __int64 TM__JXL39bfraktrl3ZkJ5EQGjw_15;
// 140027040: using guessed type __int64 gFuns__stdZexitprocs_u15;
// 140027048: using guessed type __int64 qword_140027048;
// 140027060: using guessed type struct _RTL_CRITICAL_SECTION gFunsLock__stdZexitprocs_u14;
//----- (000000014000382C) ----------------------------------------------------
_QWORD **__fastcall addExitProc__stdZexitprocs_u184(__int64 *a1)
{
__int64 v1; // rdx
__int64 v3; // [rsp+0h] [rbp-E0h] BYREF
_QWORD v4[4]; // [rsp+20h] [rbp-C0h] BYREF
__int64 v5[2]; // [rsp+40h] [rbp-A0h] BYREF
__int64 v6; // [rsp+50h] [rbp-90h]
__int64 v7; // [rsp+58h] [rbp-88h]
const char *v8; // [rsp+68h] [rbp-78h]
__int64 v9; // [rsp+70h] [rbp-70h]
const char *v10; // [rsp+78h] [rbp-68h]
__int16 v11; // [rsp+80h] [rbp-60h]
_QWORD v12[4]; // [rsp+90h] [rbp-50h] BYREF
__int64 v13; // [rsp+B0h] [rbp-30h] BYREF
__int64 v14; // [rsp+B8h] [rbp-28h]
char v15; // [rsp+CFh] [rbp-11h]
__int64 v16; // [rsp+D0h] [rbp-10h]
char *v17; // [rsp+D8h] [rbp-8h]
v1 = a1[1];
v6 = *a1;
v7 = v1;
v8 = "addExitProc";
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v9 = 0;
v11 = 0;
nimFrame_2((__int64)(&v3 + 12));
v17 = (char *)nimErrorFlag_1();
v9 = 83;
acquire__coreZlocks_u14(&gFunsLock__stdZexitprocs_u14);
if ( !*v17 )
{
nimZeroMem(&v13, 0x10u);
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v9 = 53;
v16 = gFuns__stdZexitprocs_u15;
if ( !gFuns__stdZexitprocs_u15 )
{
v9 = 54;
atexit(callClosures__stdZexitprocs_u19);
}
v9 = 64;
nimZeroMem(v12, 0x18u);
LOBYTE(v12[0]) = 0;
v9 = 38;
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\threadimpl.nim";
v5[0] = v6;
v5[1] = v7;
eqdup___system_u4017(v5, 1, &v13);
v12[2] = v14;
v12[1] = v13;
v9 = 64;
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v4[0] = v12[0];
v4[1] = v13;
v4[2] = v14;
add__stdZexitprocs_u190((__int64)&gFuns__stdZexitprocs_u15, v4);
v15 = *v17;
*v17 = 0;
v9 = 88;
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\core\\locks.nim";
release__coreZlocks_u16(&gFunsLock__stdZexitprocs_u14);
if ( !*v17 )
*v17 = v15;
}
return popFrame_2();
}
// 140027040: using guessed type __int64 gFuns__stdZexitprocs_u15;
// 140027060: using guessed type struct _RTL_CRITICAL_SECTION gFunsLock__stdZexitprocs_u14;
//----- (0000000140003A40) ----------------------------------------------------
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatsexitprocsdotnim_Init000()
{
_BYTE v1[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v2; // [rsp+28h] [rbp-38h]
__int64 v3; // [rsp+30h] [rbp-30h]
const char *v4; // [rsp+38h] [rbp-28h]
__int16 v5; // [rsp+40h] [rbp-20h]
void *v6; // [rsp+58h] [rbp-8h]
v2 = "exitprocs";
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
v3 = 0;
v5 = 0;
nimFrame_2((__int64)v1);
v6 = nimErrorFlag_1();
v3 = 27;
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\exitprocs.nim";
initLock__coreZlocks_u7(&gFunsLock__stdZexitprocs_u14);
nimTestErrorFlag();
return popFrame_2();
}
// 140027060: using guessed type struct _RTL_CRITICAL_SECTION gFunsLock__stdZexitprocs_u14;
//----- (0000000140003AD0) ----------------------------------------------------
__int64 __fastcall nimFrame_3(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (0000000140003B60) ----------------------------------------------------
_QWORD **popFrame_3()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140003B87) ----------------------------------------------------
_QWORD **restoreConsoleOutputCP__stdZsyncio_u657()
{
_BYTE v1[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v2; // [rsp+28h] [rbp-38h]
__int64 v3; // [rsp+30h] [rbp-30h]
const char *v4; // [rsp+38h] [rbp-28h]
__int16 v5; // [rsp+40h] [rbp-20h]
int v6; // [rsp+5Ch] [rbp-4h]
v2 = "restoreConsoleOutputCP";
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\syncio.nim";
v3 = 0;
v5 = 0;
nimFrame_3((__int64)v1);
v6 = 0;
v6 = Dl_520094344_((unsigned int)consoleOutputCP__stdZsyncio_u655);
return popFrame_3();
}
// 1400270C0: invalid function type '?' has been ignored
// 1400270A0: using guessed type int consoleOutputCP__stdZsyncio_u655;
// 1400270C0: using guessed type __int64 (__fastcall *Dl_520094344_)(_QWORD);
//----- (0000000140003BE6) ----------------------------------------------------
void *__fastcall nimSetMem__systemZmemory_u7_0(void *a1, int a2, size_t a3)
{
return memset(a1, a2, a3);
}
//----- (0000000140003C22) ----------------------------------------------------
void *nimErrorFlag_2()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (0000000140003C47) ----------------------------------------------------
__int64 __fastcall nimZeroMem_0(void *a1, size_t a2)
{
unsigned __int8 *v3; // [rsp+28h] [rbp-8h]
v3 = (unsigned __int8 *)nimErrorFlag_2();
nimSetMem__systemZmemory_u7_0(a1, 0, a2);
return *v3;
}
//----- (0000000140003C8C) ----------------------------------------------------
_QWORD **restoreConsoleCP__stdZsyncio_u658()
{
_BYTE v1[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v2; // [rsp+28h] [rbp-38h]
__int64 v3; // [rsp+30h] [rbp-30h]
const char *v4; // [rsp+38h] [rbp-28h]
__int16 v5; // [rsp+40h] [rbp-20h]
int v6; // [rsp+5Ch] [rbp-4h]
v2 = "restoreConsoleCP";
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\syncio.nim";
v3 = 0;
v5 = 0;
nimFrame_3((__int64)v1);
v6 = 0;
v6 = Dl_520094346_((unsigned int)consoleCP__stdZsyncio_u656);
return popFrame_3();
}
// 1400270C8: invalid function type '?' has been ignored
// 1400270B0: using guessed type int consoleCP__stdZsyncio_u656;
// 1400270C8: using guessed type __int64 (__fastcall *Dl_520094346_)(_QWORD);
//----- (0000000140003CEB) ----------------------------------------------------
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_Init000()
{
FILE *v0; // rax
FILE *v1; // rax
FILE *v2; // rax
_QWORD **(*v4)(); // [rsp+20h] [rbp-80h] BYREF
__int64 v5; // [rsp+28h] [rbp-78h]
_BYTE v6[8]; // [rsp+30h] [rbp-70h] BYREF
const char *v7; // [rsp+38h] [rbp-68h]
__int64 v8; // [rsp+40h] [rbp-60h]
const char *v9; // [rsp+48h] [rbp-58h]
__int16 v10; // [rsp+50h] [rbp-50h]
_QWORD v11[2]; // [rsp+60h] [rbp-40h] BYREF
_QWORD v12[2]; // [rsp+70h] [rbp-30h] BYREF
int v13; // [rsp+84h] [rbp-1Ch]
int v14; // [rsp+88h] [rbp-18h]
int v15; // [rsp+8Ch] [rbp-14h]
int v16; // [rsp+90h] [rbp-10h]
int FileHandle; // [rsp+94h] [rbp-Ch]
_BYTE *v18; // [rsp+98h] [rbp-8h]
v7 = "syncio";
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\syncio.nim";
v8 = 0;
v10 = 0;
nimFrame_3((__int64)v6);
v18 = nimErrorFlag_2();
v8 = 829;
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\syncio.nim";
FileHandle = 0;
v0 = __acrt_iob_func(0);
FileHandle = _fileno(v0);
_setmode(FileHandle, 0x8000);
v8 = 830;
v16 = 0;
v1 = __acrt_iob_func(1u);
v16 = _fileno(v1);
_setmode(v16, 0x8000);
v8 = 831;
v15 = 0;
v2 = __acrt_iob_func(2u);
v15 = _fileno(v2);
_setmode(v15, 0x8000);
v8 = 849;
consoleOutputCP__stdZsyncio_u655 = Dl_520094348_();
v8 = 850;
consoleCP__stdZsyncio_u656 = Dl_520094349_();
v8 = 855;
if ( consoleOutputCP__stdZsyncio_u655 == 65001 )
goto LABEL_3;
v8 = 856;
v14 = 0;
v14 = Dl_520094344_(65001);
v8 = 857;
nimZeroMem_0(v12, 0x10u);
v12[0] = restoreConsoleOutputCP__stdZsyncio_u657;
v12[1] = 0;
v4 = restoreConsoleOutputCP__stdZsyncio_u657;
v5 = 0;
addExitProc__stdZexitprocs_u184((__int64 *)&v4);
if ( !*v18 )
{
LABEL_3:
v8 = 859;
if ( consoleCP__stdZsyncio_u656 != 65001 )
{
v8 = 860;
v13 = 0;
v13 = Dl_520094346_(65001);
v8 = 861;
nimZeroMem_0(v11, 0x10u);
v11[0] = restoreConsoleCP__stdZsyncio_u658;
v11[1] = 0;
v4 = restoreConsoleCP__stdZsyncio_u658;
v5 = 0;
addExitProc__stdZexitprocs_u184((__int64 *)&v4);
}
}
nimTestErrorFlag();
return popFrame_3();
}
// 1400270A8: invalid function type '?' has been ignored
// 1400270B8: invalid function type '?' has been ignored
// 1400270A0: using guessed type int consoleOutputCP__stdZsyncio_u655;
// 1400270A8: using guessed type __int64 (*Dl_520094348_)(void);
// 1400270B0: using guessed type int consoleCP__stdZsyncio_u656;
// 1400270B8: using guessed type __int64 (*Dl_520094349_)(void);
// 1400270C0: using guessed type __int64 (__fastcall *Dl_520094344_)(_QWORD);
// 1400270C8: using guessed type __int64 (__fastcall *Dl_520094346_)(_QWORD);
//----- (0000000140003F5A) ----------------------------------------------------
FARPROC atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_DatInit000()
{
FARPROC result; // rax
__int64 v1; // [rsp+20h] [rbp-10h] BYREF
const char *v2; // [rsp+28h] [rbp-8h]
v1 = TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_5;
v2 = "\b";
TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2 = (__int64)nimLoadLibrary(&v1);
if ( !TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2 )
{
v1 = TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_7;
v2 = (const char *)&TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_6;
nimLoadLibraryError(&v1);
}
Dl_520094348_ = nimGetProcAddr((HMODULE)TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "GetConsoleOutputCP");
Dl_520094349_ = nimGetProcAddr((HMODULE)TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "GetConsoleCP");
Dl_520094344_ = (__int64 (__fastcall *)(_QWORD))nimGetProcAddr(
(HMODULE)TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2,
"SetConsoleOutputCP");
result = nimGetProcAddr((HMODULE)TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "SetConsoleCP");
Dl_520094346_ = (__int64 (__fastcall *)(_QWORD))result;
return result;
}
// 140020720: using guessed type __int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_5;
// 140020750: using guessed type __int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_7;
// 1400270A8: using guessed type __int64 (*Dl_520094348_)(void);
// 1400270B8: using guessed type __int64 (*Dl_520094349_)(void);
// 1400270C0: using guessed type __int64 (__fastcall *Dl_520094344_)(_QWORD);
// 1400270C8: using guessed type __int64 (__fastcall *Dl_520094346_)(_QWORD);
// 1400270D0: using guessed type __int64 TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2;
//----- (0000000140004040) ----------------------------------------------------
int fprintf(FILE *const Stream, const char *const Format, ...)
{
va_list va; // [rsp+50h] [rbp+20h] BYREF
va_start(va, Format);
return _mingw_vfprintf(Stream, (char *)Format, (const char **)va);
}
//----- (0000000140004083) ----------------------------------------------------
int printf(const char *const Format, ...)
{
FILE *v1; // rcx
va_list va; // [rsp+58h] [rbp+28h] BYREF
va_start(va, Format);
v1 = __acrt_iob_func(1u);
return _mingw_vfprintf(v1, (char *)Format, (const char **)va);
}
//----- (00000001400040D7) ----------------------------------------------------
void *__fastcall nimToCStringConv(_QWORD *a1)
{
if ( *a1 )
return (void *)(a1[1] + 8LL);
else
return &unk_140021110;
}
//----- (0000000140004122) ----------------------------------------------------
HMODULE __fastcall nimLoadLibrary(__int64 *a1)
{
__int64 v1; // rdx
const CHAR *v2; // rax
_QWORD v4[6]; // [rsp+0h] [rbp-50h] BYREF
__int64 v5; // [rsp+30h] [rbp-20h]
__int64 v6; // [rsp+38h] [rbp-18h]
__int64 v7; // [rsp+48h] [rbp-8h]
v1 = a1[1];
v5 = *a1;
v6 = v1;
v7 = 0;
v4[4] = v5;
v4[5] = v1;
v2 = (const CHAR *)nimToCStringConv(&v4[4]);
return LoadLibraryA(v2);
}
//----- (0000000140004186) ----------------------------------------------------
int __fastcall rawWrite(FILE *a1, const char *a2)
{
size_t ElementCount; // [rsp+38h] [rbp-8h]
ElementCount = strlen(a2);
fwrite(a2, 1u, ElementCount, a1);
return fflush_0(a1);
}
//----- (00000001400041F6) ----------------------------------------------------
void __fastcall __noreturn nimLoadLibraryError(__int64 *a1)
{
__int64 v1; // rdx
FILE *v2; // rax
const char *v3; // rbx
FILE *v4; // rax
FILE *v5; // rax
FILE *v6; // rax
_QWORD v7[2]; // [rsp+20h] [rbp-30h] BYREF
__int64 v8; // [rsp+30h] [rbp-20h]
__int64 v9; // [rsp+38h] [rbp-18h]
DWORD LastError; // [rsp+4Ch] [rbp-4h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v2 = __acrt_iob_func(2u);
rawWrite(v2, "could not load: ");
v7[0] = v8;
v7[1] = v9;
v3 = (const char *)nimToCStringConv(v7);
v4 = __acrt_iob_func(2u);
rawWrite(v4, v3);
LastError = GetLastError();
if ( LastError == 193 )
{
v5 = __acrt_iob_func(2u);
rawWrite(v5, "\n(bad format; library may be wrong architecture)");
}
v6 = __acrt_iob_func(2u);
rawWrite(v6, "\n");
exit_0(1);
}
//----- (00000001400042CE) ----------------------------------------------------
void *__fastcall nimSetMem__systemZmemory_u7_1(void *a1, int a2, size_t a3)
{
return memset(a1, a2, a3);
}
//----- (000000014000430A) ----------------------------------------------------
void *nimErrorFlag_3()
{
return _emutls_get_address(&_emutls_v_nimInErrorMode__system_u4460);
}
//----- (000000014000432F) ----------------------------------------------------
__int64 __fastcall nimZeroMem_1(void *a1, size_t a2)
{
unsigned __int8 *v3; // [rsp+28h] [rbp-8h]
v3 = (unsigned __int8 *)nimErrorFlag_3();
nimSetMem__systemZmemory_u7_1(a1, 0, a2);
return *v3;
}
//----- (0000000140004374) ----------------------------------------------------
void *__fastcall nimCopyMem_0(void *a1, const void *a2, size_t a3)
{
return memcpy_0(a1, a2, a3);
}
//----- (00000001400043B2) ----------------------------------------------------
void *__fastcall copyMem__system_u1731_0(void *a1, const void *a2, size_t a3)
{
return nimCopyMem_0(a1, a2, a3);
}
//----- (00000001400043E4) ----------------------------------------------------
_QWORD **popFrame_4()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(&_emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (000000014000440B) ----------------------------------------------------
_QWORD **__fastcall unregisterCycle__system_u3092(__int64 a1)
{
__int64 v1; // rax
__int64 v2; // rax
_QWORD *address; // rax
__int64 *v4; // rdx
_QWORD *v5; // rcx
__int64 v6; // rax
__int64 v7; // rdx
__int64 *v8; // rax
__int64 v9; // rax
__int64 v10; // rbx
_QWORD v12[6]; // [rsp+0h] [rbp-80h] BYREF
__int64 v13; // [rsp+30h] [rbp-50h]
const char *v14; // [rsp+38h] [rbp-48h]
__int16 v15; // [rsp+40h] [rbp-40h]
__int64 v16; // [rsp+58h] [rbp-28h]
__int64 v17; // [rsp+60h] [rbp-20h]
__int64 v18; // [rsp+68h] [rbp-18h]
__int64 v19; // [rsp+70h] [rbp-10h]
__int64 v20; // [rsp+78h] [rbp-8h]
v12[5] = "unregisterCycle";
v14 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v13 = 0;
v15 = 0;
nimFrame_4((__int64)&v12[4]);
v13 = 146;
v14 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v1 = *(_QWORD *)(a1 + 8);
v19 = v1 - 1;
if ( __OFSUB__(v1, 1) )
goto LABEL_6;
v20 = v19;
v13 = 151;
v2 = *(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091);
v18 = v2 - 1;
if ( __OFSUB__(v2, 1) )
goto LABEL_6;
address = _emutls_get_address(&_emutls_v_roots__system_u3091);
v4 = (__int64 *)(address[2] + 16 * v18);
v5 = (_QWORD *)(16 * v20 + address[2]);
v6 = *v4;
v7 = v4[1];
*v5 = v6;
v5[1] = v7;
v13 = 152;
v17 = v20 + 1;
if ( __OFADD__(1, v20)
|| (v8 = (__int64 *)_emutls_get_address(&_emutls_v_roots__system_u3091),
*(_QWORD *)(*(_QWORD *)(v8[2] + 16 * v20) + 8LL) = v17,
v13 = 153,
v9 = *v8,
v16 = v9 - 1,
__OFSUB__(v9, 1)) )
{
LABEL_6:
raiseOverflow();
}
else
{
v10 = v16;
*(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091) = v10;
v13 = 154;
*(_QWORD *)(a1 + 8) = 0;
}
return popFrame_4();
}
//----- (00000001400045F7) ----------------------------------------------------
__int64 __fastcall roundup__system_u5881(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+58h] [rbp-8h]
v4 = "roundup";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 11;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v8 = (a1 + a2 - 1) & -a2;
popFrame_4();
return v8;
}
//----- (0000000140004676) ----------------------------------------------------
__int64 __fastcall msbit__system_u6016(unsigned int a1)
{
char v2[8]; // [rsp+20h] [rbp-70h] BYREF
const char *v3; // [rsp+28h] [rbp-68h]
__int64 v4; // [rsp+30h] [rbp-60h]
const char *v5; // [rsp+38h] [rbp-58h]
__int16 v6; // [rsp+40h] [rbp-50h]
__int64 v7; // [rsp+50h] [rbp-40h]
__int64 v8; // [rsp+58h] [rbp-38h]
__int64 v9; // [rsp+60h] [rbp-30h]
__int64 v10; // [rsp+68h] [rbp-28h]
__int64 v11; // [rsp+70h] [rbp-20h]
__int64 v12; // [rsp+78h] [rbp-18h]
__int64 v13; // [rsp+80h] [rbp-10h]
__int64 v14; // [rsp+88h] [rbp-8h]
v3 = "msbit";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v11 = 0;
v14 = 0;
v13 = 0;
v4 = 216;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
if ( a1 > 0xFFFF )
{
v8 = 0;
v7 = 0;
v4 = 219;
if ( a1 > 0xFFFFFF )
{
v7 = 24;
v13 = 24;
}
else
{
v8 = 16;
v13 = 16;
}
v12 = v13;
}
else
{
v10 = 0;
v9 = 0;
v4 = 217;
if ( a1 > 0xFF )
{
v9 = 8;
v14 = 8;
}
else
{
v10 = 0;
v14 = 0;
}
v12 = v14;
}
v4 = 220;
v11 = v12 + fsLookupTable__system_u6015[(unsigned __int8)(a1 >> v12)];
popFrame_4();
return v11;
}
//----- (00000001400047C9) ----------------------------------------------------
_QWORD **__fastcall mappingSearch__system_u6041(__int64 *a1, __int64 *a2, _QWORD *a3)
{
__int64 v3; // rax
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+58h] [rbp-18h]
__int64 v11; // [rsp+60h] [rbp-10h]
__int64 v12; // [rsp+68h] [rbp-8h]
v6 = "mappingSearch";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v7 = 235;
v12 = 0;
v12 = msbit__system_u6016(*a1);
v11 = 0;
v11 = roundup__system_u5881(1LL << ((unsigned __int8)v12 - 5), 4096);
v10 = v11 - 1;
v7 = 236;
*a1 += v11 - 1;
v7 = 237;
*a1 &= ~v10;
v7 = 238;
v3 = *a1;
if ( *a1 > 1056964608 )
v3 = 1056964608;
*a1 = v3;
v7 = 239;
*a2 = msbit__system_u6016(*a1);
v7 = 240;
*a3 = (*a1 >> ((unsigned __int8)*a2 - 5)) - 32;
v7 = 241;
*a2 -= 6;
return popFrame_4();
}
//----- (0000000140004936) ----------------------------------------------------
__int64 __fastcall lsbit__system_u6024(int a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
__int64 v7; // [rsp+58h] [rbp-8h]
v3 = "lsbit";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 223;
v7 = msbit__system_u6016(a1 & (unsigned int)-a1);
popFrame_4();
return v7;
}
//----- (000000014000499B) ----------------------------------------------------
__int64 __fastcall findSuitableBlock__system_u6074(__int64 a1, __int64 *a2, __int64 *a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
int v9; // [rsp+54h] [rbp-Ch]
__int64 v10; // [rsp+58h] [rbp-8h]
v5 = "findSuitableBlock";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 256;
v9 = *(_DWORD *)(a1 + 4 * (*a2 + 1024) + 4) & (0xFFFFFFFFLL << *a3);
v10 = 0;
v6 = 258;
if ( v9 )
{
v6 = 259;
*a3 = lsbit__system_u6024(v9);
v6 = 260;
v10 = *(_QWORD *)(a1 + 8 * (32 * *a2 + *a3 + 524) + 8);
}
else
{
v6 = 262;
*a2 = lsbit__system_u6024(*(_DWORD *)(a1 + 4096) & (unsigned int)(0xFFFFFFFFLL << ((unsigned __int8)*a2 + 1)));
v6 = 263;
if ( *a2 > 0 )
{
v6 = 264;
*a3 = lsbit__system_u6024(*(_DWORD *)(a1 + 4 * (*a2 + 1024) + 4));
v6 = 265;
v10 = *(_QWORD *)(a1 + 8 * (32 * *a2 + *a3 + 524) + 8);
}
}
popFrame_4();
return v10;
}
//----- (0000000140004B3E) ----------------------------------------------------
void __noreturn raiseOutOfMem__system_u5876()
{
FILE *v0; // rax
_BYTE v1[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v2; // [rsp+28h] [rbp-28h]
__int64 v3; // [rsp+30h] [rbp-20h]
const char *v4; // [rsp+38h] [rbp-18h]
__int16 v5; // [rsp+40h] [rbp-10h]
v2 = "raiseOutOfMem";
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\mmdisp.nim";
v3 = 0;
v5 = 0;
nimFrame_4((__int64)v1);
v3 = 47;
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\mmdisp.nim";
if ( outOfMemHook__system_u3635 )
outOfMemHook__system_u3635();
v3 = 48;
v0 = __acrt_iob_func(2u);
rawWrite(v0, "out of memory\n");
v3 = 49;
exit_0(1);
}
// 1400270F0: using guessed type __int64 (*outOfMemHook__system_u3635)(void);
//----- (0000000140004BDC) ----------------------------------------------------
LPVOID __fastcall osAllocPages__system_u5901(SIZE_T a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
LPVOID v7; // [rsp+58h] [rbp-8h]
v3 = "osAllocPages";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 174;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v7 = VirtualAlloc(0, a1, 0x3000u, 4u);
v4 = 176;
if ( !v7 )
raiseOutOfMem__system_u5876();
popFrame_4();
return v7;
}
//----- (0000000140004C76) ----------------------------------------------------
LPVOID __fastcall allocPages__system_u6210(__int64 a1, SIZE_T a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
LPVOID v8; // [rsp+58h] [rbp-8h]
v4 = "allocPages";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 322;
v8 = osAllocPages__system_u5901(a2);
popFrame_4();
return v8;
}
//----- (0000000140004CF0) ----------------------------------------------------
LPVOID __fastcall osTryAllocPages__system_u5904(SIZE_T a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
LPVOID v7; // [rsp+58h] [rbp-8h]
v3 = "osTryAllocPages";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 179;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v7 = VirtualAlloc(0, a1, 0x3000u, 4u);
popFrame_4();
return v7;
}
//----- (0000000140004D73) ----------------------------------------------------
LPVOID __fastcall tryAllocPages__system_u6214(__int64 a1, SIZE_T a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
LPVOID v8; // [rsp+58h] [rbp-8h]
v4 = "tryAllocPages";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 328;
v8 = osTryAllocPages__system_u5904(a2);
popFrame_4();
return v8;
}
//----- (0000000140004DED) ----------------------------------------------------
_QWORD **__fastcall incCurrMem__system_u6190(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "incCurrMem";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 304;
*(_QWORD *)(a1 + 10352) += a2;
return popFrame_4();
}
//----- (0000000140004E5E) ----------------------------------------------------
__int64 __fastcall zeroMem__system_u1728(void *a1, size_t a2)
{
return nimZeroMem_1(a1, a2);
}
//----- (0000000140004E85) ----------------------------------------------------
void *__fastcall llAlloc__system_u6218(__int64 a1, signed __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
void *v8; // [rsp+50h] [rbp-20h]
LPVOID v9; // [rsp+58h] [rbp-18h]
__int64 v10; // [rsp+60h] [rbp-10h]
bool v11; // [rsp+6Fh] [rbp-1h]
v4 = "llAlloc";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 333;
v11 = 0;
v11 = *(_QWORD *)(a1 + 10344) == 0;
if ( !v11 )
v11 = a2 > **(_QWORD **)(a1 + 10344);
if ( v11 )
{
v5 = 338;
v10 = *(_QWORD *)(a1 + 10344);
v5 = 339;
v9 = 0;
v9 = allocPages__system_u6210(a1, 0x1000u);
*(_QWORD *)(a1 + 10344) = v9;
v5 = 342;
incCurrMem__system_u6190(a1, 4096);
v5 = 343;
**(_QWORD **)(a1 + 10344) = 4072;
v5 = 344;
*(_QWORD *)(*(_QWORD *)(a1 + 10344) + 8LL) = 24;
v5 = 345;
*(_QWORD *)(*(_QWORD *)(a1 + 10344) + 16LL) = v10;
}
v5 = 346;
v8 = (void *)(*(_QWORD *)(a1 + 10344) + *(_QWORD *)(*(_QWORD *)(a1 + 10344) + 8LL));
v5 = 347;
**(_QWORD **)(a1 + 10344) -= a2;
v5 = 348;
*(_QWORD *)(*(_QWORD *)(a1 + 10344) + 8LL) += a2;
v5 = 349;
zeroMem__system_u1728(v8, a2);
popFrame_4();
return v8;
}
//----- (0000000140005074) ----------------------------------------------------
_QWORD *__fastcall addHeapLink__system_u6256(__int64 a1, __int64 a2, __int64 a3)
{
char v4[8]; // [rsp+20h] [rbp-80h] BYREF
const char *v5; // [rsp+28h] [rbp-78h]
__int64 v6; // [rsp+30h] [rbp-70h]
const char *v7; // [rsp+38h] [rbp-68h]
__int16 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+50h] [rbp-50h]
__int64 v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
__int64 v12; // [rsp+68h] [rbp-38h]
__int64 v13; // [rsp+70h] [rbp-30h]
_QWORD *v14; // [rsp+78h] [rbp-28h]
_QWORD *v15; // [rsp+80h] [rbp-20h]
bool v16; // [rsp+8Fh] [rbp-11h]
_QWORD *v17; // [rsp+90h] [rbp-10h]
_QWORD *v18; // [rsp+98h] [rbp-8h]
v5 = "addHeapLink";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v17 = (_QWORD *)(a1 + 12464);
v6 = 384;
while ( 1 )
{
v16 = v17 != 0;
if ( v17 )
v16 = *v17 > 29LL;
if ( !v16 )
break;
v17 = (_QWORD *)v17[61];
}
v6 = 385;
if ( v17 )
{
v6 = 393;
v11 = *v17;
v10 = a2;
v9 = a3;
v17[2 * v11 + 1] = a2;
v17[2 * v11 + 2] = v9;
v6 = 395;
++*v17;
v6 = 396;
v18 = v17;
}
else
{
v6 = 386;
v15 = 0;
v15 = llAlloc__system_u6218(a1, 496);
v14 = v15;
v6 = 387;
v15[61] = *(_QWORD *)(a1 + 12952);
*(_QWORD *)(a1 + 12952) = v14;
v13 = a2;
v12 = a3;
v14[1] = a2;
v14[2] = v12;
*v14 = 1;
v6 = 391;
v18 = v14;
}
popFrame_4();
return v18;
}
//----- (000000014000528D) ----------------------------------------------------
__int64 __fastcall pluspercent___system_u793(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+58h] [rbp-8h]
v4 = "+%";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 357;
v8 = a1 + a2;
popFrame_4();
return v8;
}
//----- (0000000140005306) ----------------------------------------------------
_QWORD *__fastcall intSetGet__system_u6351(__int64 a1, __int64 a2)
{
char v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
_QWORD *v8; // [rsp+50h] [rbp-10h]
_QWORD *v9; // [rsp+58h] [rbp-8h]
v4 = "intSetGet";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 411;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v8 = *(_QWORD **)(a1 + 8LL * (unsigned __int8)a2);
v5 = 412;
while ( v8 )
{
v5 = 413;
if ( a2 == v8[1] )
{
v5 = 413;
v9 = v8;
goto LABEL_7;
}
v5 = 414;
v8 = (_QWORD *)*v8;
}
v5 = 415;
v9 = 0;
LABEL_7:
popFrame_4();
return v9;
}
//----- (00000001400053E1) ----------------------------------------------------
_BOOL8 __fastcall contains__system_u6400(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8; // [rsp+58h] [rbp-18h]
_QWORD *system_u6351; // [rsp+60h] [rbp-10h]
bool v10; // [rsp+6Fh] [rbp-1h]
v4 = "contains";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 426;
system_u6351 = intSetGet__system_u6351(a1, a2 >> 9);
v5 = 427;
if ( system_u6351 )
{
v8 = a2 & 0x1FF;
v5 = 429;
v10 = ((system_u6351[(v8 >> 6) + 2] >> (a2 & 0x3F)) & 1LL) != 0;
}
else
{
v5 = 431;
v10 = 0;
}
popFrame_4();
return v10;
}
//----- (00000001400054C0) ----------------------------------------------------
__int64 __fastcall pageIndex__system_u6636(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
__int64 v7; // [rsp+58h] [rbp-8h]
v3 = "pageIndex";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 499;
v7 = a1 >> 12;
popFrame_4();
return v7;
}
//----- (000000014000551F) ----------------------------------------------------
__int64 __fastcall minuspercent___system_u813_1(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+58h] [rbp-8h]
v4 = "-%";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 368;
v8 = a1 - a2;
popFrame_4();
return v8;
}
//----- (0000000140005598) ----------------------------------------------------
__int64 *__fastcall requestOsChunks__system_u6653(__int64 a1, signed __int64 a2)
{
__int64 v2; // rax
__int64 v3; // rax
char v5[8]; // [rsp+20h] [rbp-D0h] BYREF
const char *v6; // [rsp+28h] [rbp-C8h]
__int64 v7; // [rsp+30h] [rbp-C0h]
const char *v8; // [rsp+38h] [rbp-B8h]
__int16 v9; // [rsp+40h] [rbp-B0h]
__int64 v10; // [rsp+58h] [rbp-98h]
__int64 v11; // [rsp+60h] [rbp-90h]
__int64 v12; // [rsp+68h] [rbp-88h]
bool v13; // [rsp+77h] [rbp-79h]
__int64 v14; // [rsp+78h] [rbp-78h]
__int64 *v15; // [rsp+80h] [rbp-70h]
__int64 *v16; // [rsp+88h] [rbp-68h]
_QWORD *v17; // [rsp+90h] [rbp-60h]
__int64 *v18; // [rsp+98h] [rbp-58h]
__int64 *v19; // [rsp+A0h] [rbp-50h]
__int64 *v20; // [rsp+A8h] [rbp-48h]
__int64 v21; // [rsp+B0h] [rbp-40h]
__int64 v22; // [rsp+B8h] [rbp-38h]
__int64 v23; // [rsp+C0h] [rbp-30h]
__int64 v24; // [rsp+C8h] [rbp-28h]
bool v25; // [rsp+D7h] [rbp-19h]
__int64 v26; // [rsp+D8h] [rbp-18h]
__int64 v27; // [rsp+E0h] [rbp-10h]
__int64 *v28; // [rsp+E8h] [rbp-8h]
v6 = "requestOsChunks";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v24 = 0;
v23 = 0;
v7 = 519;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
if ( !*(_BYTE *)(a1 + 12450) )
{
v7 = 520;
v22 = *(_QWORD *)(a1 + 10376);
v7 = 521;
if ( v22 > 0xFFFF )
{
v7 = 524;
v21 = 0;
v2 = roundup__system_u5881(v22 >> 2, 4096);
v21 = v2;
if ( 2LL * *(_QWORD *)(a1 + 12456) <= v2 )
v2 = 2LL * *(_QWORD *)(a1 + 12456);
*(_QWORD *)(a1 + 12456) = v2;
v7 = 525;
v3 = *(_QWORD *)(a1 + 12456);
if ( v3 > 1056964608 )
v3 = 1056964608;
*(_QWORD *)(a1 + 12456) = v3;
}
else
{
v7 = 522;
*(_QWORD *)(a1 + 12456) = 0x4000;
}
}
v27 = a2;
v7 = 528;
if ( a2 <= *(_QWORD *)(a1 + 12456) )
{
v7 = 531;
v19 = 0;
v19 = (__int64 *)tryAllocPages__system_u6214(a1, *(_QWORD *)(a1 + 12456));
v28 = v19;
v7 = 532;
if ( v19 )
{
v7 = 536;
v27 = *(_QWORD *)(a1 + 12456);
}
else
{
v7 = 533;
v18 = 0;
v18 = (__int64 *)allocPages__system_u6210(a1, v27);
v28 = v18;
v7 = 534;
*(_BYTE *)(a1 + 12450) = 1;
}
}
else
{
v7 = 529;
v20 = 0;
v20 = (__int64 *)allocPages__system_u6210(a1, v27);
v28 = v20;
}
v7 = 538;
incCurrMem__system_u6190(a1, v27);
v7 = 539;
*(_QWORD *)(a1 + 10368) += v27;
v7 = 540;
v17 = addHeapLink__system_u6256(a1, (__int64)v28, v27);
v28[3] = 0;
v28[4] = 0;
v28[1] = v27;
v7 = 554;
v16 = (__int64 *)pluspercent___system_u793((__int64)v28, v27);
v15 = v16;
v7 = 557;
v14 = 0;
v14 = pageIndex__system_u6636((__int64)v16);
v13 = 0;
v13 = contains__system_u6400(a1 + 10400, v14);
if ( v13 )
{
v7 = 559;
*v15 = v27 | *v15 & 1;
}
v7 = 561;
if ( *(_QWORD *)(a1 + 10384) )
{
v24 = *(_QWORD *)(a1 + 10384);
v26 = v24;
}
else
{
v23 = 4096;
v26 = 4096;
}
v7 = 562;
v12 = minuspercent___system_u813_1((__int64)v28, v26);
v11 = v12;
v7 = 565;
v25 = 0;
v10 = 0;
v10 = pageIndex__system_u6636(v12);
v25 = contains__system_u6400(a1 + 10400, v10);
if ( v25 )
v25 = v26 == *(_QWORD *)(v11 + 8);
if ( !v25 )
{
v7 = 569;
*v28 &= 1uLL;
}
else
{
v7 = 567;
*v28 = v26 | *v28 & 1;
}
v7 = 571;
*(_QWORD *)(a1 + 10384) = v27;
popFrame_4();
return v28;
}
//----- (0000000140005ABA) ----------------------------------------------------
__int64 __fastcall pageIndex__system_u6643(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
__int64 v7; // [rsp+58h] [rbp-8h]
v3 = "pageIndex";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 502;
v7 = a1 >> 12;
popFrame_4();
return v7;
}
//----- (0000000140005B19) ----------------------------------------------------
_BOOL8 __fastcall isAccessible__system_u6678(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
bool v8; // [rsp+57h] [rbp-9h]
__int64 v9; // [rsp+58h] [rbp-8h]
v4 = "isAccessible";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 575;
v9 = 0;
v9 = pageIndex__system_u6643(a2);
v8 = contains__system_u6400(a1 + 10400, v9);
popFrame_4();
return v8;
}
//----- (0000000140005BA1) ----------------------------------------------------
_QWORD **__fastcall updatePrevSize__system_u6696(__int64 a1, __int64 a2, __int64 a3)
{
char v4[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v5; // [rsp+28h] [rbp-48h]
__int64 v6; // [rsp+30h] [rbp-40h]
const char *v7; // [rsp+38h] [rbp-38h]
__int16 v8; // [rsp+40h] [rbp-30h]
bool v9; // [rsp+5Fh] [rbp-11h]
__int64 *v10; // [rsp+60h] [rbp-10h]
__int64 *v11; // [rsp+68h] [rbp-8h]
v5 = "updatePrevSize";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 609;
v11 = 0;
v11 = (__int64 *)pluspercent___system_u793(a2, *(_QWORD *)(a2 + 8));
v10 = v11;
v6 = 611;
v9 = 0;
v9 = isAccessible__system_u6678(a1, (__int64)v11);
if ( v9 )
{
v6 = 612;
*v10 = a3 | *v10 & 1;
}
return popFrame_4();
}
//----- (0000000140005C6B) ----------------------------------------------------
_QWORD *__fastcall intSetPut__system_u6383(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
_QWORD *v9; // [rsp+50h] [rbp-10h]
_QWORD *system_u6351; // [rsp+58h] [rbp-8h]
v5 = "intSetPut";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 418;
system_u6351 = intSetGet__system_u6351(a2, a3);
v6 = 419;
if ( !system_u6351 )
{
v6 = 420;
v9 = 0;
v9 = llAlloc__system_u6218(a1, 80);
system_u6351 = v9;
v6 = 421;
*v9 = *(_QWORD *)(a2 + 8LL * (unsigned __int8)a3);
*(_QWORD *)(a2 + 8LL * (unsigned __int8)a3) = system_u6351;
v6 = 423;
system_u6351[1] = a3;
}
popFrame_4();
return system_u6351;
}
//----- (0000000140005D66) ----------------------------------------------------
_QWORD **__fastcall incl__system_u6441(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h]
_QWORD *v10; // [rsp+58h] [rbp-8h]
v5 = "incl";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 434;
v10 = intSetPut__system_u6383(a1, a2, a3 >> 9);
v9 = a3 & 0x1FF;
v6 = 436;
v10[(v9 >> 6) + 2] |= 1LL << (a3 & 0x3F);
return popFrame_4();
}
//----- (0000000140005E42) ----------------------------------------------------
__int64 *__fastcall splitChunk2__system_u6701(__int64 a1, __int64 a2, __int64 a3)
{
char v4[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v5; // [rsp+28h] [rbp-48h]
__int64 v6; // [rsp+30h] [rbp-40h]
const char *v7; // [rsp+38h] [rbp-38h]
__int16 v8; // [rsp+40h] [rbp-30h]
_QWORD *v9; // [rsp+50h] [rbp-20h]
__int64 v10; // [rsp+58h] [rbp-18h]
__int64 v11; // [rsp+60h] [rbp-10h]
_QWORD *v12; // [rsp+68h] [rbp-8h]
v5 = "splitChunk2";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 615;
v12 = 0;
v12 = (_QWORD *)pluspercent___system_u793(a2, a3);
v9 = v12;
v6 = 616;
v12[1] = *(_QWORD *)(a2 + 8) - a3;
v9[3] = 0;
v9[4] = 0;
*v9 = a3;
v9[2] = a1;
v6 = 628;
updatePrevSize__system_u6696(a1, a2, v9[1]);
*(_QWORD *)(a2 + 8) = a3;
v6 = 630;
v11 = a1;
v10 = 0;
v10 = pageIndex__system_u6636((__int64)v9);
incl__system_u6441(v11, a1 + 10400, v10);
popFrame_4();
return v9;
}
//----- (0000000140005FB4) ----------------------------------------------------
__int64 *__fastcall mappingInsert__system_u6059(__int64 *a1, __int64 a2)
{
__int64 v2; // rax
__int64 v3; // rdx
char v5[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v6; // [rsp+28h] [rbp-38h]
__int64 v7; // [rsp+30h] [rbp-30h]
const char *v8; // [rsp+38h] [rbp-28h]
__int16 v9; // [rsp+40h] [rbp-20h]
__int64 v10; // [rsp+50h] [rbp-10h] BYREF
__int64 v11; // [rsp+58h] [rbp-8h]
v6 = "mappingInsert";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
nimZeroMem_1(&v10, 0x10u);
v7 = 249;
v2 = msbit__system_u6016(a2);
v11 = (a2 >> ((unsigned __int8)v2 - 5)) - 32;
v7 = 251;
v10 = v2 - 6;
popFrame_4();
v3 = v11;
*a1 = v10;
a1[1] = v3;
return a1;
}
//----- (0000000140006075) ----------------------------------------------------
_QWORD **__fastcall setBit__system_u6027(char a1, _DWORD *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "setBit";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 226;
*a2 |= 1LL << (a1 & 0x1F);
return popFrame_4();
}
//----- (00000001400060EC) ----------------------------------------------------
_QWORD **__fastcall addChunkToMatrix__system_u6180(__int64 a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8[2]; // [rsp+50h] [rbp-20h] BYREF
__int64 v9; // [rsp+60h] [rbp-10h]
__int64 v10; // [rsp+68h] [rbp-8h]
v4 = "addChunkToMatrix";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 294;
mappingInsert__system_u6059(v8, a2[1]);
v10 = v8[0];
v9 = v8[1];
a2[4] = 0;
v5 = 296;
a2[3] = *(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8);
v5 = 297;
if ( *(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8) )
{
v5 = 298;
*(_QWORD *)(*(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8) + 32LL) = a2;
}
*(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8) = a2;
v5 = 300;
setBit__system_u6027(v9, (_DWORD *)(4 * (v10 + 1024) + a1 + 4));
v5 = 301;
setBit__system_u6027(v10, (_DWORD *)(a1 + 4096));
return popFrame_4();
}
//----- (000000014000628C) ----------------------------------------------------
_QWORD **__fastcall splitChunk__system_u6725(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 *v9; // [rsp+58h] [rbp-8h]
v5 = "splitChunk";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 633;
v9 = splitChunk2__system_u6701(a1, a2, a3);
v6 = 634;
addChunkToMatrix__system_u6180(a1, v9);
return popFrame_4();
}
//----- (0000000140006317) ----------------------------------------------------
_QWORD **__fastcall clearBit__system_u6034(char a1, _DWORD *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "clearBit";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 229;
*a2 &= ~(unsigned int)(1LL << (a1 & 0x1F));
return popFrame_4();
}
//----- (0000000140006390) ----------------------------------------------------
_QWORD **__fastcall removeChunkFromMatrix2__system_u6171(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
_BYTE v5[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v6; // [rsp+28h] [rbp-28h]
__int64 v7; // [rsp+30h] [rbp-20h]
const char *v8; // [rsp+38h] [rbp-18h]
__int16 v9; // [rsp+40h] [rbp-10h]
v6 = "removeChunkFromMatrix2";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v7 = 285;
*(_QWORD *)(a1 + 8 * (32 * a3 + a4 + 524) + 8) = *(_QWORD *)(a2 + 24);
v7 = 286;
if ( *(_QWORD *)(a1 + 8 * (32 * a3 + a4 + 524) + 8) )
{
v7 = 287;
*(_QWORD *)(*(_QWORD *)(a1 + 8 * (32 * a3 + a4 + 524) + 8) + 32LL) = 0;
}
else
{
v7 = 268;
clearBit__system_u6034(a4, (_DWORD *)(4 * (a3 + 1024) + a1 + 4));
v7 = 269;
if ( !*(_DWORD *)(a1 + 4 * (a3 + 1024) + 4) )
{
v7 = 271;
clearBit__system_u6034(a3, (_DWORD *)(a1 + 4096));
}
}
*(_QWORD *)(a2 + 32) = 0;
v7 = 291;
*(_QWORD *)(a2 + 24) = 0;
return popFrame_4();
}
//----- (000000014000651C) ----------------------------------------------------
_QWORD *__fastcall getBigChunk__system_u6754(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-60h] BYREF
const char *v4; // [rsp+28h] [rbp-58h]
__int64 v5; // [rsp+30h] [rbp-50h]
const char *v6; // [rsp+38h] [rbp-48h]
__int16 v7; // [rsp+40h] [rbp-40h]
__int64 v8; // [rsp+50h] [rbp-30h] BYREF
__int64 v9; // [rsp+58h] [rbp-28h] BYREF
__int64 v10; // [rsp+60h] [rbp-20h] BYREF
_QWORD *SuitableBlock__system_u6074; // [rsp+68h] [rbp-18h]
__int64 v12; // [rsp+70h] [rbp-10h]
__int64 v13; // [rsp+78h] [rbp-8h]
v4 = "getBigChunk";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v10 = a2;
v9 = 0;
v8 = 0;
v5 = 679;
mappingSearch__system_u6041(&v10, &v9, &v8);
v5 = 681;
SuitableBlock__system_u6074 = (_QWORD *)findSuitableBlock__system_u6074(a1, &v9, &v8);
v5 = 689;
if ( SuitableBlock__system_u6074 )
{
v5 = 700;
removeChunkFromMatrix2__system_u6171(a1, (__int64)SuitableBlock__system_u6074, v9, v8);
v5 = 701;
if ( v10 + 4095 < SuitableBlock__system_u6074[1] )
{
v5 = 702;
splitChunk__system_u6725(a1, (__int64)SuitableBlock__system_u6074, v10);
}
}
else
{
v5 = 690;
if ( v10 > 0x7FFFF )
{
v5 = 694;
SuitableBlock__system_u6074 = requestOsChunks__system_u6653(a1, v10);
v5 = 696;
if ( SuitableBlock__system_u6074[1] > v10 )
{
v5 = 697;
splitChunk__system_u6725(a1, (__int64)SuitableBlock__system_u6074, v10);
}
}
else
{
v5 = 691;
SuitableBlock__system_u6074 = requestOsChunks__system_u6653(a1, 0x80000);
v5 = 692;
splitChunk__system_u6725(a1, (__int64)SuitableBlock__system_u6074, v10);
}
v5 = 698;
SuitableBlock__system_u6074[2] = a1;
}
*SuitableBlock__system_u6074 = 1;
v5 = 708;
v13 = a1;
v12 = 0;
v12 = pageIndex__system_u6636((__int64)SuitableBlock__system_u6074);
incl__system_u6441(v13, a1 + 10400, v12);
v5 = 709;
*(_QWORD *)(a1 + 10368) -= v10;
popFrame_4();
return SuitableBlock__system_u6074;
}
//----- (00000001400067A4) ----------------------------------------------------
_QWORD *__fastcall getSmallChunk__system_u6782(__int64 a1)
{
char v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
_QWORD *v7; // [rsp+50h] [rbp-10h]
_QWORD *BigChunk__system_u6754; // [rsp+58h] [rbp-8h]
v3 = "getSmallChunk";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 742;
BigChunk__system_u6754 = getBigChunk__system_u6754(a1, 4096);
v4 = 745;
v7 = BigChunk__system_u6754;
popFrame_4();
return v7;
}
//----- (000000014000681C) ----------------------------------------------------
unsigned __int64 __fastcall pageAddr__system_u6650(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
unsigned __int64 v7; // [rsp+58h] [rbp-8h]
v3 = "pageAddr";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 505;
v7 = a1 & 0xFFFFFFFFFFFFF000uLL;
popFrame_4();
return v7;
}
//----- (000000014000687D) ----------------------------------------------------
_QWORD **__fastcall compensateCounters__system_u6876(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v5; // [rsp+28h] [rbp-48h]
__int64 v6; // [rsp+30h] [rbp-40h]
const char *v7; // [rsp+38h] [rbp-38h]
__int16 v8; // [rsp+40h] [rbp-30h]
unsigned __int64 v9; // [rsp+50h] [rbp-20h]
unsigned __int64 v10; // [rsp+58h] [rbp-18h]
__int64 v11; // [rsp+60h] [rbp-10h]
__int64 *v12; // [rsp+68h] [rbp-8h]
v5 = "compensateCounters";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 835;
v12 = *(__int64 **)(a2 + 40);
v11 = 0;
v6 = 837;
while ( v12 )
{
v11 += a3;
v6 = 839;
v10 = 0;
v10 = pageAddr__system_u6650((__int64)v12);
v9 = v10;
v6 = 840;
if ( a2 != v10 )
{
v6 = 843;
++*(_QWORD *)(a2 + 56);
}
v6 = 844;
v12 = (__int64 *)*v12;
}
v6 = 846;
*(_DWORD *)(a2 + 48) += v11;
v6 = 847;
*(_QWORD *)(a1 + 10376) -= v11;
return popFrame_4();
}
//----- (00000001400069C8) ----------------------------------------------------
_QWORD **__fastcall listAdd__system_u6975(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "listAdd";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 588;
*(_QWORD *)(a2 + 24) = *(_QWORD *)a1;
v5 = 589;
if ( *(_QWORD *)a1 )
{
v5 = 591;
*(_QWORD *)(*(_QWORD *)a1 + 32LL) = a2;
}
v5 = 592;
*(_QWORD *)a1 = a2;
return popFrame_4();
}
//----- (0000000140006A6C) ----------------------------------------------------
_QWORD **__fastcall listRemove__system_u7052(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "listRemove";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 596;
if ( a2 == *(_QWORD *)a1 )
{
v5 = 597;
*(_QWORD *)a1 = *(_QWORD *)(a2 + 24);
v5 = 599;
if ( *(_QWORD *)a1 )
*(_QWORD *)(*(_QWORD *)a1 + 32LL) = 0;
}
else
{
v5 = 602;
*(_QWORD *)(*(_QWORD *)(a2 + 32) + 24LL) = *(_QWORD *)(a2 + 24);
v5 = 603;
if ( *(_QWORD *)(a2 + 24) )
*(_QWORD *)(*(_QWORD *)(a2 + 24) + 32LL) = *(_QWORD *)(a2 + 32);
}
*(_QWORD *)(a2 + 24) = 0;
v5 = 605;
*(_QWORD *)(a2 + 32) = 0;
return popFrame_4();
}
//----- (0000000140006B7D) ----------------------------------------------------
_QWORD **__fastcall excl__system_u6463(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+50h] [rbp-10h]
_QWORD *system_u6351; // [rsp+58h] [rbp-8h]
v4 = "excl";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 439;
system_u6351 = intSetGet__system_u6351(a1, a2 >> 9);
v5 = 440;
if ( system_u6351 )
{
v8 = a2 & 0x1FF;
v5 = 443;
system_u6351[(v8 >> 6) + 2] &= ~(1LL << (a2 & 0x3F));
}
return popFrame_4();
}
//----- (0000000140006C6E) ----------------------------------------------------
_QWORD **__fastcall decCurrMem__system_u6198(__int64 a1, __int64 a2)
{
__int64 v2; // rax
_BYTE v4[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v5; // [rsp+28h] [rbp-28h]
__int64 v6; // [rsp+30h] [rbp-20h]
const char *v7; // [rsp+38h] [rbp-18h]
__int16 v8; // [rsp+40h] [rbp-10h]
v5 = "decCurrMem";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 307;
v2 = *(_QWORD *)(a1 + 10352);
if ( *(_QWORD *)(a1 + 10360) >= v2 )
v2 = *(_QWORD *)(a1 + 10360);
*(_QWORD *)(a1 + 10360) = v2;
v6 = 308;
*(_QWORD *)(a1 + 10352) -= a2;
return popFrame_4();
}
//----- (0000000140006D0C) ----------------------------------------------------
_QWORD **__fastcall osDeallocPages__system_u5907(void *a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
int v7; // [rsp+58h] [rbp-8h]
BOOL v8; // [rsp+5Ch] [rbp-4h]
v3 = "osDeallocPages";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 190;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\osalloc.nim";
v8 = 0;
v8 = VirtualFree(a1, 0, 0x8000u);
if ( !v8 )
{
v4 = 191;
v7 = 0;
v7 = printf("virtualFree failing!");
v4 = 192;
exit_0(1);
}
return popFrame_4();
}
//----- (0000000140006DCA) ----------------------------------------------------
_QWORD **__fastcall freeHugeChunk__system_u6778(__int64 a1, _QWORD *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
__int64 v8; // [rsp+50h] [rbp-10h]
__int64 v9; // [rsp+58h] [rbp-8h]
v4 = "freeHugeChunk";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 735;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v9 = a2[1];
v5 = 737;
v8 = 0;
v8 = pageIndex__system_u6636((__int64)a2);
excl__system_u6463(a1 + 10400, v8);
v5 = 738;
decCurrMem__system_u6198(a1, v9);
v5 = 739;
osDeallocPages__system_u5907(a2);
return popFrame_4();
}
//----- (0000000140006E9B) ----------------------------------------------------
_BOOL8 __fastcall chunkUnused__system_u6539(_QWORD *a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
bool v7; // [rsp+5Fh] [rbp-1h]
v3 = "chunkUnused";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 467;
v7 = (*a1 & 1LL) == 0;
popFrame_4();
return v7;
}
//----- (0000000140006F01) ----------------------------------------------------
_BOOL8 __fastcall isSmallChunk__system_u6533(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
bool v7; // [rsp+5Fh] [rbp-1h]
v3 = "isSmallChunk";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 464;
v7 = *(_QWORD *)(a1 + 8) <= 4032LL;
popFrame_4();
return v7;
}
//----- (0000000140006F68) ----------------------------------------------------
_QWORD **__fastcall removeChunkFromMatrix__system_u6129(__int64 a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8[2]; // [rsp+50h] [rbp-20h] BYREF
__int64 v9; // [rsp+60h] [rbp-10h]
__int64 v10; // [rsp+68h] [rbp-8h]
v4 = "removeChunkFromMatrix";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 274;
mappingInsert__system_u6059(v8, a2[1]);
v10 = v8[0];
v9 = v8[1];
v5 = 275;
if ( a2[3] )
*(_QWORD *)(a2[3] + 32) = a2[4];
v5 = 276;
if ( a2[4] )
*(_QWORD *)(a2[4] + 24) = a2[3];
v5 = 277;
if ( a2 == *(__int64 **)(a1 + 8 * (32 * v10 + v9 + 524) + 8) )
{
v5 = 278;
*(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8) = a2[3];
v5 = 279;
if ( !*(_QWORD *)(a1 + 8 * (32 * v10 + v9 + 524) + 8) )
{
v5 = 268;
clearBit__system_u6034(v9, (_DWORD *)(4 * (v10 + 1024) + a1 + 4));
v5 = 269;
if ( !*(_DWORD *)(a1 + 4 * (v10 + 1024) + 4) )
{
v5 = 271;
clearBit__system_u6034(v10, (_DWORD *)(a1 + 4096));
}
}
}
a2[4] = 0;
v5 = 282;
a2[3] = 0;
return popFrame_4();
}
//----- (0000000140007175) ----------------------------------------------------
_QWORD **__fastcall freeBigChunk__system_u6730(__int64 a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-A0h] BYREF
const char *v4; // [rsp+28h] [rbp-98h]
__int64 v5; // [rsp+30h] [rbp-90h]
const char *v6; // [rsp+38h] [rbp-88h]
__int16 v7; // [rsp+40h] [rbp-80h]
__int64 *v8; // [rsp+58h] [rbp-68h]
__int64 *v9; // [rsp+60h] [rbp-60h]
__int64 v10; // [rsp+68h] [rbp-58h]
bool v11; // [rsp+77h] [rbp-49h]
__int64 *v12; // [rsp+78h] [rbp-48h]
__int64 *v13; // [rsp+80h] [rbp-40h]
__int64 *v14; // [rsp+88h] [rbp-38h]
__int64 v15; // [rsp+90h] [rbp-30h]
bool v16; // [rsp+9Fh] [rbp-21h]
__int64 *v17; // [rsp+A0h] [rbp-20h]
__int64 *v18; // [rsp+A8h] [rbp-18h]
__int64 v19; // [rsp+B0h] [rbp-10h]
bool v20; // [rsp+BCh] [rbp-4h]
bool v21; // [rsp+BDh] [rbp-3h]
bool v22; // [rsp+BEh] [rbp-2h]
bool v23; // [rsp+BFh] [rbp-1h]
v4 = "freeBigChunk";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v8 = a2;
v5 = 639;
*(_QWORD *)(a1 + 10368) += a2[1];
v5 = 640;
*v8 &= ~1uLL;
v5 = 642;
v19 = *v8;
v5 = 643;
if ( v19 )
{
v5 = 644;
v18 = 0;
v18 = (__int64 *)minuspercent___system_u813_1((__int64)v8, v19);
v17 = v18;
v5 = 646;
v23 = 0;
v23 = isAccessible__system_u6678(a1, (__int64)v18);
if ( v23 )
v23 = chunkUnused__system_u6539(v17);
if ( v23 )
{
v5 = 648;
v22 = 0;
v16 = 0;
v16 = isSmallChunk__system_u6533((__int64)v17);
v22 = !v16;
if ( !v16 )
v22 = v17[1] <= 1056964607;
if ( v22 )
{
v5 = 649;
removeChunkFromMatrix__system_u6129(a1, v17);
v5 = 650;
v17[1] += v8[1];
v5 = 651;
v15 = 0;
v15 = pageIndex__system_u6636((__int64)v8);
excl__system_u6463(a1 + 10400, v15);
v8 = v17;
v5 = 653;
if ( v17[1] > 1056964608 )
{
v5 = 654;
v14 = splitChunk2__system_u6701(a1, (__int64)v8, 1056964608);
v5 = 658;
addChunkToMatrix__system_u6180(a1, v8);
v5 = 659;
v8 = v14;
}
}
}
}
v5 = 661;
v13 = 0;
v13 = (__int64 *)pluspercent___system_u793((__int64)v8, v8[1]);
v12 = v13;
v5 = 663;
v21 = 0;
v21 = isAccessible__system_u6678(a1, (__int64)v13);
if ( v21 )
v21 = chunkUnused__system_u6539(v12);
if ( v21 )
{
v5 = 665;
v20 = 0;
v11 = 0;
v11 = isSmallChunk__system_u6533((__int64)v12);
v20 = !v11;
if ( !v11 )
v20 = v8[1] <= 1056964607;
if ( v20 )
{
v5 = 666;
removeChunkFromMatrix__system_u6129(a1, v12);
v5 = 667;
v8[1] += v12[1];
v5 = 668;
v10 = 0;
v10 = pageIndex__system_u6636((__int64)v12);
excl__system_u6463(a1 + 10400, v10);
v5 = 669;
if ( v8[1] > 1056964608 )
{
v5 = 670;
v9 = splitChunk2__system_u6701(a1, (__int64)v8, 1056964608);
v5 = 671;
addChunkToMatrix__system_u6180(a1, v9);
}
}
}
v5 = 672;
addChunkToMatrix__system_u6180(a1, v8);
return popFrame_4();
}
//----- (0000000140007634) ----------------------------------------------------
_QWORD **__fastcall deallocBigChunk__system_u6800(__int64 a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "deallocBigChunk";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 799;
*(_QWORD *)(a1 + 10376) -= a2[1];
v5 = 805;
if ( a2[1] <= 1056964608 )
{
v5 = 806;
freeBigChunk__system_u6730(a1, a2);
}
else
{
freeHugeChunk__system_u6778(a1, a2);
}
return popFrame_4();
}
//----- (00000001400076EC) ----------------------------------------------------
_QWORD **__fastcall addToSharedFreeListBigChunks__system_u6811(__int64 a1, signed __int64 a2)
{
signed __int64 v2; // rtt
signed __int64 v3; // rcx
bool v4; // al
_BYTE v6[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v7; // [rsp+28h] [rbp-38h]
__int64 v8; // [rsp+30h] [rbp-30h]
const char *v9; // [rsp+38h] [rbp-28h]
__int16 v10; // [rsp+40h] [rbp-20h]
bool v11; // [rsp+57h] [rbp-9h]
__int64 v12; // [rsp+58h] [rbp-8h]
v7 = "addToSharedFreeListBigChunks";
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v8 = 0;
v10 = 0;
nimFrame_4((__int64)v6);
v8 = 824;
do
{
v8 = 815;
v12 = 0;
v12 = *(_QWORD *)(a1 + 10392);
*(_QWORD *)(a2 + 24) = v12;
v8 = 816;
v11 = 0;
v2 = *(_QWORD *)(a2 + 24);
v3 = _InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 10392), a2, v2);
v4 = v2 == v3;
if ( v2 != v3 )
*(_QWORD *)(a2 + 24) = v3;
v11 = v4;
}
while ( !v4 );
v8 = 817;
return popFrame_4();
}
//----- (00000001400077C6) ----------------------------------------------------
_QWORD **__fastcall freeDeferredObjects__system_u6911(__int64 a1, __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 *v8; // [rsp+58h] [rbp-18h]
__int64 v9; // [rsp+60h] [rbp-10h]
__int64 *v10; // [rsp+68h] [rbp-8h]
v4 = "freeDeferredObjects";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v10 = a2;
v9 = 20;
v5 = 852;
while ( 1 )
{
v5 = 853;
v8 = (__int64 *)v10[3];
v10[3] = 0;
v5 = 855;
deallocBigChunk__system_u6800(a1, v10);
v5 = 856;
if ( !v9 )
break;
v10 = v8;
--v9;
v5 = 863;
if ( !v8 )
return popFrame_4();
}
v5 = 857;
if ( v8 )
{
v5 = 858;
addToSharedFreeListBigChunks__system_u6811(a1, (signed __int64)v8);
}
v5 = 860;
return popFrame_4();
}
//----- (00000001400078F8) ----------------------------------------------------
_QWORD *__fastcall getHugeChunk__system_u6774(__int64 a1, SIZE_T a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
_QWORD *v8; // [rsp+50h] [rbp-20h]
__int64 v9; // [rsp+58h] [rbp-18h]
__int64 v10; // [rsp+60h] [rbp-10h]
_QWORD *v11; // [rsp+68h] [rbp-8h]
v4 = "getHugeChunk";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 714;
v11 = 0;
v11 = allocPages__system_u6210(a1, a2);
v8 = v11;
v5 = 720;
incCurrMem__system_u6190(a1, a2);
v8[3] = 0;
v8[4] = 0;
v8[1] = a2;
*v8 = 1;
v8[2] = a1;
v5 = 730;
v10 = a1;
v9 = 0;
v9 = pageIndex__system_u6636((__int64)v8);
incl__system_u6441(v10, a1 + 10400, v9);
popFrame_4();
return v8;
}
//----- (0000000140007A3F) ----------------------------------------------------
_QWORD *__fastcall rawAlloc__system_u6943(__int64 a1, __int64 a2)
{
__int64 v2; // rax
__int64 v3; // rax
_BYTE v5[8]; // [rsp+20h] [rbp-80h] BYREF
const char *v6; // [rsp+28h] [rbp-78h]
__int64 v7; // [rsp+30h] [rbp-70h]
const char *v8; // [rsp+38h] [rbp-68h]
__int16 v9; // [rsp+40h] [rbp-60h]
__int64 *v10; // [rsp+50h] [rbp-50h]
_QWORD *BigChunk__system_u6754; // [rsp+58h] [rbp-48h]
_QWORD *HugeChunk__system_u6774; // [rsp+60h] [rbp-40h]
unsigned __int64 v13; // [rsp+68h] [rbp-38h]
__int64 v14; // [rsp+70h] [rbp-30h]
_QWORD *SmallChunk__system_u6782; // [rsp+78h] [rbp-28h]
__int64 v16; // [rsp+80h] [rbp-20h]
__int64 v17; // [rsp+88h] [rbp-18h]
_QWORD *v18; // [rsp+90h] [rbp-10h]
_QWORD *v19; // [rsp+98h] [rbp-8h]
v6 = "rawAlloc";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v19 = 0;
v7 = 870;
v17 = roundup__system_u5881(a2, 16);
v7 = 875;
if ( v17 > 4032 )
{
HugeChunk__system_u6774 = 0;
BigChunk__system_u6754 = 0;
v7 = 963;
v10 = (__int64 *)_InterlockedExchange64((volatile __int64 *)(a1 + 10392), 0);
v7 = 967;
if ( v10 )
{
v7 = 968;
freeDeferredObjects__system_u6911(a1, v10);
}
v17 = a2 + 48;
v7 = 972;
if ( a2 + 48 <= 1056964608 )
{
v7 = 973;
BigChunk__system_u6754 = getBigChunk__system_u6754(a1, v17);
v18 = BigChunk__system_u6754;
}
else
{
HugeChunk__system_u6774 = getHugeChunk__system_u6774(a1, v17);
v18 = HugeChunk__system_u6774;
}
v19 = v18 + 6;
v7 = 982;
*(_QWORD *)(a1 + 10376) += v18[1];
}
else
{
v16 = v17 / 16;
v7 = 892;
SmallChunk__system_u6782 = *(_QWORD **)(a1 + 8 * (v17 / 16));
v7 = 893;
if ( SmallChunk__system_u6782 )
{
v7 = 922;
if ( SmallChunk__system_u6782[5] )
{
v7 = 929;
v19 = (_QWORD *)SmallChunk__system_u6782[5];
v7 = 932;
SmallChunk__system_u6782[5] = *(_QWORD *)SmallChunk__system_u6782[5];
v7 = 933;
v13 = 0;
v13 = pageAddr__system_u6650((__int64)v19);
if ( (_QWORD *)v13 != SmallChunk__system_u6782 )
{
v7 = 935;
--SmallChunk__system_u6782[7];
}
}
else
{
v7 = 925;
v14 = 0;
v14 = pluspercent___system_u793(
(__int64)(SmallChunk__system_u6782 + 8),
*((unsigned int *)SmallChunk__system_u6782 + 13));
v19 = (_QWORD *)v14;
v7 = 926;
*((_DWORD *)SmallChunk__system_u6782 + 13) += v17;
}
v7 = 942;
*((_DWORD *)SmallChunk__system_u6782 + 12) -= v17;
v7 = 879;
if ( !SmallChunk__system_u6782[5] )
{
v7 = 882;
v3 = _InterlockedExchange64((volatile __int64 *)(a1 + 8 * (v16 + 256)), 0);
SmallChunk__system_u6782[5] = v3;
v7 = 888;
compensateCounters__system_u6876(a1, (__int64)SmallChunk__system_u6782, v17);
}
v7 = 950;
if ( v17 > *((int *)SmallChunk__system_u6782 + 12) )
{
v7 = 953;
listRemove__system_u7052(8 * v16 + a1, (__int64)SmallChunk__system_u6782);
}
}
else
{
v7 = 895;
SmallChunk__system_u6782 = getSmallChunk__system_u6782(a1);
SmallChunk__system_u6782[5] = 0;
SmallChunk__system_u6782[7] = 0;
SmallChunk__system_u6782[1] = v17;
*((_DWORD *)SmallChunk__system_u6782 + 13) = v17;
*((_DWORD *)SmallChunk__system_u6782 + 12) = 4032 - v17;
SmallChunk__system_u6782[3] = 0;
SmallChunk__system_u6782[4] = 0;
v7 = 879;
if ( !SmallChunk__system_u6782[5] )
{
v7 = 882;
v2 = _InterlockedExchange64((volatile __int64 *)(a1 + 8 * (v16 + 256)), 0);
SmallChunk__system_u6782[5] = v2;
v7 = 888;
compensateCounters__system_u6876(a1, (__int64)SmallChunk__system_u6782, v17);
}
v7 = 909;
if ( v17 <= *((int *)SmallChunk__system_u6782 + 12) )
{
v7 = 912;
listAdd__system_u6975(8 * v16 + a1, (__int64)SmallChunk__system_u6782);
}
v7 = 913;
v19 = SmallChunk__system_u6782 + 8;
}
v7 = 958;
*(_QWORD *)(a1 + 10376) += v17;
}
popFrame_4();
return v19;
}
//----- (0000000140007F75) ----------------------------------------------------
_QWORD *__fastcall alloc__system_u7201(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
_QWORD *v8; // [rsp+58h] [rbp-8h]
v4 = "alloc";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 1148;
v8 = rawAlloc__system_u6943(a1, a2);
popFrame_4();
return v8;
}
//----- (0000000140007FE0) ----------------------------------------------------
_QWORD *__fastcall allocImpl__system_u1747(__int64 a1)
{
void *address; // rax
address = _emutls_get_address(&_emutls_v_allocator__system_u7250);
return alloc__system_u7201((__int64)address, a1);
}
//----- (0000000140008018) ----------------------------------------------------
_QWORD *__fastcall allocSharedImpl(__int64 a1)
{
return allocImpl__system_u1747(a1);
}
//----- (000000014000803E) ----------------------------------------------------
_QWORD **raiseRangeErrorNoArgs()
{
__int64 v1[2]; // [rsp+20h] [rbp-10h] BYREF
v1[0] = TM__Q5wkpxktOdTGvlSRo9bzt9aw_14;
v1[1] = (__int64)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_13;
return sysFatal__system_u4979(v1);
}
// 1400208A0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_14;
//----- (000000014000806F) ----------------------------------------------------
_QWORD **__fastcall init__system_u3330(_QWORD *a1, __int64 a2)
{
bool v2; // dl
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h]
_QWORD *v10; // [rsp+58h] [rbp-8h]
v5 = "init";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
*a1 = 0;
a1[1] = a2;
v6 = 37;
v2 = !is_mul_ok(0x10u, a1[1]);
v9 = 16LL * a1[1];
if ( v2 )
{
raiseOverflow();
}
else if ( v9 >= 0 )
{
v10 = 0;
v10 = allocSharedImpl(v9);
a1[2] = v10;
}
else
{
raiseRangeErrorNoArgs();
}
return popFrame_4();
}
//----- (000000014000815C) ----------------------------------------------------
__int64 __fastcall ptrSize__system_u7189(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v3; // [rsp+28h] [rbp-48h]
__int64 v4; // [rsp+30h] [rbp-40h]
const char *v5; // [rsp+38h] [rbp-38h]
__int16 v6; // [rsp+40h] [rbp-30h]
bool v7; // [rsp+5Fh] [rbp-11h]
unsigned __int64 v8; // [rsp+60h] [rbp-10h]
__int64 v9; // [rsp+68h] [rbp-8h]
v3 = "ptrSize";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 1134;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v8 = pageAddr__system_u6650(a1);
v4 = 1136;
v9 = *(_QWORD *)(v8 + 8);
v4 = 1137;
v7 = 0;
v7 = isSmallChunk__system_u6533(v8);
if ( !v7 )
{
v4 = 1138;
v9 -= 48;
}
popFrame_4();
return v9;
}
//----- (000000014000820F) ----------------------------------------------------
_QWORD **__fastcall addToSharedFreeList__system_u6835(__int64 a1, signed __int64 *a2, __int64 a3)
{
signed __int64 v3; // rtt
signed __int64 v4; // rcx
bool v5; // al
_BYTE v7[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v8; // [rsp+28h] [rbp-38h]
__int64 v9; // [rsp+30h] [rbp-30h]
const char *v10; // [rsp+38h] [rbp-28h]
__int16 v11; // [rsp+40h] [rbp-20h]
bool v12; // [rsp+57h] [rbp-9h]
signed __int64 v13; // [rsp+58h] [rbp-8h]
v8 = "addToSharedFreeList";
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v9 = 0;
v11 = 0;
nimFrame_4((__int64)v7);
v9 = 827;
do
{
v9 = 815;
v13 = 0;
v13 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * (a3 + 256));
*a2 = v13;
v9 = 816;
v12 = 0;
v3 = *a2;
v4 = _InterlockedCompareExchange64(
(volatile signed __int64 *)(8 * (a3 + 256) + *(_QWORD *)(a1 + 16)),
(signed __int64)a2,
*a2);
v5 = v3 == v4;
if ( v3 != v4 )
*a2 = v4;
v12 = v5;
}
while ( !v5 );
v9 = 817;
return popFrame_4();
}
//----- (0000000140008302) ----------------------------------------------------
_QWORD **__fastcall rawDealloc__system_u7119(__int64 a1, signed __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-70h] BYREF
const char *v4; // [rsp+28h] [rbp-68h]
__int64 v5; // [rsp+30h] [rbp-60h]
const char *v6; // [rsp+38h] [rbp-58h]
__int16 v7; // [rsp+40h] [rbp-50h]
__int64 v8; // [rsp+58h] [rbp-38h]
signed __int64 *v9; // [rsp+60h] [rbp-30h]
__int64 v10; // [rsp+68h] [rbp-28h]
__int64 *v11; // [rsp+70h] [rbp-20h]
bool v12; // [rsp+7Fh] [rbp-11h]
__int64 *v13; // [rsp+80h] [rbp-10h]
bool v14; // [rsp+8Eh] [rbp-2h]
bool v15; // [rsp+8Fh] [rbp-1h]
v4 = "rawDealloc";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 997;
v13 = (__int64 *)pageAddr__system_u6650((__int64)a2);
v5 = 999;
v12 = 0;
v12 = isSmallChunk__system_u6533((__int64)v13);
if ( !v12 )
{
v5 = 1060;
if ( a1 == v13[2] )
{
v5 = 1061;
deallocBigChunk__system_u6800(a1, v13);
}
else
{
v5 = 1063;
addToSharedFreeListBigChunks__system_u6811(v13[2], (signed __int64)v13);
}
}
else
{
v11 = v13;
v5 = 1002;
v10 = v13[1];
v9 = a2;
v5 = 1006;
if ( a1 == v13[2] )
{
v5 = 1008;
*(_QWORD *)(a1 + 10376) -= v10;
v5 = 1021;
v8 = *(_QWORD *)(a1 + 8 * (v10 / 16));
v5 = 1022;
v15 = v8 != 0;
if ( v8 )
v15 = v11 != (__int64 *)v8;
if ( !v15 )
{
v5 = 1033;
*v9 = v11[5];
v11[5] = (__int64)v9;
v5 = 1035;
if ( v10 <= *((int *)v11 + 12) )
{
v5 = 1040;
*((_DWORD *)v11 + 12) += v10;
v5 = 1044;
v14 = 0;
v14 = *((_DWORD *)v11 + 12) == 4032;
if ( v14 )
v14 = v11[7] == 0;
if ( v14 )
{
v5 = 1045;
listRemove__system_u7052(8 * (v10 / 16) + a1, (__int64)v11);
v11[1] = 4096;
v5 = 1047;
freeBigChunk__system_u6730(a1, v11);
}
}
else
{
v5 = 1037;
listAdd__system_u6975(8 * (v10 / 16) + a1, (__int64)v11);
v5 = 1038;
*((_DWORD *)v11 + 12) += v10;
}
}
else
{
v5 = 1028;
*v9 = *(_QWORD *)(v8 + 40);
*(_QWORD *)(v8 + 40) = v9;
v5 = 1030;
*(_DWORD *)(v8 + 48) += v10;
v5 = 1031;
++*(_QWORD *)(v8 + 56);
}
}
else
{
v5 = 1052;
addToSharedFreeList__system_u6835((__int64)v11, v9, v10 / 16);
}
}
return popFrame_4();
}
//----- (00000001400086CC) ----------------------------------------------------
_QWORD **__fastcall dealloc__system_u7209(__int64 a1, signed __int64 *a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "dealloc";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 1165;
rawDealloc__system_u7119(a1, a2);
return popFrame_4();
}
//----- (0000000140008730) ----------------------------------------------------
_QWORD *__fastcall realloc__system_u7212(__int64 a1, signed __int64 *a2, __int64 a3)
{
size_t v3; // rax
_BYTE v5[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v6; // [rsp+28h] [rbp-38h]
__int64 v7; // [rsp+30h] [rbp-30h]
const char *v8; // [rsp+38h] [rbp-28h]
__int16 v9; // [rsp+40h] [rbp-20h]
__int64 v10; // [rsp+50h] [rbp-10h]
_QWORD *v11; // [rsp+58h] [rbp-8h]
v6 = "realloc";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\alloc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v11 = 0;
v7 = 1169;
if ( a3 <= 0 )
{
v7 = 1174;
if ( a2 )
{
v7 = 1175;
dealloc__system_u7209(a1, a2);
}
}
else
{
v7 = 1170;
v11 = alloc__system_u7201(a1, a3);
v7 = 1171;
if ( a2 )
{
v7 = 1172;
v10 = 0;
v10 = ptrSize__system_u7189((__int64)a2);
v3 = a3;
if ( v10 <= a3 )
v3 = v10;
copyMem__system_u1731_0(v11, a2, v3);
v7 = 1173;
dealloc__system_u7209(a1, a2);
}
}
popFrame_4();
return v11;
}
//----- (000000014000885E) ----------------------------------------------------
_QWORD *__fastcall reallocImpl__system_u1753(signed __int64 *a1, __int64 a2)
{
void *address; // rax
address = _emutls_get_address(&_emutls_v_allocator__system_u7250);
return realloc__system_u7212((__int64)address, a1, a2);
}
//----- (00000001400088A1) ----------------------------------------------------
_QWORD *__fastcall reallocSharedImpl__system_u1766(signed __int64 *a1, __int64 a2)
{
return reallocImpl__system_u1753(a1, a2);
}
//----- (00000001400088CF) ----------------------------------------------------
_QWORD **__fastcall resize__system_u3246(__int64 a1)
{
__int64 v1; // rcx
__int64 v2; // rax
bool v3; // dl
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+50h] [rbp-20h]
__int64 v11; // [rsp+58h] [rbp-18h]
_QWORD *v12; // [rsp+60h] [rbp-10h]
__int64 v13; // [rsp+68h] [rbp-8h]
v6 = "resize";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v7 = 20;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v1 = *(_QWORD *)(a1 + 8) / 2LL;
v2 = *(_QWORD *)(a1 + 8);
v11 = v1 + v2;
if ( __OFADD__(v1, v2)
|| (*(_QWORD *)(a1 + 8) = v11,
v7 = 21,
v3 = !is_mul_ok(0x10u, *(_QWORD *)(a1 + 8)),
v10 = 16LL * *(_QWORD *)(a1 + 8),
v3) )
{
raiseOverflow();
}
else
{
v13 = v10;
v7 = 23;
if ( v10 >= 0 )
{
v12 = 0;
v12 = reallocSharedImpl__system_u1766(*(signed __int64 **)(a1 + 16), v13);
*(_QWORD *)(a1 + 16) = v12;
}
else
{
raiseRangeErrorI(v13, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
return popFrame_4();
}
//----- (0000000140008A1E) ----------------------------------------------------
_QWORD **__fastcall add__system_u3238(__int64 *a1, __int64 a2, __int64 a3)
{
bool v3; // dl
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+58h] [rbp-18h]
__int64 v11; // [rsp+60h] [rbp-10h]
__int64 v12; // [rsp+68h] [rbp-8h]
v6 = "add";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v7 = 28;
if ( a1[1] <= *a1 )
{
v7 = 29;
resize__system_u3246((__int64)a1);
}
v7 = 30;
v12 = a2;
v11 = a3;
*(_QWORD *)(a1[2] + 16 * *a1) = a2;
*(_QWORD *)(a1[2] + 16 * *a1 + 8) = v11;
v7 = 31;
v3 = __OFADD__(1, *a1);
v10 = *a1 + 1;
if ( v3 )
raiseOverflow();
else
*a1 = v10;
return popFrame_4();
}
//----- (0000000140008B39) ----------------------------------------------------
_QWORD **__fastcall init__system_u3382(_QWORD *a1, __int64 a2)
{
bool v2; // dl
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h]
_QWORD *v10; // [rsp+58h] [rbp-8h]
v5 = "init";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
*a1 = 0;
a1[1] = a2;
v6 = 37;
v2 = !is_mul_ok(0x10u, a1[1]);
v9 = 16LL * a1[1];
if ( v2 )
{
raiseOverflow();
}
else if ( v9 >= 0 )
{
v10 = 0;
v10 = allocSharedImpl(v9);
a1[2] = v10;
}
else
{
raiseRangeErrorNoArgs();
}
return popFrame_4();
}
//----- (0000000140008C1B) ----------------------------------------------------
_QWORD **__fastcall trace__system_u2913(__int64 a1, __int64 a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v5; // [rsp+28h] [rbp-48h]
__int64 v6; // [rsp+30h] [rbp-40h]
const char *v7; // [rsp+38h] [rbp-38h]
__int16 v8; // [rsp+40h] [rbp-30h]
__int64 v9; // [rsp+58h] [rbp-18h]
__int64 v10; // [rsp+60h] [rbp-10h]
void *v11; // [rsp+68h] [rbp-8h]
v5 = "trace";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v11 = nimErrorFlag_3();
v6 = 78;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( *(_QWORD *)(a2 + 32) )
{
v6 = 61;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\seqs_v2.nim";
v10 = 0;
v10 = pluspercent___system_u793(a1, 16);
v9 = v10;
v6 = 80;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
(*(void (__fastcall **)(__int64, __int64))(a2 + 32))(v10, a3);
}
return popFrame_4();
}
//----- (0000000140008D0F) ----------------------------------------------------
_QWORD *__fastcall pop__system_u3128(_QWORD *a1, __int64 *a2)
{
bool v2; // dl
__int64 *v3; // rax
__int64 v4; // rdx
__int64 v5; // rdx
_BYTE v7[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v8; // [rsp+28h] [rbp-48h]
__int64 v9; // [rsp+30h] [rbp-40h]
const char *v10; // [rsp+38h] [rbp-38h]
__int16 v11; // [rsp+40h] [rbp-30h]
__int64 v12; // [rsp+50h] [rbp-20h]
__int64 v13; // [rsp+58h] [rbp-18h]
__int64 v14; // [rsp+60h] [rbp-10h]
__int64 v15; // [rsp+68h] [rbp-8h]
v8 = "pop";
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v9 = 0;
v11 = 0;
nimFrame_4((__int64)v7);
v9 = 52;
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v2 = __OFSUB__(*a2, 1);
v13 = *a2 - 1;
if ( v2
|| (v3 = (__int64 *)(a2[2] + 16 * v13),
v4 = v3[1],
v14 = *v3,
v15 = v4,
v9 = 53,
LOBYTE(v4) = __OFSUB__(*a2, 1),
v12 = *a2 - 1,
(v4 & 1) != 0) )
{
raiseOverflow();
}
else
{
*a2 = v12;
}
popFrame_4();
v5 = v15;
*a1 = v14;
a1[1] = v5;
return a1;
}
//----- (0000000140008E1D) ----------------------------------------------------
_QWORD **__fastcall markGray__system_u3149(unsigned __int64 *a1, __int64 a2, __int64 *a3)
{
__int64 v3; // rax
__int64 v4; // rax
__int64 v5; // rdx
__int64 v6; // rax
__int64 v7; // rax
__int64 v8; // rax
__int64 v9; // rdx
__int64 v11; // [rsp+30h] [rbp-B0h]
_QWORD v12[3]; // [rsp+50h] [rbp-90h] BYREF
__int64 v13; // [rsp+68h] [rbp-78h]
__int64 v14; // [rsp+70h] [rbp-70h]
__int64 v15; // [rsp+78h] [rbp-68h]
char v16[8]; // [rsp+80h] [rbp-60h] BYREF
const char *v17; // [rsp+88h] [rbp-58h]
__int64 v18; // [rsp+90h] [rbp-50h]
const char *v19; // [rsp+98h] [rbp-48h]
__int16 v20; // [rsp+A0h] [rbp-40h]
unsigned __int64 *v21; // [rsp+B8h] [rbp-28h]
unsigned __int64 *v22; // [rsp+C0h] [rbp-20h]
__int64 v23; // [rsp+C8h] [rbp-18h]
__int64 v24; // [rsp+D0h] [rbp-10h]
_BYTE *v25; // [rsp+D8h] [rbp-8h]
v17 = "markGray";
v19 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v18 = 0;
v20 = 0;
nimFrame_4((__int64)v16);
v25 = nimErrorFlag_3();
v18 = 188;
v19 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( (*a1 & 3) != 1 )
{
v18 = 38;
*a1 = *a1 & 0xFFFFFFFFFFFFFFFCuLL | 1;
v18 = 190;
v3 = a3[7];
v15 = v3 + 1;
if ( __OFADD__(1, v3)
|| (a3[7] = v15, v18 = 192, v4 = (__int64)*a1 >> 4, v14 = v4 + 1, __OFADD__(1, v4))
|| (v5 = a3[9], v13 = v5 + v14, __OFADD__(v5, v14)) )
{
raiseOverflow();
}
else
{
a3[9] = v13;
v18 = 194;
trace__system_u2913((__int64)a1, a2, (__int64)a3);
if ( !*v25 )
{
v18 = 195;
while ( *a3 > 0 )
{
v18 = 196;
pop__system_u3128(v12, a3);
v24 = v12[0];
v23 = v12[1];
v18 = 58;
v19 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v22 = 0;
v22 = (unsigned __int64 *)minuspercent___system_u813_1(*(_QWORD *)v12[0], 16);
v21 = v22;
v18 = 198;
v19 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( __OFSUB__(*v22, 16) || (*v21 = *v22 - 16, v18 = 199, v6 = a3[8], __OFADD__(1, v6)) )
{
LABEL_18:
raiseOverflow();
return popFrame_4();
}
a3[8] = v6 + 1;
v18 = 206;
if ( (*v21 & 3) != 1 )
{
v18 = 38;
*v21 = *v21 & 0xFFFFFFFFFFFFFFFCuLL | 1;
v18 = 208;
v7 = a3[7];
if ( __OFADD__(1, v7) )
goto LABEL_18;
a3[7] = v7 + 1;
v18 = 210;
v8 = (__int64)*v21 >> 4;
v11 = v8 + 2;
if ( __OFADD__(2, v8) )
goto LABEL_18;
v9 = a3[9];
if ( __OFADD__(v9, v11) )
goto LABEL_18;
a3[9] = v9 + v11;
v18 = 211;
trace__system_u2913((__int64)v21, v23, (__int64)a3);
if ( *v25 )
return popFrame_4();
}
}
}
}
}
return popFrame_4();
}
//----- (0000000140009256) ----------------------------------------------------
_QWORD **__fastcall scanBlack__system_u3120(_QWORD *a1, __int64 a2, __int64 *a3)
{
_QWORD v4[2]; // [rsp+30h] [rbp-70h] BYREF
_BYTE v5[8]; // [rsp+40h] [rbp-60h] BYREF
const char *v6; // [rsp+48h] [rbp-58h]
__int64 v7; // [rsp+50h] [rbp-50h]
const char *v8; // [rsp+58h] [rbp-48h]
__int16 v9; // [rsp+60h] [rbp-40h]
_QWORD *v10; // [rsp+70h] [rbp-30h]
_QWORD *v11; // [rsp+78h] [rbp-28h]
__int64 v12; // [rsp+80h] [rbp-20h]
__int64 v13; // [rsp+88h] [rbp-18h]
__int64 v14; // [rsp+90h] [rbp-10h]
_BYTE *v15; // [rsp+98h] [rbp-8h]
v6 = "scanBlack";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v15 = nimErrorFlag_3();
v7 = 36;
*a1 &= 0xFFFFFFFFFFFFFFFCuLL;
v7 = 166;
v14 = *a3;
v7 = 167;
trace__system_u2913((__int64)a1, a2, (__int64)a3);
if ( !*v15 )
{
v7 = 169;
while ( v14 < *a3 )
{
v7 = 170;
pop__system_u3128(v4, a3);
v13 = v4[0];
v12 = v4[1];
v7 = 58;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v11 = 0;
v11 = (_QWORD *)minuspercent___system_u813_1(*(_QWORD *)v4[0], 16);
v10 = v11;
v7 = 172;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( __OFADD__(16, *v11) )
{
raiseOverflow();
return popFrame_4();
}
*v10 = *v11 + 16LL;
v7 = 173;
if ( (*v10 & 3LL) != 0 )
{
v7 = 36;
*v10 &= 0xFFFFFFFFFFFFFFFCuLL;
v7 = 175;
trace__system_u2913((__int64)v10, v12, (__int64)a3);
if ( *v15 )
return popFrame_4();
}
}
}
return popFrame_4();
}
//----- (000000014000945A) ----------------------------------------------------
_QWORD **__fastcall scan__system_u3205(unsigned __int64 *a1, __int64 a2, __int64 *a3)
{
_QWORD v4[2]; // [rsp+20h] [rbp-70h] BYREF
_BYTE v5[8]; // [rsp+30h] [rbp-60h] BYREF
const char *v6; // [rsp+38h] [rbp-58h]
__int64 v7; // [rsp+40h] [rbp-50h]
const char *v8; // [rsp+48h] [rbp-48h]
__int16 v9; // [rsp+50h] [rbp-40h]
unsigned __int64 *v10; // [rsp+68h] [rbp-28h]
unsigned __int64 *v11; // [rsp+70h] [rbp-20h]
__int64 v12; // [rsp+78h] [rbp-18h]
__int64 v13; // [rsp+80h] [rbp-10h]
_BYTE *v14; // [rsp+88h] [rbp-8h]
v6 = "scan";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v14 = nimErrorFlag_3();
v7 = 223;
if ( (*a1 & 3) == 1 )
{
v7 = 224;
if ( (__int64)*a1 >> 4 < 0 )
{
v7 = 38;
*a1 = *a1 & 0xFFFFFFFFFFFFFFFCuLL | 2;
v7 = 248;
trace__system_u2913((__int64)a1, a2, (__int64)a3);
if ( !*v14 )
{
v7 = 249;
while ( *a3 > 0 )
{
v7 = 250;
pop__system_u3128(v4, a3);
v13 = v4[0];
v12 = v4[1];
v7 = 58;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v11 = 0;
v11 = (unsigned __int64 *)minuspercent___system_u813_1(*(_QWORD *)v4[0], 16);
v10 = v11;
v7 = 252;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( (*v11 & 3) == 1 )
{
v7 = 253;
if ( (__int64)*v10 >> 4 < 0 )
{
v7 = 38;
*v10 = *v10 & 0xFFFFFFFFFFFFFFFCuLL | 2;
v7 = 273;
trace__system_u2913((__int64)v10, v12, (__int64)a3);
if ( *v14 )
return popFrame_4();
}
else
{
v7 = 254;
scanBlack__system_u3120(v10, v12, a3);
if ( *v14 )
return popFrame_4();
}
}
}
}
}
else
{
v7 = 225;
scanBlack__system_u3120(a1, a2, a3);
}
}
return popFrame_4();
}
//----- (00000001400096C8) ----------------------------------------------------
_QWORD **__fastcall collectColor__system_u3230(_QWORD *a1, __int64 a2, __int64 a3, __int64 *a4)
{
_QWORD v5[2]; // [rsp+20h] [rbp-70h] BYREF
_BYTE v6[8]; // [rsp+30h] [rbp-60h] BYREF
const char *v7; // [rsp+38h] [rbp-58h]
__int64 v8; // [rsp+40h] [rbp-50h]
const char *v9; // [rsp+48h] [rbp-48h]
__int16 v10; // [rsp+50h] [rbp-40h]
_QWORD *v11; // [rsp+60h] [rbp-30h]
_QWORD *v12; // [rsp+68h] [rbp-28h]
__int64 v13; // [rsp+70h] [rbp-20h]
_QWORD *v14; // [rsp+78h] [rbp-18h]
_BYTE *v15; // [rsp+80h] [rbp-10h]
bool v16; // [rsp+8Eh] [rbp-2h]
bool v17; // [rsp+8Fh] [rbp-1h]
v7 = "collectColor";
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v8 = 0;
v10 = 0;
nimFrame_4((__int64)v6);
v15 = nimErrorFlag_3();
v8 = 291;
v17 = 0;
v17 = a3 == (*a1 & 3LL);
if ( v17 )
v17 = a1[1] == 0;
if ( v17 )
{
v8 = 36;
*a1 &= 0xFFFFFFFFFFFFFFFCuLL;
v8 = 295;
add__system_u3238(a4 + 3, (__int64)a1, a2);
v8 = 296;
trace__system_u2913((__int64)a1, a2, (__int64)a4);
if ( !*v15 )
{
v8 = 297;
while ( *a4 > 0 )
{
v8 = 298;
pop__system_u3128(v5, a4);
v14 = (_QWORD *)v5[0];
v13 = v5[1];
v8 = 58;
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v12 = 0;
v12 = (_QWORD *)minuspercent___system_u813_1(*(_QWORD *)v5[0], 16);
v11 = v12;
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
*v14 = 0;
v8 = 301;
v16 = 0;
v16 = a3 == (*v11 & 3LL);
if ( v16 )
v16 = v11[1] == 0;
if ( v16 )
{
v8 = 302;
add__system_u3238(a4 + 3, (__int64)v11, v13);
v8 = 36;
*v11 &= 0xFFFFFFFFFFFFFFFCuLL;
v8 = 304;
trace__system_u2913((__int64)v11, v13, (__int64)a4);
if ( *v15 )
break;
}
}
}
}
return popFrame_4();
}
//----- (0000000140009954) ----------------------------------------------------
_QWORD **__fastcall deallocImpl__system_u1751(signed __int64 *a1)
{
void *address; // rax
address = _emutls_get_address(&_emutls_v_allocator__system_u7250);
return dealloc__system_u7209((__int64)address, a1);
}
//----- (0000000140009985) ----------------------------------------------------
_QWORD **__fastcall deallocSharedImpl__system_u1764(signed __int64 *a1)
{
return deallocImpl__system_u1751(a1);
}
//----- (00000001400099A4) ----------------------------------------------------
_QWORD **__fastcall deallocShared(signed __int64 *a1)
{
return deallocSharedImpl__system_u1764(a1);
}
//----- (00000001400099C3) ----------------------------------------------------
_QWORD **__fastcall alignedDealloc(signed __int64 *a1, __int64 a2)
{
signed __int64 *v3; // [rsp+28h] [rbp-18h]
unsigned __int16 v4; // [rsp+36h] [rbp-Ah]
if ( a2 <= 16 )
return deallocShared(a1);
v4 = *(_WORD *)minuspercent___system_u813_1((__int64)a1, 2);
v3 = (signed __int64 *)minuspercent___system_u813_1((__int64)a1, v4);
return deallocShared(v3);
}
//----- (0000000140009A41) ----------------------------------------------------
_QWORD **__fastcall nimRawDispose(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
signed __int64 *v8; // [rsp+50h] [rbp-10h]
__int64 v9; // [rsp+58h] [rbp-8h]
v4 = "nimRawDispose";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 190;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v9 = align__system_u1634(16, a2);
v5 = 64;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\seqs_v2.nim";
v8 = 0;
v8 = (signed __int64 *)minuspercent___system_u813_1(a1, v9);
v5 = 191;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
alignedDealloc(v8, a2);
return popFrame_4();
}
//----- (0000000140009B0F) ----------------------------------------------------
_QWORD **__fastcall free__system_u2961(__int64 a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8; // [rsp+58h] [rbp-18h]
__int64 v9; // [rsp+60h] [rbp-10h]
_BYTE *v10; // [rsp+68h] [rbp-8h]
v4 = "free";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v10 = nimErrorFlag_3();
v5 = 61;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\seqs_v2.nim";
v9 = 0;
v9 = pluspercent___system_u793(a1, 16);
v8 = v9;
v5 = 100;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( !*(_QWORD *)a2 || (v5 = 101, (*(void (__fastcall **)(__int64))a2)(v8), !*v10) )
{
v5 = 115;
nimRawDispose(v8, *(__int16 *)(a2 + 16));
}
return popFrame_4();
}
//----- (0000000140009C1D) ----------------------------------------------------
_QWORD **__fastcall deinit__system_u3369(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v3; // [rsp+28h] [rbp-28h]
__int64 v4; // [rsp+30h] [rbp-20h]
const char *v5; // [rsp+38h] [rbp-18h]
__int16 v6; // [rsp+40h] [rbp-10h]
v3 = "deinit";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 42;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
if ( *(_QWORD *)(a1 + 16) )
{
v4 = 44;
deallocShared(*(signed __int64 **)(a1 + 16));
v4 = 47;
*(_QWORD *)(a1 + 16) = 0;
}
*(_QWORD *)a1 = 0;
v4 = 49;
*(_QWORD *)(a1 + 8) = 0;
return popFrame_4();
}
//----- (0000000140009CDB) ----------------------------------------------------
_QWORD **__fastcall collectCyclesBacon__system_u3302(__int64 a1, __int64 a2)
{
__int64 v2; // rax
_QWORD *address; // rax
_QWORD *v4; // rax
_QWORD *v5; // rax
_QWORD *v6; // rax
__int64 *v7; // rax
_QWORD *v8; // rax
__int64 v9; // rdx
__int64 v10; // rax
_BYTE v12[8]; // [rsp+40h] [rbp-B0h] BYREF
const char *v13; // [rsp+48h] [rbp-A8h]
__int64 v14; // [rsp+50h] [rbp-A0h]
const char *v15; // [rsp+58h] [rbp-98h]
__int16 v16; // [rsp+60h] [rbp-90h]
__int64 v17; // [rsp+78h] [rbp-78h]
__int64 v18; // [rsp+80h] [rbp-70h]
__int64 v19; // [rsp+88h] [rbp-68h]
__int64 v20; // [rsp+90h] [rbp-60h]
_QWORD *v21; // [rsp+98h] [rbp-58h]
__int64 v22; // [rsp+A0h] [rbp-50h]
__int64 v23; // [rsp+A8h] [rbp-48h]
__int64 v24; // [rsp+B0h] [rbp-40h]
__int64 v25; // [rsp+B8h] [rbp-38h]
_BYTE *v26; // [rsp+C0h] [rbp-30h]
__int64 v27; // [rsp+C8h] [rbp-28h]
__int64 v28; // [rsp+D0h] [rbp-20h]
__int64 v29; // [rsp+D8h] [rbp-18h]
__int64 v30; // [rsp+E0h] [rbp-10h]
__int64 v31; // [rsp+E8h] [rbp-8h]
v13 = "collectCyclesBacon";
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v14 = 0;
v16 = 0;
nimFrame_4((__int64)v12);
v26 = nimErrorFlag_3();
v14 = 328;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v2 = *(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091);
v18 = v2 - 1;
if ( __OFSUB__(v2, 1) )
goto LABEL_26;
v25 = v18;
v24 = 0;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v30 = v18;
v14 = 34;
while ( a2 <= v30 )
{
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v24 = v30;
v14 = 334;
address = _emutls_get_address(&_emutls_v_roots__system_u3091);
markGray__system_u3149(
*(unsigned __int64 **)(address[2] + 16 * v24),
*(_QWORD *)(address[2] + 16 * v24 + 8),
(__int64 *)a1);
if ( *v26 )
return popFrame_4();
v14 = 39;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
if ( __OFSUB__(v30, 1) )
goto LABEL_26;
--v30;
}
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v31 = 2;
v14 = 337;
if ( *(_QWORD *)(a1 + 72) == *(_QWORD *)(a1 + 64) )
{
v31 = 1;
v14 = 341;
*(_BYTE *)(a1 + 80) = 1;
}
else
{
v23 = 0;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v29 = v25;
v14 = 34;
while ( a2 <= v29 )
{
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v23 = v29;
v14 = 344;
v4 = _emutls_get_address(&_emutls_v_roots__system_u3091);
scan__system_u3205(*(unsigned __int64 **)(v4[2] + 16 * v23), *(_QWORD *)(v4[2] + 16 * v23 + 8), (__int64 *)a1);
if ( *v26 )
return popFrame_4();
v14 = 39;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
if ( __OFSUB__(v29, 1) )
goto LABEL_26;
--v29;
}
}
v14 = 346;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
init__system_u3330((_QWORD *)(a1 + 24), 1024);
v22 = 0;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v28 = 0;
v14 = 129;
while ( 1 )
{
v5 = _emutls_get_address(&_emutls_v_roots__system_u3091);
if ( v28 >= *v5 )
break;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v22 = v28;
v14 = 348;
v6 = _emutls_get_address(&_emutls_v_roots__system_u3091);
v21 = *(_QWORD **)(v6[2] + 16 * v22);
v21[1] = 0;
v14 = 350;
collectColor__system_u3230(v21, *(_QWORD *)(v6[2] + 16 * v22 + 8), v31, (__int64 *)a1);
if ( *v26 )
return popFrame_4();
v14 = 131;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
if ( __OFADD__(1, v28) )
goto LABEL_26;
++v28;
}
v14 = 357;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v7 = (__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
v20 = *v7;
*v7 = 0x7FFFFFFFFFFFFFFFLL;
v14 = 359;
*(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091) = 0;
v19 = 0;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v27 = 0;
v14 = 129;
while ( v27 < *(_QWORD *)(a1 + 24) )
{
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v19 = v27;
v14 = 364;
free__system_u2961(*(_QWORD *)(*(_QWORD *)(a1 + 40) + 16 * v27), *(_QWORD *)(*(_QWORD *)(a1 + 40) + 16 * v27 + 8));
v14 = 131;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
if ( __OFADD__(1, v27) )
goto LABEL_26;
++v27;
}
v14 = 367;
v15 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v8 = _emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
*v8 = v20;
v14 = 369;
v9 = *(_QWORD *)(a1 + 48);
v10 = *(_QWORD *)(a1 + 24);
v17 = v9 + v10;
if ( __OFADD__(v9, v10) )
{
LABEL_26:
raiseOverflow();
}
else
{
*(_QWORD *)(a1 + 48) = v17;
v14 = 370;
deinit__system_u3369(a1 + 24);
}
return popFrame_4();
}
//----- (000000014000A3F8) ----------------------------------------------------
_QWORD **__fastcall deinit__system_u3394(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v3; // [rsp+28h] [rbp-28h]
__int64 v4; // [rsp+30h] [rbp-20h]
const char *v5; // [rsp+38h] [rbp-18h]
__int16 v6; // [rsp+40h] [rbp-10h]
v3 = "deinit";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 42;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
if ( *(_QWORD *)(a1 + 16) )
{
v4 = 44;
deallocShared(*(signed __int64 **)(a1 + 16));
v4 = 47;
*(_QWORD *)(a1 + 16) = 0;
}
*(_QWORD *)a1 = 0;
v4 = 49;
*(_QWORD *)(a1 + 8) = 0;
return popFrame_4();
}
//----- (000000014000A4B6) ----------------------------------------------------
_QWORD **collectCycles__system_u3430()
{
void *address; // rax
unsigned __int64 v1; // kr00_8
__int64 v2; // rbx
_QWORD *v3; // rax
__int64 *v4; // rax
__int64 *v5; // rax
__int64 v6; // rcx
__int64 v7; // rax
__int64 v8; // rbx
__int64 v10; // [rsp+0h] [rbp-E0h] BYREF
__int64 v11; // [rsp+28h] [rbp-B8h]
__int64 v12; // [rsp+30h] [rbp-B0h]
signed __int64 v13; // [rsp+38h] [rbp-A8h]
const char *v14; // [rsp+48h] [rbp-98h]
__int64 v15; // [rsp+50h] [rbp-90h]
const char *v16; // [rsp+58h] [rbp-88h]
__int16 v17; // [rsp+60h] [rbp-80h]
_QWORD v18[6]; // [rsp+70h] [rbp-70h] BYREF
unsigned __int64 v19; // [rsp+A0h] [rbp-40h]
signed __int64 v20; // [rsp+A8h] [rbp-38h]
char v21; // [rsp+C0h] [rbp-20h]
__int64 v22; // [rsp+C8h] [rbp-18h]
__int64 v23; // [rsp+D0h] [rbp-10h]
_BYTE *v24; // [rsp+D8h] [rbp-8h]
v14 = "collectCycles";
v16 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v15 = 0;
v17 = 0;
nimFrame_4((__int64)(&v10 + 8));
v24 = nimErrorFlag_3();
nimZeroMem_1(v18, 0x58u);
v15 = 397;
v16 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
init__system_u3382(v18, 1024);
v15 = 407;
collectCyclesBacon__system_u3302((__int64)v18, 0);
if ( !*v24 )
{
v15 = 409;
deinit__system_u3394((__int64)v18);
v15 = 410;
if ( !*(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091) )
{
v15 = 411;
address = _emutls_get_address(&_emutls_v_roots__system_u3091);
deinit__system_u3369((__int64)address);
}
v15 = 418;
if ( v21 != 1 )
{
v15 = 420;
v13 = 2 * v19;
if ( !is_mul_ok(2u, v19) )
{
LABEL_17:
raiseOverflow();
return popFrame_4();
}
if ( v20 > v13 )
{
v15 = 426;
if ( *(__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301) <= 0x1FFFFFFFFFFFFFFELL )
{
v23 = 0;
v22 = 0;
v15 = 427;
if ( *(__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301) > 0 )
{
v4 = (__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
v22 = *v4;
*v4 = v22;
}
else
{
v23 = 128;
v3 = _emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
*v3 = v23;
}
v15 = 428;
v5 = (__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
v6 = *v5 / 2;
v7 = *v5;
v11 = v6 + v7;
if ( !__OFADD__(v6, v7) )
{
v8 = v11;
*(_QWORD *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301) = v8;
return popFrame_4();
}
goto LABEL_17;
}
}
else
{
v15 = 422;
v1 = *(_QWORD *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301) / 3LL;
v12 = 2 * v1;
if ( !is_mul_ok(2u, v1) )
goto LABEL_17;
v2 = 16;
if ( v12 >= 16 )
v2 = v12;
*(_QWORD *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301) = v2;
}
}
}
return popFrame_4();
}
//----- (000000014000A80D) ----------------------------------------------------
_QWORD **__fastcall registerCycle__system_u3455(__int64 a1, __int64 a2)
{
__int64 v2; // rax
_QWORD *address; // rax
__int64 *v4; // rbx
bool v5; // dl
__int64 *v6; // rax
__int64 v8; // [rsp+0h] [rbp-70h] BYREF
__int64 v9; // [rsp+28h] [rbp-48h]
const char *v10; // [rsp+38h] [rbp-38h]
__int64 v11; // [rsp+40h] [rbp-30h]
const char *v12; // [rsp+48h] [rbp-28h]
__int16 v13; // [rsp+50h] [rbp-20h]
__int64 v14; // [rsp+60h] [rbp-10h]
void *v15; // [rsp+68h] [rbp-8h]
v10 = "registerCycle";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)(&v8 + 6));
v15 = nimErrorFlag_3();
v11 = 444;
v2 = *(_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091);
v14 = v2 + 1;
if ( __OFADD__(1, v2) )
goto LABEL_2;
*(_QWORD *)(a1 + 8) = v14;
v11 = 445;
if ( !*((_QWORD *)_emutls_get_address(&_emutls_v_roots__system_u3091) + 2) )
{
address = _emutls_get_address(&_emutls_v_roots__system_u3091);
init__system_u3330(address, 1024);
}
v11 = 446;
v4 = (__int64 *)_emutls_get_address(&_emutls_v_roots__system_u3091);
add__system_u3238(v4, a1, a2);
v11 = 448;
v5 = __OFSUB__(*v4, 128);
v9 = *v4 - 128;
if ( v5 )
{
LABEL_2:
raiseOverflow();
}
else
{
v6 = (__int64 *)_emutls_get_address(&_emutls_v_rootsThreshold__system_u3301);
if ( *v6 <= v9 )
{
v11 = 449;
collectCycles__system_u3430();
}
}
return popFrame_4();
}
//----- (000000014000A998) ----------------------------------------------------
_QWORD **__fastcall rememberCycle__system_u3495(char a1, _QWORD *a2, __int64 a3)
{
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
void *v9; // [rsp+50h] [rbp-10h]
bool v10; // [rsp+5Fh] [rbp-1h]
v5 = "rememberCycle";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v9 = nimErrorFlag_3();
v6 = 501;
if ( a1 != 1 )
{
v6 = 507;
v10 = 0;
v10 = a2[1] == 0;
if ( v10 )
{
v6 = 498;
v10 = (*(_QWORD *)(a3 + 48) & 1LL) == 0;
}
if ( v10 )
{
v6 = 36;
*a2 &= 0xFFFFFFFFFFFFFFFCuLL;
v6 = 509;
registerCycle__system_u3455((__int64)a2, a3);
}
}
else
{
v6 = 502;
if ( (__int64)a2[1] > 0 )
{
v6 = 503;
unregisterCycle__system_u3092((__int64)a2);
}
}
return popFrame_4();
}
//----- (000000014000AAD0) ----------------------------------------------------
_QWORD **__fastcall nimDestroyAndDispose(_QWORD **a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
_QWORD **v7; // [rsp+58h] [rbp-8h]
v3 = "nimDestroyAndDispose";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v7 = a1;
v4 = 198;
if ( **a1 )
{
v4 = 199;
((void (__fastcall *)(_QWORD **))**v7)(a1);
}
v4 = 207;
nimRawDispose((__int64)a1, *((__int16 *)*v7 + 8));
return popFrame_4();
}
//----- (000000014000AB8E) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___stdZassertions_u74(__int64 a1)
{
_QWORD **result; // rax
signed __int64 *v2; // [rsp+28h] [rbp-8h]
v2 = *(signed __int64 **)(a1 + 8);
result = (_QWORD **)v2;
if ( v2 )
{
result = (_QWORD **)(*v2 & 0x4000000000000000LL);
if ( !result )
return alignedDealloc(v2, 8);
}
return result;
}
//----- (000000014000ABE9) ----------------------------------------------------
_QWORD **__fastcall resize__system_u2986(__int64 a1)
{
__int64 v1; // rcx
__int64 v2; // rax
bool v3; // dl
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+50h] [rbp-20h]
__int64 v11; // [rsp+58h] [rbp-18h]
_QWORD *v12; // [rsp+60h] [rbp-10h]
__int64 v13; // [rsp+68h] [rbp-8h]
v6 = "resize";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v7 = 0;
v9 = 0;
nimFrame_4((__int64)v5);
v7 = 20;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\cellseqs_v2.nim";
v1 = *(_QWORD *)(a1 + 8) / 2LL;
v2 = *(_QWORD *)(a1 + 8);
v11 = v1 + v2;
if ( __OFADD__(v1, v2)
|| (*(_QWORD *)(a1 + 8) = v11,
v7 = 21,
v3 = !is_mul_ok(0x10u, *(_QWORD *)(a1 + 8)),
v10 = 16LL * *(_QWORD *)(a1 + 8),
v3) )
{
raiseOverflow();
}
else
{
v13 = v10;
v7 = 23;
if ( v10 >= 0 )
{
v12 = 0;
v12 = reallocSharedImpl__system_u1766(*(signed __int64 **)(a1 + 16), v13);
*(_QWORD *)(a1 + 16) = v12;
}
else
{
raiseRangeErrorI(v13, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
return popFrame_4();
}
//----- (000000014000AD38) ----------------------------------------------------
signed __int64 __fastcall nimAsgnStrV2(__int64 a1, __int128 *a2, __int64 a3)
{
signed __int64 result; // rax
__int128 v4; // [rsp+20h] [rbp-40h]
__int64 v5; // [rsp+38h] [rbp-28h]
__int64 v6; // [rsp+48h] [rbp-18h]
bool v7; // [rsp+5Ah] [rbp-6h]
bool v8; // [rsp+5Bh] [rbp-5h]
bool v9; // [rsp+5Ch] [rbp-4h]
bool v10; // [rsp+5Dh] [rbp-3h]
bool v11; // [rsp+5Eh] [rbp-2h]
v4 = *a2;
result = *(_OWORD *)a1 != *a2;
if ( *(_OWORD *)a1 == *a2 )
return result;
v11 = *((_QWORD *)&v4 + 1) == 0;
if ( *((_QWORD *)&v4 + 1) )
v11 = (**((_QWORD **)&v4 + 1) & 0x4000000000000000LL) != 0;
if ( !v11 )
{
v8 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
v8 = (**(_QWORD **)(a1 + 8) & 0x4000000000000000LL) != 0;
v9 = v8;
if ( !v8 )
v9 = (__int64)(**(_QWORD **)(a1 + 8) & 0xBFFFFFFFFFFFFFFFuLL) < (__int64)v4;
if ( v9 )
{
v7 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
v7 = (**(_QWORD **)(a1 + 8) & 0x4000000000000000LL) != 0;
if ( !v7 )
deallocShared(*(signed __int64 **)(a1 + 8));
if ( __OFADD__(1, (_QWORD)v4) )
return (signed __int64)raiseOverflow();
v5 = v4 + 9;
if ( __OFADD__(8, v4 + 1) )
return (signed __int64)raiseOverflow();
if ( v5 < 0 )
return raiseRangeErrorI(v5, 0, 0x7FFFFFFFFFFFFFFFLL);
*(_QWORD *)(a1 + 8) = allocSharedImpl(v5);
**(_QWORD **)(a1 + 8) = v4;
}
*(_QWORD *)a1 = v4;
v6 = v4 + 1;
if ( !__OFADD__(1, (_QWORD)v4) )
{
if ( v6 >= 0 )
return (signed __int64)copyMem__system_u1731_0(
(void *)(*(_QWORD *)(a1 + 8) + 8LL),
(const void *)(*((_QWORD *)&v4 + 1) + 8LL),
v6);
else
return raiseRangeErrorI(v6, 0, 0x7FFFFFFFFFFFFFFFLL);
}
return (signed __int64)raiseOverflow();
}
v10 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
v10 = (**(_QWORD **)(a1 + 8) & 0x4000000000000000LL) != 0;
if ( !v10 )
deallocShared(*(signed __int64 **)(a1 + 8));
*(_OWORD *)a1 = v4;
return a1;
}
//----- (000000014000B08A) ----------------------------------------------------
_QWORD *__fastcall eqdup___system_u2662(_QWORD *a1, __int64 *a2, __int64 a3)
{
__int64 v3; // rax
__int64 v4; // rdx
__int64 v5; // rdx
_QWORD v7[8]; // [rsp+0h] [rbp-50h] BYREF
__int64 v8; // [rsp+40h] [rbp-10h]
__int64 v9; // [rsp+48h] [rbp-8h]
v3 = *a2;
v4 = a2[1];
v7[6] = v3;
v7[7] = v4;
v8 = 0;
v9 = 0;
v7[4] = v3;
v7[5] = v4;
nimAsgnStrV2((__int64)&v7[8], (__int128 *)&v7[4], a3);
v5 = v9;
*a1 = v8;
a1[1] = v5;
return a1;
}
//----- (000000014000B0F9) ----------------------------------------------------
_QWORD *__fastcall eqsink___stdZassertions_u83(_QWORD *a1, __int64 *a2)
{
__int64 v2; // rax
__int64 v3; // rdx
__int64 v4; // rdx
_QWORD v6[2]; // [rsp+20h] [rbp-20h] BYREF
__int64 v7; // [rsp+30h] [rbp-10h]
__int64 v8; // [rsp+38h] [rbp-8h]
v2 = *a2;
v3 = a2[1];
v7 = v2;
v8 = v3;
if ( a1[1] != v3 )
{
v4 = a1[1];
v6[0] = *a1;
v6[1] = v4;
eqdestroy___stdZassertions_u74((__int64)v6);
}
*a1 = v7;
a1[1] = v8;
return a1;
}
//----- (000000014000B169) ----------------------------------------------------
_QWORD *__fastcall shrink__stdZassertions_u102(_QWORD *a1, __int64 a2)
{
*a1 = a2;
return a1;
}
//----- (000000014000B183) ----------------------------------------------------
_QWORD *__fastcall alignedAlloc__system_u1912(__int64 a1, __int64 a2, __int64 a3)
{
__int64 v4; // [rsp+30h] [rbp-50h]
__int64 v5; // [rsp+38h] [rbp-48h]
__int64 v6; // [rsp+40h] [rbp-40h]
__int64 v7; // [rsp+48h] [rbp-38h]
__int64 v8; // [rsp+50h] [rbp-30h]
__int64 v9; // [rsp+70h] [rbp-10h]
__int64 v10; // [rsp+78h] [rbp-8h]
v10 = 0;
if ( a2 > 16 )
{
v8 = a1 + a2;
if ( !__OFADD__(a1, a2) )
{
v7 = v8 - 1;
if ( !__OFSUB__(v8, 1) )
{
v6 = v7 + 2;
if ( !__OFADD__(2, v7) )
{
if ( v6 < 0 )
{
raiseRangeErrorI(v6, 0, 0x7FFFFFFFFFFFFFFFLL);
return (_QWORD *)v10;
}
v9 = (__int64)allocSharedImpl(v6);
v5 = a2 - 1;
if ( !__OFSUB__(a2, 1) )
{
v4 = a2 - (v5 & v9);
if ( !__OFSUB__(a2, v5 & v9) && !__OFSUB__(v4, 2) )
{
*(_WORD *)pluspercent___system_u793(v9, v4 - 2) = v4;
return (_QWORD *)pluspercent___system_u793(v9, v4);
}
}
}
}
}
raiseOverflow();
return (_QWORD *)v10;
}
return allocSharedImpl(a1);
}
//----- (000000014000B384) ----------------------------------------------------
_QWORD *__fastcall newSeqPayloadUninit(signed __int64 a1, unsigned __int64 a2, __int64 a3)
{
__int64 v3; // r8
__int64 v5; // [rsp+20h] [rbp-30h]
unsigned __int64 v6; // [rsp+28h] [rbp-28h]
_QWORD *v7; // [rsp+30h] [rbp-20h]
__int64 v8; // [rsp+40h] [rbp-10h]
__int64 v9; // [rsp+48h] [rbp-8h]
v9 = 0;
if ( a1 <= 0 )
return 0;
v8 = align__system_u1634(8, a3);
v6 = a2 * a1;
if ( !is_mul_ok(a2, a1) || (v5 = v6 + v8, __OFADD__(v6, v8)) )
{
raiseOverflow();
}
else if ( v5 >= 0 )
{
if ( a3 >= 0 )
{
v7 = alignedAlloc__system_u1912(v5, a3, v3);
*v7 = a1;
return v7;
}
else
{
raiseRangeErrorI(a3, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
else
{
raiseRangeErrorI(v5, 0, 0x7FFFFFFFFFFFFFFFLL);
}
return (_QWORD *)v9;
}
// 14000B48D: variable 'v3' is possibly undefined
//----- (000000014000B4C6) ----------------------------------------------------
__int64 __fastcall resize__system_u2227(signed __int64 a1, __int64 a2, __int64 a3)
{
__int64 v4; // [rsp+38h] [rbp-8h]
if ( a1 <= 0 )
return 4;
if ( a1 > 0x7FFF )
{
if ( !__OFADD__(a1 / 2, a1) )
return a1 / 2 + a1;
}
else if ( is_mul_ok(2u, a1) )
{
return 2 * a1;
}
raiseOverflow();
return v4;
}
// 14000B575: variable 'v4' is possibly undefined
//----- (000000014000B57F) ----------------------------------------------------
_QWORD *__fastcall alignedRealloc__system_u1972(signed __int64 *a1, size_t a2, __int64 a3, __int64 a4)
{
_QWORD *v5; // [rsp+28h] [rbp-8h]
if ( a4 <= 16 )
return reallocSharedImpl__system_u1766(a1, a3);
v5 = alignedAlloc__system_u1912(a3, a4, a3);
copyMem__system_u1731_0(v5, a1, a2);
alignedDealloc(a1, a4);
return v5;
}
//----- (000000014000B5FA) ----------------------------------------------------
signed __int64 *__fastcall prepareSeqAddUninit(
unsigned __int64 a1,
signed __int64 *a2,
__int64 a3,
unsigned __int64 a4,
__int64 a5)
{
__int64 v5; // r8
__int64 v6; // r8
unsigned __int64 v7; // rax
__int64 v9; // [rsp+28h] [rbp-B8h]
unsigned __int64 v10; // [rsp+30h] [rbp-B0h]
__int64 v11; // [rsp+38h] [rbp-A8h]
unsigned __int64 v12; // [rsp+40h] [rbp-A0h]
signed __int64 v13; // [rsp+48h] [rbp-98h]
__int64 v14; // [rsp+50h] [rbp-90h]
unsigned __int64 v15; // [rsp+58h] [rbp-88h]
_QWORD *v16; // [rsp+70h] [rbp-70h]
const void *v17; // [rsp+90h] [rbp-50h]
void *v18; // [rsp+98h] [rbp-48h]
_QWORD *v19; // [rsp+A0h] [rbp-40h]
unsigned __int64 v20; // [rsp+B0h] [rbp-30h]
__int64 v21; // [rsp+B8h] [rbp-28h]
unsigned __int64 v22; // [rsp+C0h] [rbp-20h]
__int64 v23; // [rsp+D0h] [rbp-10h]
__int64 v24; // [rsp+D8h] [rbp-8h]
v24 = 0;
v23 = align__system_u1634(8, a5);
if ( a3 <= 0 )
return a2;
if ( !a2 )
{
if ( !__OFADD__(a1, a3) )
return newSeqPayloadUninit(a1 + a3, a4, a5);
LABEL_28:
raiseOverflow();
return (signed __int64 *)v24;
}
v22 = *a2 & 0xBFFFFFFFFFFFFFFFuLL;
v21 = resize__system_u2227(v22, *a2, v5);
if ( __OFADD__(a1, a3) )
goto LABEL_28;
v7 = a1 + a3;
if ( v21 >= (__int64)(a1 + a3) )
v7 = v21;
v20 = v7;
if ( (*a2 & 0x4000000000000000LL) == 0 )
{
v12 = v22 * a4;
if ( !is_mul_ok(v22, a4) )
goto LABEL_28;
v11 = v12 + v23;
if ( __OFADD__(v12, v23) )
goto LABEL_28;
v10 = v7 * a4;
if ( !is_mul_ok(v7, a4) )
goto LABEL_28;
v9 = v10 + v23;
if ( __OFADD__(v10, v23) )
goto LABEL_28;
if ( v11 < 0 )
{
raiseRangeErrorI(v11, 0, 0x7FFFFFFFFFFFFFFFLL);
return (signed __int64 *)v24;
}
if ( v9 < 0 )
{
raiseRangeErrorI(v9, 0, 0x7FFFFFFFFFFFFFFFLL);
return (signed __int64 *)v24;
}
if ( a5 >= 0 )
{
v16 = alignedRealloc__system_u1972(a2, v11, v9, a5);
*v16 = v20;
return v16;
}
goto LABEL_17;
}
v15 = v7 * a4;
if ( !is_mul_ok(v7, a4) )
goto LABEL_28;
v14 = v15 + v23;
if ( __OFADD__(v15, v23) )
goto LABEL_28;
if ( v14 < 0 )
{
raiseRangeErrorI(v14, 0, 0x7FFFFFFFFFFFFFFFLL);
return (signed __int64 *)v24;
}
if ( a5 < 0 )
{
LABEL_17:
raiseRangeErrorI(a5, 0, 0x7FFFFFFFFFFFFFFFLL);
return (signed __int64 *)v24;
}
v19 = alignedAlloc__system_u1912(v14, a5, v6);
v18 = (void *)pluspercent___system_u793((__int64)v19, v23);
v17 = (const void *)pluspercent___system_u793((__int64)a2, v23);
v13 = a4 * a1;
if ( !is_mul_ok(a4, a1) )
goto LABEL_28;
if ( v13 >= 0 )
{
copyMem__system_u1731_0(v18, v17, v13);
*v19 = v20;
return v19;
}
else
{
raiseRangeErrorI(v13, 0, 0x7FFFFFFFFFFFFFFFLL);
}
return (signed __int64 *)v24;
}
// 14000B6D3: variable 'v5' is possibly undefined
// 14000B81E: variable 'v6' is possibly undefined
//----- (000000014000BABC) ----------------------------------------------------
_QWORD *__fastcall setLen__stdZassertions_u94(__int64 a1, _QWORD *a2, __int64 a3)
{
_QWORD *result; // rax
unsigned __int64 v4; // [rsp+68h] [rbp-28h]
__int64 i; // [rsp+80h] [rbp-10h]
bool v6; // [rsp+8Fh] [rbp-1h]
if ( (__int64)a2 < *(_QWORD *)a1 )
return shrink__stdZassertions_u102((_QWORD *)a1, (__int64)a2);
v4 = *(_QWORD *)a1;
result = a2;
if ( (__int64)a2 > *(_QWORD *)a1 )
{
v6 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
v6 = (__int64)a2 > (__int64)(**(_QWORD **)(a1 + 8) & 0xBFFFFFFFFFFFFFFFuLL);
if ( v6 )
{
if ( __OFSUB__(a2, v4) )
return raiseOverflow();
*(_QWORD *)(a1 + 8) = prepareSeqAddUninit(v4, *(signed __int64 **)(a1 + 8), (__int64)a2 - v4, 0x18u, 8);
}
*(_QWORD *)a1 = a2;
for ( i = v4; ; ++i )
{
result = (_QWORD *)i;
if ( i >= (__int64)a2 )
break;
nimZeroMem_1((void *)(*(_QWORD *)(a1 + 8) + 24 * i + 8), 0x18u);
if ( __OFADD__(1, i) )
return raiseOverflow();
}
}
return result;
}
//----- (000000014000BC97) ----------------------------------------------------
_QWORD *__fastcall newSeq__system_u4212(_QWORD *a1, _QWORD *a2)
{
__int64 v2; // r8
shrink__stdZassertions_u102(a1, 0);
return setLen__stdZassertions_u94((__int64)a1, a2, v2);
}
// 14000BCC3: variable 'v2' is possibly undefined
//----- (000000014000BCCF) ----------------------------------------------------
_QWORD *__fastcall newSeq__system_u4207(_QWORD *a1, _QWORD *a2)
{
__int64 v2; // rdx
_BYTE v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
__int64 v9; // [rsp+50h] [rbp-10h] BYREF
__int64 v10; // [rsp+58h] [rbp-8h]
v5 = "newSeq";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v9 = 0;
v10 = 0;
v6 = 651;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
newSeq__system_u4212(&v9, a2);
popFrame_4();
v2 = v10;
*a1 = v9;
a1[1] = v2;
return a1;
}
//----- (000000014000BD64) ----------------------------------------------------
_QWORD *__fastcall auxWriteStackTrace__system_u4173(_QWORD *a1, __int64 *a2, __int64 a3)
{
_QWORD *result; // rax
_QWORD *v4; // rax
__int64 v5[3]; // [rsp+20h] [rbp-80h] BYREF
__int64 v6; // [rsp+38h] [rbp-68h]
__int64 v7; // [rsp+40h] [rbp-60h]
__int64 v8; // [rsp+50h] [rbp-50h] BYREF
__int64 v9; // [rsp+58h] [rbp-48h]
__int64 v10; // [rsp+60h] [rbp-40h]
__int64 v11; // [rsp+68h] [rbp-38h]
__int64 v12; // [rsp+70h] [rbp-30h]
__int64 v13; // [rsp+78h] [rbp-28h]
char *v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+90h] [rbp-10h]
_QWORD *v17; // [rsp+98h] [rbp-8h]
v17 = a1;
v16 = 0;
while ( v17 )
{
v16 = (_QWORD *)((char *)v16 + 1);
v17 = (_QWORD *)*v17;
}
v15 = (char *)v16 - 1;
if ( *a2 )
{
v13 = *a2;
v15 = (char *)v16 + v13 - 1;
setLen__stdZassertions_u94((__int64)a2, (_QWORD *)((char *)v16 + v13), a3);
}
else
{
v8 = 0;
v9 = 0;
newSeq__system_u4207(&v8, v16);
v5[0] = v8;
v5[1] = v9;
eqsink___stdZassertions_u83(a2, v5);
}
result = a1;
v17 = a1;
while ( v17 )
{
v12 = 0;
v11 = 0;
v10 = 0;
v12 = v17[1];
v5[2] = v12;
v11 = v17[2];
v6 = v11;
v10 = v17[3];
v7 = v10;
v4 = (_QWORD *)(a2[1] + 24LL * (_QWORD)v15);
v4[1] = v12;
v4[2] = v6;
v4[3] = v7;
result = (_QWORD *)*v17;
v17 = (_QWORD *)*v17;
--v15;
}
return result;
}
//----- (000000014000BEEF) ----------------------------------------------------
_QWORD *__fastcall rawWriteStackTrace__system_u4432(__int64 *a1)
{
_QWORD **address; // rax
__int64 v2; // r8
address = (_QWORD **)_emutls_get_address(&_emutls_v_framePtr__system_u2692);
return auxWriteStackTrace__system_u4173(*address, a1, v2);
}
// 14000BF14: variable 'v2' is possibly undefined
//----- (000000014000BF20) ----------------------------------------------------
_QWORD *__fastcall add__system_u4515(__int64 a1, _QWORD *a2, __int64 a3)
{
_QWORD *result; // rax
unsigned __int64 v6; // [rsp+58h] [rbp-18h]
bool v7; // [rsp+6Fh] [rbp-1h]
v6 = *(_QWORD *)a1;
v7 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
{
if ( __OFADD__(1, v6) )
return raiseOverflow();
v7 = (__int64)(**(_QWORD **)(a1 + 8) & 0xBFFFFFFFFFFFFFFFuLL) < (__int64)(v6 + 1);
}
if ( v7 )
*(_QWORD *)(a1 + 8) = prepareSeqAddUninit(v6, *(signed __int64 **)(a1 + 8), 1, 0x18u, 8);
if ( __OFADD__(1, v6) )
return raiseOverflow();
*(_QWORD *)a1 = v6 + 1;
result = (_QWORD *)(*(_QWORD *)(a1 + 8) + 24 * v6);
result[1] = *a2;
result[2] = a2[1];
result[3] = a2[2];
return result;
}
//----- (000000014000C087) ----------------------------------------------------
_QWORD **__fastcall nimIncRefCyclic_0(__int64 a1)
{
bool v1; // dl
char v3[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v4; // [rsp+28h] [rbp-48h]
__int64 v5; // [rsp+30h] [rbp-40h]
const char *v6; // [rsp+38h] [rbp-38h]
__int16 v7; // [rsp+40h] [rbp-30h]
__int64 v8; // [rsp+58h] [rbp-18h]
__int64 *v9; // [rsp+60h] [rbp-10h]
__int64 *v10; // [rsp+68h] [rbp-8h]
v4 = "nimIncRefCyclic";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 58;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v10 = 0;
v10 = (__int64 *)minuspercent___system_u813_1(a1, 16);
v9 = v10;
v5 = 46;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v1 = __OFADD__(16, *v10);
v8 = *v10 + 16;
if ( v1 )
raiseOverflow();
else
*v9 = v8;
return popFrame_4();
}
//----- (000000014000C16F) ----------------------------------------------------
__int64 __fastcall nimDecRefIsLastCyclicDyn_1(__int64 *a1)
{
_BYTE v2[8]; // [rsp+30h] [rbp-50h] BYREF
const char *v3; // [rsp+38h] [rbp-48h]
__int64 v4; // [rsp+40h] [rbp-40h]
const char *v5; // [rsp+48h] [rbp-38h]
__int16 v6; // [rsp+50h] [rbp-30h]
_QWORD *v7; // [rsp+60h] [rbp-20h]
_QWORD *v8; // [rsp+68h] [rbp-18h]
void *v9; // [rsp+70h] [rbp-10h]
unsigned __int8 v10; // [rsp+7Fh] [rbp-1h]
v3 = "nimDecRefIsLastCyclicDyn";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v9 = nimErrorFlag_3();
v10 = 0;
v4 = 513;
if ( a1 )
{
v4 = 58;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v8 = 0;
v8 = (_QWORD *)minuspercent___system_u813_1((__int64)a1, 16);
v7 = v8;
v4 = 515;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\orc.nim";
if ( *v8 <= 0xFu )
{
v4 = 516;
v10 = 1;
LABEL_7:
v4 = 521;
rememberCycle__system_u3495(v10, v7, *a1);
goto LABEL_8;
}
v4 = 519;
if ( !__OFSUB__(*v7, 16) )
{
*v7 -= 16LL;
goto LABEL_7;
}
raiseOverflow();
}
LABEL_8:
popFrame_4();
return v10;
}
//----- (000000014000C2C6) ----------------------------------------------------
_QWORD **__fastcall eqcopy___stdZtypedthreads_u187(__int64 **a1, __int64 a2)
{
_QWORD **result; // rax
__int64 *v3; // [rsp+28h] [rbp-8h]
v3 = *a1;
if ( a2 )
nimIncRefCyclic_0(a2);
*a1 = (__int64 *)a2;
result = (_QWORD **)((unsigned __int8)nimDecRefIsLastCyclicDyn_1(v3) ^ 1u);
if ( !(_BYTE)result )
return nimDestroyAndDispose((_QWORD **)v3);
return result;
}
//----- (000000014000C33F) ----------------------------------------------------
_QWORD **__fastcall eqsink___stdZtypedthreads_u195(__int64 **a1, __int64 *a2)
{
_QWORD **result; // rax
__int64 *v3; // [rsp+28h] [rbp-8h]
v3 = *a1;
*a1 = a2;
result = (_QWORD **)((unsigned __int8)nimDecRefIsLastCyclicDyn_1(v3) ^ 1u);
if ( !(_BYTE)result )
return nimDestroyAndDispose((_QWORD **)v3);
return result;
}
//----- (000000014000C399) ----------------------------------------------------
_QWORD **__fastcall pushCurrentException(__int64 a1)
{
__int64 *address; // rbx
address = (__int64 *)_emutls_get_address(&_emutls_v_currException__system_u4105);
eqcopy___stdZtypedthreads_u187((__int64 **)(a1 + 56), *address);
return eqsink___stdZtypedthreads_u195((__int64 **)address, (__int64 *)a1);
}
//----- (000000014000C3EA) ----------------------------------------------------
_BYTE *__fastcall raiseExceptionAux__system_u4487(__int64 a1)
{
__int64 (__fastcall **address)(__int64); // rax
_BYTE *result; // rax
if ( !*(_QWORD *)_emutls_get_address(&_emutls_v_localRaiseHook__system_u3633)
|| (address = (__int64 (__fastcall **)(__int64))_emutls_get_address(&_emutls_v_localRaiseHook__system_u3633),
result = (_BYTE *)(*address)(a1),
(_BYTE)result) )
{
if ( !globalRaiseHook__system_u3630 || (result = (_BYTE *)globalRaiseHook__system_u3630(a1), (_BYTE)result) )
{
pushCurrentException(a1);
result = _emutls_get_address(&_emutls_v_nimInErrorMode__system_u4460);
*result = (unsigned __int8)*result != -1;
}
}
return result;
}
// 1400270E8: using guessed type __int64 (__fastcall *globalRaiseHook__system_u3630)(_QWORD);
//----- (000000014000C49E) ----------------------------------------------------
_BYTE *__fastcall raiseExceptionEx(__int64 a1, __int64 a2)
{
__int64 v2; // r8
_QWORD **address; // rax
__int64 v4; // r8
__int64 v5; // r8
__int64 v7; // [rsp+20h] [rbp-60h] BYREF
__int64 v8; // [rsp+28h] [rbp-58h]
__int64 v9; // [rsp+30h] [rbp-50h]
__int64 v10; // [rsp+40h] [rbp-40h]
__int64 v11; // [rsp+48h] [rbp-38h]
__int64 v12; // [rsp+50h] [rbp-30h]
__int64 v13; // [rsp+60h] [rbp-20h]
__int64 v14; // [rsp+68h] [rbp-18h]
__int64 v15; // [rsp+70h] [rbp-10h]
if ( !*(_QWORD *)(a1 + 16) )
*(_QWORD *)(a1 + 16) = a2;
if ( *(_QWORD *)(a1 + 40) )
{
if ( *(_QWORD *)_emutls_get_address(&_emutls_v_framePtr__system_u2692) )
{
v13 = 0;
v14 = -10;
v15 = 0;
v7 = 0;
v8 = -10;
v9 = 0;
add__system_u4515(a1 + 40, &v7, v2);
address = (_QWORD **)_emutls_get_address(&_emutls_v_framePtr__system_u2692);
auxWriteStackTrace__system_u4173(*address, (__int64 *)(a1 + 40), v4);
v10 = 0;
v11 = -100;
v12 = 0;
v7 = 0;
v8 = -100;
v9 = 0;
add__system_u4515(a1 + 40, &v7, v5);
}
}
else
{
rawWriteStackTrace__system_u4432((__int64 *)(a1 + 40));
}
return raiseExceptionAux__system_u4487(a1);
}
// 14000C55E: variable 'v2' is possibly undefined
// 14000C583: variable 'v4' is possibly undefined
// 14000C5C7: variable 'v5' is possibly undefined
//----- (000000014000C5E6) ----------------------------------------------------
_QWORD **__fastcall sysFatal__system_u5210(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "sysFatal";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__1DmnNWJVVT9bplfmaalVeUA_;
v16[2] = "OverflowDefect";
v11 = 1694;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v11 = 53;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v6[4] = 53;
raiseExceptionEx((__int64)v16, (__int64)"OverflowDefect");
return popFrame_4();
}
// 14000C6C2: variable 'v2' is possibly undefined
// 140022490: using guessed type __int64 (__fastcall **refptr_NTIv2__1DmnNWJVVT9bplfmaalVeUA_)();
//----- (000000014000C729) ----------------------------------------------------
_QWORD **raiseOverflow()
{
__int64 v1[2]; // [rsp+20h] [rbp-10h] BYREF
v1[0] = TM__Q5wkpxktOdTGvlSRo9bzt9aw_71;
v1[1] = (__int64)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_70;
return sysFatal__system_u5210(v1);
}
// 1400208E0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_71;
//----- (000000014000C75A) ----------------------------------------------------
__int64 __fastcall align__system_u1634(__int64 a1, __int64 a2)
{
__int64 v3; // [rsp+38h] [rbp-48h]
_BYTE v4[8]; // [rsp+40h] [rbp-40h] BYREF
const char *v5; // [rsp+48h] [rbp-38h]
__int64 v6; // [rsp+50h] [rbp-30h]
const char *v7; // [rsp+58h] [rbp-28h]
__int16 v8; // [rsp+60h] [rbp-20h]
__int64 v9; // [rsp+78h] [rbp-8h]
v5 = "align";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 1120;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
if ( a2 )
{
v6 = 1124;
v3 = a2 - 1;
if ( __OFSUB__(a2, 1) || __OFADD__(v3, a1) || __OFSUB__(a2, 1) )
raiseOverflow();
else
v9 = ~(a2 - 1) & (v3 + a1);
}
else
{
v6 = 1122;
v9 = a1;
}
popFrame_4();
return v9;
}
//----- (000000014000C886) ----------------------------------------------------
_QWORD *__fastcall allocShared0Impl__system_u1762(size_t a1)
{
_QWORD *v2; // [rsp+28h] [rbp-8h]
v2 = allocSharedImpl(a1);
zeroMem__system_u1728(v2, a1);
return v2;
}
//----- (000000014000C8BC) ----------------------------------------------------
_QWORD *__fastcall alignedAlloc0__system_u1958(size_t a1, __int64 a2, __int64 a3)
{
__int64 v4; // [rsp+30h] [rbp-50h]
__int64 v5; // [rsp+38h] [rbp-48h]
__int64 v6; // [rsp+40h] [rbp-40h]
size_t v7; // [rsp+48h] [rbp-38h]
size_t v8; // [rsp+50h] [rbp-30h]
__int64 v9; // [rsp+70h] [rbp-10h]
__int64 v10; // [rsp+78h] [rbp-8h]
v10 = 0;
if ( a2 > 16 )
{
v8 = a1 + a2;
if ( !__OFADD__(a1, a2) )
{
v7 = v8 - 1;
if ( !__OFSUB__(v8, 1) )
{
v6 = v7 + 2;
if ( !__OFADD__(2, v7) )
{
if ( v6 < 0 )
{
raiseRangeErrorI(v6, 0, 0x7FFFFFFFFFFFFFFFLL);
return (_QWORD *)v10;
}
v9 = (__int64)allocShared0Impl__system_u1762(v6);
v5 = a2 - 1;
if ( !__OFSUB__(a2, 1) )
{
v4 = a2 - (v5 & v9);
if ( !__OFSUB__(a2, v5 & v9) && !__OFSUB__(v4, 2) )
{
*(_WORD *)pluspercent___system_u793(v9, v4 - 2) = v4;
return (_QWORD *)pluspercent___system_u793(v9, v4);
}
}
}
}
}
raiseOverflow();
return (_QWORD *)v10;
}
return allocShared0Impl__system_u1762(a1);
}
//----- (000000014000CABD) ----------------------------------------------------
__int64 __fastcall nimNewObj(__int64 a1, __int64 a2)
{
__int64 v2; // r8
char v4[8]; // [rsp+20h] [rbp-60h] BYREF
const char *v5; // [rsp+28h] [rbp-58h]
__int64 v6; // [rsp+30h] [rbp-50h]
const char *v7; // [rsp+38h] [rbp-48h]
__int16 v8; // [rsp+40h] [rbp-40h]
__int64 v9; // [rsp+50h] [rbp-30h]
__int64 v10; // [rsp+58h] [rbp-28h]
_QWORD *v11; // [rsp+60h] [rbp-20h]
size_t v12; // [rsp+68h] [rbp-18h]
__int64 v13; // [rsp+70h] [rbp-10h]
__int64 v14; // [rsp+78h] [rbp-8h]
v5 = "nimNewObj";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v14 = 0;
v6 = 94;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v13 = align__system_u1634(16, a2);
v6 = 95;
v9 = a1 + v13;
if ( __OFADD__(a1, v13) )
{
raiseOverflow();
}
else
{
v12 = v9;
v6 = 99;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
if ( v9 >= 0 )
{
if ( a2 >= 0 )
{
v11 = 0;
v11 = alignedAlloc0__system_u1958(v12, a2, v2);
v6 = 61;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\seqs_v2.nim";
v10 = 0;
v10 = pluspercent___system_u793((__int64)v11, v13);
v14 = v10;
}
else
{
raiseRangeErrorI(a2, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
else
{
raiseRangeErrorI(v12, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
popFrame_4();
return v14;
}
// 14000CBFB: variable 'v2' is possibly undefined
//----- (000000014000CC4A) ----------------------------------------------------
_QWORD **__fastcall sysFatal__system_u4979(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "sysFatal";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__RKHXYNwSRXz825VbZValEQ_;
v16[2] = "RangeDefect";
v11 = 1694;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v11 = 53;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v6[4] = 53;
raiseExceptionEx((__int64)v16, (__int64)"RangeDefect");
return popFrame_4();
}
// 14000CD26: variable 'v2' is possibly undefined
// 1400224A0: using guessed type __int64 (__fastcall **refptr_NTIv2__RKHXYNwSRXz825VbZValEQ_)();
//----- (000000014000CD8D) ----------------------------------------------------
_QWORD **__fastcall prepareAdd(__int64 *a1, __int64 a2, __int64 a3)
{
_QWORD **result; // rax
__int64 v4; // rax
__int64 v5; // rax
size_t v6; // rax
__int64 v7; // rdx
__int64 v8; // rax
__int64 v9; // [rsp+28h] [rbp-78h]
__int64 v10; // [rsp+38h] [rbp-68h]
__int64 v11; // [rsp+48h] [rbp-58h]
_QWORD **v12; // [rsp+58h] [rbp-48h]
__int64 v13; // [rsp+68h] [rbp-38h]
__int64 v14; // [rsp+88h] [rbp-18h]
bool v15; // [rsp+9Fh] [rbp-1h]
v12 = (_QWORD **)(*a1 + a2);
if ( __OFADD__(*a1, a2) )
return raiseOverflow();
v15 = a1[1] == 0;
if ( a1[1] )
v15 = (*(_QWORD *)a1[1] & 0x4000000000000000LL) != 0;
if ( v15 )
{
v14 = a1[1];
if ( !__OFADD__(1, v12) )
{
v11 = (__int64)v12 + 9;
if ( !__OFADD__(8, (char *)v12 + 1) )
{
if ( v11 < 0 )
return (_QWORD **)raiseRangeErrorI(v11, 0, 0x7FFFFFFFFFFFFFFFLL);
a1[1] = (__int64)allocSharedImpl(v11);
*(_QWORD *)a1[1] = v12;
result = (_QWORD **)*a1;
if ( *a1 <= 0 )
{
if ( !v14 )
{
result = (_QWORD **)a1[1];
*((_BYTE *)result + 8) = 0;
}
}
else
{
v4 = (__int64)v12;
if ( *a1 <= (__int64)v12 )
v4 = *a1;
if ( v4 >= 0 )
{
v6 = (size_t)v12;
if ( *a1 <= (__int64)v12 )
v6 = *a1;
return (_QWORD **)copyMem__system_u1731_0((void *)(a1[1] + 8), (const void *)(v14 + 8), v6);
}
else
{
v5 = (__int64)v12;
if ( *a1 <= (__int64)v12 )
v5 = *a1;
return (_QWORD **)raiseRangeErrorI(v5, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
return result;
}
}
return raiseOverflow();
}
v7 = *(_QWORD *)a1[1];
result = (_QWORD **)(v7 & 0xBFFFFFFFFFFFFFFFuLL);
if ( (__int64)(v7 & 0xBFFFFFFFFFFFFFFFuLL) >= (__int64)v12 )
return result;
v8 = resize__system_u2227(v7 & 0xBFFFFFFFFFFFFFFFuLL, v7, a3);
if ( (__int64)v12 >= v8 )
v8 = (__int64)v12;
v13 = v8;
if ( __OFADD__(1, v8) )
return raiseOverflow();
v10 = v8 + 9;
if ( __OFADD__(8, v8 + 1) )
return raiseOverflow();
if ( v10 < 0 )
return (_QWORD **)raiseRangeErrorI(v10, 0, 0x7FFFFFFFFFFFFFFFLL);
a1[1] = (__int64)reallocSharedImpl__system_u1766((signed __int64 *)a1[1], v10);
*(_QWORD *)a1[1] = v13;
result = v12;
if ( (__int64)v12 < v13 )
{
if ( !__OFADD__(1, v12) )
{
v9 = v13 - (_QWORD)v12;
if ( !__OFSUB__(v13, v12) )
{
if ( v9 >= 0 )
return (_QWORD **)zeroMem__system_u1728((char *)v12 + a1[1] + 9, v9);
else
return (_QWORD **)raiseRangeErrorI(v9, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
return raiseOverflow();
}
return result;
}
//----- (000000014000D184) ----------------------------------------------------
_QWORD **__fastcall sysFatal__system_u4806(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "sysFatal";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__xTnzBHckcPoKiwygsku9csg_;
v16[2] = "IndexDefect";
v11 = 1694;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v11 = 53;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v6[4] = 53;
raiseExceptionEx((__int64)v16, (__int64)"IndexDefect");
return popFrame_4();
}
// 14000D255: variable 'v2' is possibly undefined
// 1400224E0: using guessed type __int64 (__fastcall **refptr_NTIv2__xTnzBHckcPoKiwygsku9csg_)();
//----- (000000014000D2BC) ----------------------------------------------------
_QWORD *__fastcall rawNewString(_QWORD *a1, __int64 a2)
{
_QWORD *v2; // rdx
__int64 v4; // [rsp+20h] [rbp-30h]
__int64 v5; // [rsp+30h] [rbp-20h] BYREF
_QWORD *v6; // [rsp+38h] [rbp-18h]
_QWORD *v7; // [rsp+40h] [rbp-10h]
_QWORD *v8; // [rsp+48h] [rbp-8h]
nimZeroMem_1(&v5, 0x10u);
if ( a2 > 0 )
{
if ( __OFADD__(1, a2) || (v4 = a2 + 9, __OFADD__(8, a2 + 1)) )
{
raiseOverflow();
}
else if ( v4 >= 0 )
{
v8 = 0;
v8 = allocSharedImpl(v4);
v7 = v8;
*v8 = a2;
*((_BYTE *)v7 + 8) = 0;
v5 = 0;
v6 = v7;
}
else
{
raiseRangeErrorI(v4, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
else
{
v5 = 0;
v6 = 0;
}
v2 = v6;
*a1 = v5;
a1[1] = v2;
return a1;
}
//----- (000000014000D3E1) ----------------------------------------------------
signed __int64 __fastcall raiseIndexError2(__int64 a1, __int64 a2)
{
signed __int64 result; // rax
__int64 v3; // [rsp+20h] [rbp-80h] BYREF
signed __int64 *v4; // [rsp+28h] [rbp-78h]
__int64 v5; // [rsp+30h] [rbp-70h] BYREF
signed __int64 *v6; // [rsp+38h] [rbp-68h]
__int64 v7; // [rsp+40h] [rbp-60h] BYREF
signed __int64 *v8; // [rsp+48h] [rbp-58h]
__int64 v9; // [rsp+50h] [rbp-50h] BYREF
signed __int64 *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
signed __int64 *v12; // [rsp+68h] [rbp-38h]
__int64 v13; // [rsp+70h] [rbp-30h]
signed __int64 *v14; // [rsp+78h] [rbp-28h]
__int64 v15; // [rsp+80h] [rbp-20h]
signed __int64 *v16; // [rsp+88h] [rbp-18h]
_BYTE *v17; // [rsp+98h] [rbp-8h]
v17 = nimErrorFlag_3();
v15 = 0;
v16 = 0;
v13 = 0;
v14 = 0;
v11 = 0;
v12 = 0;
if ( a2 >= 0 )
{
v9 = 0;
v10 = 0;
v7 = 0;
v8 = 0;
v5 = 0;
v6 = 0;
dollar___systemZdollars_u14(&v9, a1);
result = (unsigned __int8)*v17;
if ( *v17 )
return result;
dollar___systemZdollars_u14(&v7, a2);
result = (unsigned __int8)*v17;
if ( *v17 )
return result;
rawNewString(&v3, v9 + v7 + 19);
v5 = v3;
v6 = v4;
v3 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_93;
v4 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_92;
appendString(&v5, &v3);
v3 = v9;
v4 = v10;
appendString(&v5, &v3);
v3 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_95;
v4 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_94;
appendString(&v5, &v3);
v3 = v7;
v4 = v8;
appendString(&v5, &v3);
v13 = v5;
v14 = v6;
if ( v8 && (*v8 & 0x4000000000000000LL) == 0 )
deallocShared(v8);
if ( v10 && (*v10 & 0x4000000000000000LL) == 0 )
deallocShared(v10);
v11 = v13;
v12 = v14;
}
else
{
v15 = 43;
v16 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_90;
v11 = 43;
v12 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_90;
}
v3 = v11;
v4 = v12;
sysFatal__system_u4806(&v3);
if ( v14 && (*v14 & 0x4000000000000000LL) == 0 )
deallocShared(v14);
result = (signed __int64)v16;
if ( v16 )
{
result = *v16 & 0x4000000000000000LL;
if ( !result )
return (signed __int64)deallocShared(v16);
}
return result;
}
// 1400209A0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_93;
// 1400209D0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_95;
//----- (000000014000D6A3) ----------------------------------------------------
char *__fastcall realloc0Impl__system_u1756(signed __int64 *a1, __int64 a2, __int64 a3)
{
void *address; // rax
_QWORD *v5; // [rsp+28h] [rbp-8h]
address = _emutls_get_address(&_emutls_v_allocator__system_u7250);
v5 = realloc__system_u7212((__int64)address, a1, a3);
if ( a2 < a3 )
zeroMem__system_u1728((char *)v5 + a2, a3 - a2);
return (char *)v5;
}
//----- (000000014000D715) ----------------------------------------------------
char *__fastcall reallocShared0Impl__system_u1769(signed __int64 *a1, __int64 a2, __int64 a3)
{
return realloc0Impl__system_u1756(a1, a2, a3);
}
//----- (000000014000D74E) ----------------------------------------------------
__int64 *__fastcall setLengthStrV2(__int64 *a1, signed __int64 a2, __int64 a3)
{
__int64 v4; // rax
__int64 v5; // rax
size_t v6; // rax
__int64 v7; // rdx
__int64 v8; // rax
__int64 v9; // [rsp+20h] [rbp-80h]
__int64 v10; // [rsp+30h] [rbp-70h]
__int64 v11; // [rsp+40h] [rbp-60h]
__int64 v12; // [rsp+48h] [rbp-58h]
__int64 v13; // [rsp+50h] [rbp-50h]
__int64 v14; // [rsp+58h] [rbp-48h]
__int64 v15; // [rsp+70h] [rbp-30h]
unsigned __int64 v16; // [rsp+80h] [rbp-20h]
__int64 v17; // [rsp+90h] [rbp-10h]
bool v18; // [rsp+9Fh] [rbp-1h]
if ( !a2 )
goto LABEL_48;
v18 = a1[1] == 0;
if ( a1[1] )
v18 = (*(_QWORD *)a1[1] & 0x4000000000000000LL) != 0;
if ( !v18 )
{
if ( a2 > *a1 )
{
v7 = *(_QWORD *)a1[1];
v16 = v7 & 0xBFFFFFFFFFFFFFFFuLL;
if ( (__int64)(v7 & 0xBFFFFFFFFFFFFFFFuLL) < a2 )
{
v8 = resize__system_u2227(v16, v7, a3);
if ( a2 >= v8 )
v8 = a2;
v15 = v8;
if ( __OFADD__(1, v16) )
return (__int64 *)raiseOverflow();
v10 = v16 + 9;
if ( __OFADD__(8, v16 + 1) )
return (__int64 *)raiseOverflow();
if ( v10 < 0 )
return (__int64 *)raiseRangeErrorI(v10, 0, 0x7FFFFFFFFFFFFFFFLL);
if ( __OFADD__(1, v8) )
return (__int64 *)raiseOverflow();
v9 = v8 + 9;
if ( __OFADD__(8, v8 + 1) )
return (__int64 *)raiseOverflow();
if ( v9 < 0 )
return (__int64 *)raiseRangeErrorI(v9, 0, 0x7FFFFFFFFFFFFFFFLL);
a1[1] = (__int64)reallocShared0Impl__system_u1769((signed __int64 *)a1[1], v10, v9);
*(_QWORD *)a1[1] = v15;
}
}
LABEL_47:
*(_BYTE *)(a1[1] + a2 + 8) = 0;
LABEL_48:
*a1 = a2;
return a1;
}
v17 = a1[1];
if ( __OFADD__(1, a2) )
return (__int64 *)raiseOverflow();
v14 = a2 + 9;
if ( __OFADD__(8, a2 + 1) )
return (__int64 *)raiseOverflow();
if ( v14 < 0 )
return (__int64 *)raiseRangeErrorI(v14, 0, 0x7FFFFFFFFFFFFFFFLL);
a1[1] = (__int64)allocSharedImpl(v14);
*(_QWORD *)a1[1] = a2;
if ( *a1 <= 0 )
{
v11 = a2 + 1;
if ( __OFADD__(1, a2) )
return (__int64 *)raiseOverflow();
if ( v11 < 0 )
return (__int64 *)raiseRangeErrorI(v11, 0, 0x7FFFFFFFFFFFFFFFLL);
zeroMem__system_u1728((void *)(a1[1] + 8), v11);
goto LABEL_47;
}
v4 = a2;
if ( *a1 <= a2 )
v4 = *a1;
if ( v4 >= 0 )
{
v6 = a2;
if ( *a1 <= a2 )
v6 = *a1;
copyMem__system_u1731_0((void *)(a1[1] + 8), (const void *)(v17 + 8), v6);
if ( a2 <= *a1 )
{
*(_BYTE *)(a1[1] + a2 + 8) = 0;
}
else
{
v13 = a2 - *a1;
if ( __OFSUB__(a2, *a1) )
return (__int64 *)raiseOverflow();
v12 = v13 + 1;
if ( __OFADD__(1, v13) )
return (__int64 *)raiseOverflow();
if ( v12 < 0 )
return (__int64 *)raiseRangeErrorI(v12, 0, 0x7FFFFFFFFFFFFFFFLL);
zeroMem__system_u1728((void *)(a1[1] + *a1 + 8), v12);
}
goto LABEL_47;
}
v5 = a2;
if ( *a1 <= a2 )
v5 = *a1;
return (__int64 *)raiseRangeErrorI(v5, 0, 0x7FFFFFFFFFFFFFFFLL);
}
//----- (000000014000DC6E) ----------------------------------------------------
signed __int64 __fastcall raiseRangeErrorI(__int64 a1, __int64 a2, __int64 a3)
{
signed __int64 result; // rax
__int64 v4; // [rsp+20h] [rbp-70h] BYREF
signed __int64 *v5; // [rsp+28h] [rbp-68h]
__int64 v6; // [rsp+30h] [rbp-60h] BYREF
signed __int64 *v7; // [rsp+38h] [rbp-58h]
__int64 v8; // [rsp+40h] [rbp-50h]
signed __int64 *v9; // [rsp+48h] [rbp-48h]
__int64 v10; // [rsp+50h] [rbp-40h] BYREF
signed __int64 *v11; // [rsp+58h] [rbp-38h]
__int64 v12; // [rsp+60h] [rbp-30h] BYREF
signed __int64 *v13; // [rsp+68h] [rbp-28h]
__int64 v14; // [rsp+70h] [rbp-20h] BYREF
signed __int64 *v15; // [rsp+78h] [rbp-18h]
_BYTE *v16; // [rsp+88h] [rbp-8h]
v16 = nimErrorFlag_3();
v14 = 0;
v15 = 0;
v12 = 0;
v13 = 0;
v10 = 0;
v11 = 0;
v8 = 0;
v9 = 0;
v6 = 0;
v7 = 0;
dollar___systemZdollars_u34(&v14, a1);
result = (unsigned __int8)*v16;
if ( !*v16 )
{
dollar___systemZdollars_u34(&v12, a2);
result = (unsigned __int8)*v16;
if ( !*v16 )
{
dollar___systemZdollars_u34(&v10, a3);
result = (unsigned __int8)*v16;
if ( !*v16 )
{
rawNewString(&v4, v12 + v14 + v10 + 31);
v6 = v4;
v7 = v5;
v4 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_82;
v5 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_81;
appendString(&v6, &v4);
v4 = v14;
v5 = v15;
appendString(&v6, &v4);
v4 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_108;
v5 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_107;
appendString(&v6, &v4);
v4 = v12;
v5 = v13;
appendString(&v6, &v4);
v4 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_110;
v5 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_109;
appendString(&v6, &v4);
v4 = v10;
v5 = v11;
appendString(&v6, &v4);
v8 = v6;
v9 = v7;
v4 = v6;
v5 = v7;
sysFatal__system_u4979(&v4);
if ( v9 && (*v9 & 0x4000000000000000LL) == 0 )
deallocShared(v9);
if ( v11 && (*v11 & 0x4000000000000000LL) == 0 )
deallocShared(v11);
if ( v13 && (*v13 & 0x4000000000000000LL) == 0 )
deallocShared(v13);
result = (signed __int64)v15;
if ( v15 )
{
result = *v15 & 0x4000000000000000LL;
if ( !result )
return (signed __int64)deallocShared(v15);
}
}
}
}
return result;
}
// 140020920: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_82;
// 1400209F0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_108;
// 140020A10: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_110;
//----- (000000014000DF4E) ----------------------------------------------------
_QWORD **__fastcall appendString(__int64 *a1, __int64 *a2)
{
_QWORD **result; // rax
__int64 v3; // [rsp+20h] [rbp-20h]
result = (_QWORD **)*a2;
v3 = *a2;
if ( *a2 > 0 )
{
if ( v3 >= 0 )
{
copyMem__system_u1731_0((void *)(a1[1] + *a1 + 8), (const void *)(a2[1] + 8), v3);
if ( __OFADD__(*a1, v3) )
{
return raiseOverflow();
}
else
{
*a1 += v3;
result = (_QWORD **)*a1;
*(_BYTE *)(a1[1] + *a1 + 8) = 0;
}
}
else
{
return (_QWORD **)raiseRangeErrorI(v3, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
return result;
}
//----- (000000014000E030) ----------------------------------------------------
_QWORD **__fastcall nimAddCharV1_0(__int64 *a1, char a2, __int64 a3)
{
_QWORD **result; // rax
prepareAdd(a1, 1, a3);
*(_BYTE *)(a1[1] + *a1 + 8) = a2;
if ( __OFADD__(1, *a1) )
return raiseOverflow();
result = (_QWORD **)++*a1;
*(_BYTE *)(a1[1] + *a1 + 8) = 0;
return result;
}
//----- (000000014000E0C2) ----------------------------------------------------
__int64 __fastcall add__system_u3639(__int64 *a1, __int64 a2, __int64 a3)
{
__int64 result; // rax
__int64 v4; // [rsp+28h] [rbp-8h]
v4 = 0;
if ( a2 )
{
while ( 1 )
{
result = *(unsigned __int8 *)(v4 + a2);
if ( !(_BYTE)result )
break;
nimAddCharV1_0(a1, *(_BYTE *)(v4 + a2), a3);
++v4;
}
}
return result;
}
// 14000E10A: variable 'a3' is possibly undefined
//----- (000000014000E121) ----------------------------------------------------
_QWORD **__fastcall addInt__stdZprivateZdigitsutils_u204_0(__int64 *a1, __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v4; // [rsp+28h] [rbp-28h]
__int64 v5; // [rsp+30h] [rbp-20h]
const char *v6; // [rsp+38h] [rbp-18h]
__int16 v7; // [rsp+40h] [rbp-10h]
v4 = "addInt";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v5 = 116;
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\private\\digitsutils.nim";
addInt__stdZprivateZdigitsutils_u187(a1, a2);
return popFrame_4();
}
//----- (000000014000E190) ----------------------------------------------------
signed __int64 __fastcall auxWriteStackTrace__system_u4293(_QWORD *a1, __int64 *a2)
{
__int64 v2; // r8
signed __int64 result; // rax
__int64 v4; // r8
__int64 v5; // r8
__int64 v6; // r8
__int64 v7; // r8
__int64 v8; // rax
__int64 v9; // r8
__int64 v10; // [rsp+20h] [rbp-60h] BYREF
signed __int64 *v11; // [rsp+28h] [rbp-58h]
__int64 v12; // [rsp+30h] [rbp-50h] BYREF
signed __int64 *v13; // [rsp+38h] [rbp-48h]
_QWORD v14[129]; // [rsp+40h] [rbp-40h] BYREF
__int64 v15; // [rsp+448h] [rbp+3C8h]
__int64 v16; // [rsp+450h] [rbp+3D0h]
__int64 v17; // [rsp+458h] [rbp+3D8h]
__int64 v18; // [rsp+460h] [rbp+3E0h]
__int64 v19; // [rsp+468h] [rbp+3E8h]
__int64 v20; // [rsp+470h] [rbp+3F0h]
_BYTE *v21; // [rsp+478h] [rbp+3F8h]
__int64 k; // [rsp+480h] [rbp+400h]
__int64 j; // [rsp+488h] [rbp+408h]
bool v24; // [rsp+497h] [rbp+417h]
__int64 i; // [rsp+498h] [rbp+418h]
bool v26; // [rsp+4A7h] [rbp+427h]
__int64 v27; // [rsp+4A8h] [rbp+428h]
_QWORD *v28; // [rsp+4B0h] [rbp+430h]
__int64 v29; // [rsp+4B8h] [rbp+438h]
__int64 v30; // [rsp+4C0h] [rbp+440h]
_QWORD *v31; // [rsp+4C8h] [rbp+448h]
v21 = nimErrorFlag_3();
nimZeroMem_1(v14, 0x400u);
v31 = a1;
v30 = 0;
v29 = 0;
while ( 1 )
{
v26 = v31 != 0;
if ( v31 )
v26 = v30 <= 95;
if ( !v26 )
break;
v14[v30++] = v31;
++v29;
v31 = (_QWORD *)*v31;
}
v28 = v31;
while ( v31 )
{
++v29;
v31 = (_QWORD *)*v31;
}
v27 = 0;
if ( v29 > 128 )
{
v27 = v29 - v30 - 31;
v20 = 0;
for ( i = 1; i <= v27; ++i )
{
v20 = i;
if ( v28 )
v28 = (_QWORD *)*v28;
}
v14[v30++] = 0;
}
while ( 1 )
{
v24 = v28 != 0;
if ( v28 )
v24 = v30 <= 127;
if ( !v24 )
break;
v14[v30++] = v28;
v28 = (_QWORD *)*v28;
}
v19 = 0;
v18 = v30 - 1;
result = v30 - 1;
for ( j = v30 - 1; j >= 0; --j )
{
v19 = j;
if ( v14[j] )
{
v17 = *a2;
add__system_u3639(a2, *(_QWORD *)(v14[v19] + 24LL), v2);
if ( *(__int64 *)(v14[v19] + 16LL) > 0 )
{
prepareAdd(a2, 1, v6);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_119;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(a2, &v10);
addInt__stdZprivateZdigitsutils_u204_0(a2, *(_QWORD *)(v14[v19] + 16LL));
prepareAdd(a2, 1, v7);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_123;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_122;
appendString(a2, &v10);
}
v16 = 0;
v15 = 0;
v8 = 25 - (*a2 - v17);
if ( v8 <= 0 )
v8 = 1;
v15 = v8;
for ( k = 1; k <= v15; ++k )
{
v16 = k;
nimAddCharV1_0(a2, 32, v6);
}
add__system_u3639(a2, *(_QWORD *)(v14[v19] + 8LL), v6);
prepareAdd(a2, 1, v9);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_125;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_124;
result = (signed __int64)appendString(a2, &v10);
}
else
{
v12 = 0;
v13 = 0;
prepareAdd(a2, 1, v2);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_115;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(a2, &v10);
dollar___systemZdollars_u14(&v12, v27);
result = (unsigned __int8)*v21;
if ( *v21 )
return result;
prepareAdd(a2, v12, v4);
v10 = v12;
v11 = v13;
appendString(a2, &v10);
prepareAdd(a2, 20, v5);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_117;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_116;
appendString(a2, &v10);
result = (signed __int64)v13;
if ( v13 )
{
result = *v13 & 0x4000000000000000LL;
if ( !result )
result = (signed __int64)deallocShared(v13);
}
}
}
return result;
}
// 14000E44C: variable 'v2' is possibly undefined
// 14000E4B0: variable 'v4' is possibly undefined
// 14000E4E7: variable 'v5' is possibly undefined
// 14000E5B3: variable 'v6' is possibly undefined
// 14000E610: variable 'v7' is possibly undefined
// 14000E6F9: variable 'v9' is possibly undefined
// 140020A70: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_115;
// 140020AA0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_117;
// 140020AB0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_119;
// 140020AF0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_123;
// 140020B10: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_125;
//----- (000000014000E742) ----------------------------------------------------
_QWORD **__fastcall rawWriteStackTrace__system_u4426(__int64 *a1)
{
__int64 v1; // r8
_QWORD **address; // rax
__int64 v4; // [rsp+20h] [rbp-10h] BYREF
void *v5; // [rsp+28h] [rbp-8h]
if ( *(_QWORD *)_emutls_get_address(&_emutls_v_framePtr__system_u2692) )
{
prepareAdd(a1, 34, v1);
v4 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_113;
v5 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_112;
appendString(a1, &v4);
address = (_QWORD **)_emutls_get_address(&_emutls_v_framePtr__system_u2692);
return (_QWORD **)auxWriteStackTrace__system_u4293(*address, a1);
}
else
{
prepareAdd(a1, 29, v1);
v4 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_5;
v5 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_4;
return appendString(a1, &v4);
}
}
// 14000E771: variable 'v1' is possibly undefined
// 140020870: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_5;
// 140020A50: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_113;
//----- (000000014000E7FC) ----------------------------------------------------
__int64 *__fastcall toNimStr(__int64 *a1, const void *a2, __int64 a3)
{
__int64 v3; // rdx
__int64 v5; // [rsp+28h] [rbp-48h]
__int64 v6; // [rsp+30h] [rbp-40h]
__int64 v7; // [rsp+40h] [rbp-30h] BYREF
__int64 v8; // [rsp+48h] [rbp-28h]
_QWORD *v9; // [rsp+58h] [rbp-18h]
_QWORD *v10; // [rsp+60h] [rbp-10h]
__int64 v11; // [rsp+68h] [rbp-8h]
nimZeroMem_1(&v7, 0x10u);
if ( a3 > 0 )
{
v11 = 0;
if ( __OFADD__(1, a3) )
goto LABEL_9;
v6 = a3 + 9;
if ( __OFADD__(8, a3 + 1) )
goto LABEL_9;
if ( v6 < 0 )
{
raiseRangeErrorI(v6, 0, 0x7FFFFFFFFFFFFFFFLL);
goto LABEL_13;
}
v10 = 0;
v10 = allocSharedImpl(v6);
v9 = v10;
*v10 = a3;
v5 = a3 + 1;
if ( __OFADD__(1, a3) )
{
LABEL_9:
raiseOverflow();
goto LABEL_13;
}
if ( v5 >= 0 )
{
copyMem__system_u1731_0(v9 + 1, a2, v5);
v11 = a3;
v7 = a3;
v8 = (__int64)v9;
}
else
{
raiseRangeErrorI(v5, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
else
{
v7 = 0;
v8 = 0;
}
LABEL_13:
v3 = v8;
*a1 = v7;
a1[1] = v3;
return a1;
}
//----- (000000014000E9A3) ----------------------------------------------------
size_t __fastcall nimCStrLen(const char *a1)
{
if ( a1 )
return strlen(a1);
else
return 0;
}
//----- (000000014000E9F3) ----------------------------------------------------
_QWORD *__fastcall cstrToNimstr(_QWORD *a1, const char *a2)
{
size_t v2; // rax
__int64 v3; // rdx
__int64 v5; // [rsp+20h] [rbp-40h] BYREF
__int64 v6; // [rsp+28h] [rbp-38h]
_QWORD v7[2]; // [rsp+30h] [rbp-30h] BYREF
_QWORD v8[2]; // [rsp+40h] [rbp-20h] BYREF
nimZeroMem_1(v8, 0x10u);
nimZeroMem_1(v7, 0x10u);
if ( a2 )
{
v2 = nimCStrLen(a2);
toNimStr(&v5, a2, v2);
v7[0] = v5;
v7[1] = v6;
}
else
{
toNimStr(&v5, 0, 0);
v8[0] = v5;
v8[1] = v6;
}
v3 = v6;
*a1 = v5;
a1[1] = v3;
return a1;
}
//----- (000000014000EAC4) ----------------------------------------------------
__int64 *getCurrentException()
{
__int64 *address; // rax
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
__int64 *v7; // [rsp+58h] [rbp-8h] BYREF
v3 = "getCurrentException";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v7 = 0;
v4 = 227;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\typedthreads.nim";
address = (__int64 *)_emutls_get_address(&_emutls_v_currException__system_u4105);
eqcopy___stdZtypedthreads_u187(&v7, *address);
popFrame_4();
return v7;
}
//----- (000000014000EB4A) ----------------------------------------------------
_BOOL8 __fastcall isObjDisplayCheck(__int64 a1, __int16 a2, int a3)
{
char v4[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v5; // [rsp+28h] [rbp-38h]
__int64 v6; // [rsp+30h] [rbp-30h]
const char *v7; // [rsp+38h] [rbp-28h]
__int16 v8; // [rsp+40h] [rbp-20h]
bool v9; // [rsp+5Eh] [rbp-2h]
bool v10; // [rsp+5Fh] [rbp-1h]
v5 = "isObjDisplayCheck";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v6 = 0;
v8 = 0;
nimFrame_4((__int64)v4);
v6 = 266;
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arc.nim";
v10 = 0;
v10 = a2 <= *(_WORD *)(a1 + 18);
if ( v10 )
v10 = a3 == *(_DWORD *)(*(_QWORD *)(a1 + 24) + 4LL * a2);
v9 = v10;
popFrame_4();
return v9;
}
//----- (000000014000EBFC) ----------------------------------------------------
_QWORD *__fastcall dollar___system_u4269(_QWORD *a1, __int64 *a2)
{
__int64 v2; // rax
__int64 v3; // rdx
__int64 v4; // r8
__int64 v5; // r8
__int64 v6; // r8
__int64 v7; // rax
__int64 v8; // r8
void *v9; // rdx
__int64 v11; // [rsp+0h] [rbp-A0h] BYREF
__int64 v12; // [rsp+20h] [rbp-80h] BYREF
void *v13; // [rsp+28h] [rbp-78h]
__int64 v14; // [rsp+30h] [rbp-70h]
__int64 v15; // [rsp+38h] [rbp-68h]
__int64 v16; // [rsp+40h] [rbp-60h]
__int64 v17; // [rsp+48h] [rbp-58h]
__int64 v18; // [rsp+50h] [rbp-50h] BYREF
void *v19; // [rsp+58h] [rbp-48h]
__int64 v20; // [rsp+60h] [rbp-40h]
__int64 v21; // [rsp+68h] [rbp-38h]
__int64 v22; // [rsp+70h] [rbp-30h]
__int64 v23; // [rsp+78h] [rbp-28h]
__int64 v24; // [rsp+80h] [rbp-20h]
__int64 v25; // [rsp+88h] [rbp-18h]
__int64 j; // [rsp+90h] [rbp-10h]
__int64 i; // [rsp+98h] [rbp-8h]
v2 = *a2;
v3 = a2[1];
v14 = v2;
v15 = v3;
v16 = v2;
v17 = v3;
rawNewString(&v11 + 4, 2000);
v18 = v12;
v19 = v13;
v25 = 0;
v23 = v16;
v24 = v16 - 1;
for ( i = 0; i <= v24; ++i )
{
v25 = i;
if ( *(_QWORD *)(v17 + 24 * i + 16) == -10 )
{
prepareAdd(&v18, 17, v4);
v12 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_130;
v13 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_129;
appendString(&v18, &v12);
}
else if ( *(_QWORD *)(v17 + 24 * v25 + 16) == -100 )
{
prepareAdd(&v18, 3, v4);
v12 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_132;
v13 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_131;
appendString(&v18, &v12);
}
else
{
v22 = v18;
add__system_u3639(&v18, *(_QWORD *)(v17 + 24 * v25 + 24), v4);
if ( *(__int64 *)(v17 + 24 * v25 + 16) > 0 )
{
prepareAdd(&v18, 1, v5);
v12 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_133;
v13 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(&v18, &v12);
addInt__stdZprivateZdigitsutils_u204_0(&v18, *(_QWORD *)(v17 + 24 * v25 + 16));
prepareAdd(&v18, 1, v6);
v12 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_135;
v13 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_122;
appendString(&v18, &v12);
}
v21 = 0;
v20 = 0;
v7 = 25 - (v18 - v22);
if ( v7 <= 0 )
v7 = 1;
v20 = v7;
for ( j = 1; j <= v20; ++j )
{
v21 = j;
nimAddCharV1_0(&v18, 32, v5);
}
add__system_u3639(&v18, *(_QWORD *)(v17 + 24 * v25 + 8), v5);
prepareAdd(&v18, 1, v8);
v12 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_136;
v13 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_124;
appendString(&v18, &v12);
}
}
v9 = v19;
*a1 = v18;
a1[1] = v9;
return a1;
}
// 14000ECD7: variable 'v4' is possibly undefined
// 14000EDD1: variable 'v5' is possibly undefined
// 14000EE34: variable 'v6' is possibly undefined
// 14000EEFF: variable 'v8' is possibly undefined
// 140020B40: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_130;
// 140020B60: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_132;
// 140020B70: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_133;
// 140020B90: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_135;
// 140020BA0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_136;
//----- (000000014000EF56) ----------------------------------------------------
signed __int64 *__fastcall reportUnhandledErrorAux__system_u4443(__int64 a1)
{
__int64 v1; // r8
signed __int64 *v2; // rdx
__int64 v3; // r8
__int64 v4; // r8
signed __int64 *v5; // rdx
__int64 v6; // r8
__int64 v7; // r8
__int64 v8; // r8
signed __int64 *result; // rax
__int64 v10; // [rsp+20h] [rbp-50h] BYREF
signed __int64 *v11; // [rsp+28h] [rbp-48h]
__int64 v12; // [rsp+30h] [rbp-40h] BYREF
signed __int64 *v13; // [rsp+38h] [rbp-38h]
__int64 v14; // [rsp+40h] [rbp-30h] BYREF
signed __int64 *v15; // [rsp+48h] [rbp-28h]
__int64 v16; // [rsp+50h] [rbp-20h] BYREF
signed __int64 *v17; // [rsp+58h] [rbp-18h]
rawNewString(&v10, 2000);
v16 = v10;
v17 = v11;
if ( *(_QWORD *)(a1 + 40) )
{
v2 = *(signed __int64 **)(a1 + 48);
v10 = *(_QWORD *)(a1 + 40);
v11 = v2;
dollar___system_u4269(&v12, &v10);
prepareAdd(&v16, v12, v3);
v10 = v12;
v11 = v13;
appendString(&v16, &v10);
if ( v13 && (*v13 & 0x4000000000000000LL) == 0 )
deallocShared(v13);
}
else
{
rawWriteStackTrace__system_u4426(&v16);
}
prepareAdd(&v16, 28, v1);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_138;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_137;
appendString(&v16, &v10);
prepareAdd(&v16, *(_QWORD *)(a1 + 24), v4);
v5 = *(signed __int64 **)(a1 + 32);
v10 = *(_QWORD *)(a1 + 24);
v11 = v5;
appendString(&v16, &v10);
prepareAdd(&v16, 2, v6);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_140;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_139;
appendString(&v16, &v10);
v14 = 0;
v15 = 0;
cstrToNimstr(&v14, *(const char **)(a1 + 16));
prepareAdd(&v16, v14, v7);
v10 = v14;
v11 = v15;
appendString(&v16, &v10);
prepareAdd(&v16, 2, v8);
v10 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_142;
v11 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_141;
appendString(&v16, &v10);
v10 = v16;
v11 = v17;
if ( onUnhandledException__system_u4442 )
onUnhandledException__system_u4442(&v10);
else
showErrorMessage2__system_u4085((size_t *)&v10);
result = v17;
if ( v17 )
{
result = (signed __int64 *)(*v17 & 0x4000000000000000LL);
if ( !result )
return (signed __int64 *)deallocShared(v17);
}
return result;
}
// 14000EFD7: variable 'v3' is possibly undefined
// 14000F039: variable 'v1' is possibly undefined
// 14000F073: variable 'v4' is possibly undefined
// 14000F0A8: variable 'v6' is possibly undefined
// 14000F102: variable 'v7' is possibly undefined
// 14000F133: variable 'v8' is possibly undefined
// 140020BF0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_138;
// 140020C10: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_140;
// 140020C30: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_142;
// 140027108: using guessed type __int64 (__fastcall *onUnhandledException__system_u4442)(_QWORD);
//----- (000000014000F1E2) ----------------------------------------------------
signed __int64 *__fastcall reportUnhandledError__system_u4454(__int64 a1)
{
if ( unhandledExceptionHook__system_u3638 )
unhandledExceptionHook__system_u3638(a1);
return reportUnhandledErrorAux__system_u4443(a1);
}
// 1400270F8: using guessed type __int64 (__fastcall *unhandledExceptionHook__system_u3638)(_QWORD);
//----- (000000014000F220) ----------------------------------------------------
_QWORD **__fastcall eqdestroy___stdZtypedthreads_u184(__int64 *a1)
{
_QWORD **result; // rax
result = (_QWORD **)((unsigned __int8)nimDecRefIsLastCyclicDyn_1(a1) ^ 1u);
if ( !(_BYTE)result )
return nimDestroyAndDispose((_QWORD **)a1);
return result;
}
//----- (000000014000F260) ----------------------------------------------------
_QWORD **raiseDefect()
{
_BYTE v1[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v2; // [rsp+28h] [rbp-38h]
__int64 v3; // [rsp+30h] [rbp-30h]
const char *v4; // [rsp+38h] [rbp-28h]
__int16 v5; // [rsp+40h] [rbp-20h]
__int64 *CurrentException; // [rsp+58h] [rbp-8h]
v2 = "raiseDefect";
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v3 = 0;
v5 = 0;
nimFrame_4((__int64)v1);
CurrentException = 0;
v3 = 2315;
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
CurrentException = getCurrentException();
v3 = 2316;
if ( CurrentException && isObjDisplayCheck(*CurrentException, 2, 2017157120) )
{
v3 = 2317;
reportUnhandledError__system_u4454((__int64)CurrentException);
v3 = 2318;
exit_0(1);
}
v3 = 227;
v4 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\std\\typedthreads.nim";
eqdestroy___stdZtypedthreads_u184(CurrentException);
return popFrame_4();
}
//----- (000000014000F33E) ----------------------------------------------------
_QWORD **popCurrentException()
{
__int64 **address; // rax
address = (__int64 **)_emutls_get_address(&_emutls_v_currException__system_u4105);
return eqcopy___stdZtypedthreads_u187(address, (*address)[7]);
}
//----- (000000014000F371) ----------------------------------------------------
int __fastcall rawWriteString(FILE *a1, const void *a2, size_t a3)
{
fwrite(a2, 1u, a3, a1);
return fflush_0(a1);
}
//----- (000000014000F3CD) ----------------------------------------------------
int __fastcall writeToStdErr__system_u4072(const void *a1, size_t a2)
{
FILE *v2; // rax
v2 = __acrt_iob_func(2u);
return rawWriteString(v2, a1, a2);
}
//----- (000000014000F408) ----------------------------------------------------
int __fastcall showErrorMessage__system_u4077(const char *a1, size_t a2)
{
int result; // eax
_QWORD v3[2]; // [rsp+20h] [rbp-30h] BYREF
__int64 v4; // [rsp+30h] [rbp-20h] BYREF
signed __int64 *v5; // [rsp+38h] [rbp-18h]
_BYTE *v6; // [rsp+40h] [rbp-10h]
unsigned __int8 v7; // [rsp+4Fh] [rbp-1h]
v6 = nimErrorFlag_3();
v7 = 1;
if ( !errorMessageWriter__system_u4067 )
goto LABEL_8;
v4 = 0;
v5 = 0;
cstrToNimstr(&v4, a1);
v3[0] = v4;
v3[1] = v5;
errorMessageWriter__system_u4067(v3);
v7 = 0;
if ( v5 && (*v5 & 0x4000000000000000LL) == 0 )
deallocShared(v5);
if ( *v6 )
{
*v6 = 0;
raiseDefect();
popCurrentException();
}
result = (unsigned __int8)*v6;
if ( !*v6 )
{
LABEL_8:
result = v7 ^ 1;
if ( v7 == 1 )
return writeToStdErr__system_u4072(a1, a2);
}
return result;
}
// 140027100: using guessed type __int64 (__fastcall *errorMessageWriter__system_u4067)(_QWORD);
//----- (000000014000F502) ----------------------------------------------------
int __fastcall showErrorMessage2__system_u4085(size_t *a1)
{
size_t v1; // rdx
size_t v2; // rbx
const char *v3; // rax
_QWORD v5[6]; // [rsp+0h] [rbp-40h] BYREF
size_t v6; // [rsp+30h] [rbp-10h]
size_t v7; // [rsp+38h] [rbp-8h]
v1 = a1[1];
v6 = *a1;
v7 = v1;
v2 = v6;
v5[4] = v6;
v5[5] = v1;
v3 = (const char *)nimToCStringConv(&v5[4]);
return showErrorMessage__system_u4077(v3, v2);
}
//----- (000000014000F552) ----------------------------------------------------
signed __int64 writeStackTrace__system_u2672()
{
signed __int64 result; // rax
size_t v1[2]; // [rsp+20h] [rbp-30h] BYREF
size_t v2; // [rsp+30h] [rbp-20h] BYREF
signed __int64 *v3; // [rsp+38h] [rbp-18h]
_BYTE *v4; // [rsp+48h] [rbp-8h]
v4 = nimErrorFlag_3();
v2 = 0;
v3 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_2;
rawWriteStackTrace__system_u4426((__int64 *)&v2);
v1[0] = v2;
v1[1] = (size_t)v3;
showErrorMessage2__system_u4085(v1);
result = (unsigned __int8)*v4;
if ( !*v4 )
{
result = (signed __int64)v3;
if ( v3 )
{
result = *v3 & 0x4000000000000000LL;
if ( !result )
return (signed __int64)deallocShared(v3);
}
}
return result;
}
//----- (000000014000F5FA) ----------------------------------------------------
__int64 callDepthLimitReached__system_u4678()
{
__int64 result; // rax
__int64 v1; // [rsp+20h] [rbp-50h] BYREF
void *v2; // [rsp+28h] [rbp-48h]
__int64 v3; // [rsp+30h] [rbp-40h] BYREF
void *v4; // [rsp+38h] [rbp-38h]
__int64 v5; // [rsp+40h] [rbp-30h] BYREF
void *v6; // [rsp+48h] [rbp-28h]
__int64 v7; // [rsp+50h] [rbp-20h]
void *v8; // [rsp+58h] [rbp-18h]
_BYTE *v9; // [rsp+68h] [rbp-8h]
v9 = nimErrorFlag_3();
v7 = 0;
v8 = 0;
v5 = 0;
v6 = 0;
writeStackTrace__system_u2672();
v3 = 0;
v4 = 0;
dollar___systemZdollars_u14(&v5, 2000);
result = (unsigned __int8)*v9;
if ( !*v9 )
{
rawNewString(&v1, v5 + 167);
v3 = v1;
v4 = v2;
v1 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_144;
v2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_143;
appendString(&v3, &v1);
v1 = v5;
v2 = v6;
appendString(&v3, &v1);
v1 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_146;
v2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_145;
appendString(&v3, &v1);
v7 = v3;
v8 = v4;
v1 = v3;
v2 = v4;
showErrorMessage2__system_u4085((size_t *)&v1);
exit_0(1);
}
return result;
}
// 140020C80: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_144;
// 140020D20: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_146;
//----- (000000014000F734) ----------------------------------------------------
__int64 __fastcall nimFrame_4(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(&_emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(&_emutls_v_framePtr__system_u2692) + 34LL) + 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(&_emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (000000014000F7C4) ----------------------------------------------------
unsigned __int64 __fastcall percentpercent___system_u873(unsigned __int64 a1, unsigned __int64 a2)
{
_BYTE v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
unsigned __int64 v8; // [rsp+58h] [rbp-8h]
v4 = "%%";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 0;
v7 = 0;
nimFrame_4((__int64)v3);
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\arithmetics.nim";
v5 = 401;
v8 = a1 % a2;
popFrame_4();
return v8;
}
//----- (000000014000F845) ----------------------------------------------------
void __fastcall __noreturn procAddrError(const char *a1)
{
FILE *v1; // rax
FILE *v2; // rax
FILE *v3; // rax
v1 = __acrt_iob_func(2u);
rawWrite(v1, "could not import: ");
v2 = __acrt_iob_func(2u);
rawWrite(v2, a1);
v3 = __acrt_iob_func(2u);
rawWrite(v3, "\n");
exit_0(1);
}
//----- (000000014000F8B9) ----------------------------------------------------
FARPROC __fastcall nimGetProcAddr(HMODULE a1, const CHAR *a2)
{
CHAR ProcName[256]; // [rsp+20h] [rbp-60h] BYREF
unsigned __int64 v4; // [rsp+120h] [rbp+A0h]
__int64 v5; // [rsp+128h] [rbp+A8h]
signed __int64 v6; // [rsp+130h] [rbp+B0h]
__int64 j; // [rsp+138h] [rbp+B8h]
__int64 i; // [rsp+140h] [rbp+C0h]
FARPROC ProcAddress; // [rsp+148h] [rbp+C8h]
ProcAddress = GetProcAddress(a1, a2);
if ( !ProcAddress )
{
nimZeroMem_1(ProcName, 0xFAu);
ProcName[0] = 95;
for ( i = 1; i <= 244 && a2[i - 1]; ++i )
ProcName[i] = a2[i - 1];
ProcName[i] = 64;
v5 = 0;
for ( j = 0; ; ++j )
{
if ( j > 50 )
procAddrError(a2);
v5 = j;
v6 = 4 * j;
if ( (unsigned __int64)(4 * j + 99) > 0xC6 )
{
i += 3;
}
else if ( (unsigned __int64)(v6 + 9) > 0x12 )
{
i += 2;
}
else
{
++i;
}
ProcName[i + 1] = 0;
do
{
v4 = 0;
v4 = percentpercent___system_u873(v6, 0xAu);
ProcName[i--] = v4 + 48;
v6 /= 10LL;
}
while ( v6 );
ProcAddress = GetProcAddress(a1, ProcName);
if ( ProcAddress )
break;
}
}
return ProcAddress;
}
//----- (000000014000FB15) ----------------------------------------------------
_QWORD **__fastcall sysFatal__system_u4896(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "sysFatal";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__lVI5mUyBp9bAT9cco7UvZP8Q_;
v16[2] = "FieldDefect";
v11 = 1694;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v11 = 53;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v6[4] = 53;
raiseExceptionEx((__int64)v16, (__int64)"FieldDefect");
return popFrame_4();
}
// 14000FBF1: variable 'v2' is possibly undefined
// 1400224C0: using guessed type __int64 (__fastcall **refptr_NTIv2__lVI5mUyBp9bAT9cco7UvZP8Q_)();
//----- (000000014000FC58) ----------------------------------------------------
signed __int64 *__fastcall raiseFieldErrorStr(__int64 *a1, __int64 *a2)
{
signed __int64 *v2; // rbx
__int64 v3; // rax
signed __int64 *v4; // rdx
signed __int64 *result; // rax
__int64 v6; // [rsp+0h] [rbp-70h] BYREF
__int64 v7; // [rsp+20h] [rbp-50h] BYREF
signed __int64 *v8; // [rsp+28h] [rbp-48h]
__int64 v9; // [rsp+30h] [rbp-40h]
signed __int64 *v10; // [rsp+38h] [rbp-38h]
__int64 v11; // [rsp+40h] [rbp-30h]
signed __int64 *v12; // [rsp+48h] [rbp-28h]
__int64 v13; // [rsp+50h] [rbp-20h] BYREF
signed __int64 *v14; // [rsp+58h] [rbp-18h]
__int64 v15; // [rsp+60h] [rbp-10h]
signed __int64 *v16; // [rsp+68h] [rbp-8h]
v2 = (signed __int64 *)a1[1];
v11 = *a1;
v12 = v2;
v3 = *a2;
v4 = (signed __int64 *)a2[1];
v9 = v3;
v10 = v4;
v15 = 0;
v16 = 0;
v13 = 0;
v14 = 0;
rawNewString(&v6 + 4, v11 + v3 + 1);
v13 = v7;
v14 = v8;
v7 = v11;
v8 = v12;
appendString(&v13, &v7);
v7 = v9;
v8 = v10;
appendString(&v13, &v7);
v7 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_148;
v8 = (signed __int64 *)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_147;
appendString(&v13, &v7);
v15 = v13;
v16 = v14;
v7 = v13;
v8 = v14;
sysFatal__system_u4896(&v7);
result = v16;
if ( v16 )
{
result = (signed __int64 *)(*v16 & 0x4000000000000000LL);
if ( !result )
return (signed __int64 *)deallocShared(v16);
}
return result;
}
// 140020D40: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_148;
//----- (000000014000FD9D) ----------------------------------------------------
_QWORD **__fastcall reset__stdZexitprocs_u58(__int64 **a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v3; // [rsp+28h] [rbp-28h]
__int64 v4; // [rsp+30h] [rbp-20h]
const char *v5; // [rsp+38h] [rbp-18h]
__int16 v6; // [rsp+40h] [rbp-10h]
v3 = "reset";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v4 = 0;
v6 = 0;
nimFrame_4((__int64)v2);
v4 = 938;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
eqdestroy___stdZexitprocs_u94(a1);
v4 = 939;
eqwasMoved___stdZexitprocs_u91(a1);
return popFrame_4();
}
//----- (000000014000FE18) ----------------------------------------------------
__int64 *__fastcall shrink__stdZexitprocs_u38(__int64 *a1, __int64 a2)
{
__int64 i; // [rsp+58h] [rbp-8h]
if ( __OFSUB__(*a1, 1) )
return (__int64 *)raiseOverflow();
for ( i = *a1 - 1; a2 <= i; --i )
{
if ( i < 0 || i >= *a1 )
return (__int64 *)raiseIndexError2(i, *a1 - 1);
reset__stdZexitprocs_u58((__int64 **)(a1[1] + 24 * i + 8));
if ( __OFSUB__(i, 1) )
return (__int64 *)raiseOverflow();
}
*a1 = a2;
return a1;
}
//----- (000000014000FF52) ----------------------------------------------------
__int64 *__fastcall setLen__stdZexitprocs_u31(__int64 *a1, __int64 a2)
{
__int64 *result; // rax
_QWORD *v3; // rax
__int64 v4; // [rsp+40h] [rbp-70h] BYREF
_QWORD v5[3]; // [rsp+48h] [rbp-68h] BYREF
__int64 v6; // [rsp+60h] [rbp-50h]
signed __int64 v7; // [rsp+68h] [rbp-48h]
signed __int64 v8; // [rsp+70h] [rbp-40h]
signed __int64 *v9; // [rsp+78h] [rbp-38h]
__int64 *v10; // [rsp+80h] [rbp-30h]
signed __int64 v11; // [rsp+88h] [rbp-28h]
signed __int64 v12; // [rsp+90h] [rbp-20h]
__int64 v13; // [rsp+98h] [rbp-18h]
signed __int64 i; // [rsp+A0h] [rbp-10h]
bool v15; // [rsp+AFh] [rbp-1h]
v13 = *a1;
if ( a2 < v13 )
return shrink__stdZexitprocs_u38(a1, a2);
v12 = *a1;
v11 = v12;
result = (__int64 *)a2;
if ( a2 > v12 )
{
v10 = a1;
v15 = 0;
v15 = a1[1] == 0;
if ( !v15 )
v15 = a2 > (__int64)(*(_QWORD *)v10[1] & 0xBFFFFFFFFFFFFFFFuLL);
if ( v15 )
{
v6 = a2 - v11;
if ( __OFSUB__(a2, v11) )
return (__int64 *)raiseOverflow();
v9 = 0;
v9 = prepareSeqAddUninit(v11, (signed __int64 *)v10[1], v6, 0x18u, 8);
v10[1] = (__int64)v9;
}
*v10 = a2;
v8 = 0;
v7 = a2;
for ( i = v11; ; ++i )
{
result = (__int64 *)i;
if ( i >= v7 )
break;
v8 = i;
nimZeroMem_1(&v4, 0x18u);
nimZeroMem_1(&v4, 0x18u);
LOBYTE(v4) = 0;
nimZeroMem_1(v5, 0x10u);
v3 = (_QWORD *)(v10[1] + 24 * v8);
v3[1] = v4;
v3[2] = v5[0];
v3[3] = v5[1];
if ( __OFADD__(1, i) )
return (__int64 *)raiseOverflow();
}
}
return result;
}
//----- (0000000140010176) ----------------------------------------------------
_QWORD **__fastcall add__stdZexitprocs_u190(__int64 a1, _QWORD *a2)
{
_QWORD **result; // rax
unsigned __int64 v5; // [rsp+58h] [rbp-18h]
bool v6; // [rsp+6Fh] [rbp-1h]
v5 = *(_QWORD *)a1;
v6 = *(_QWORD *)(a1 + 8) == 0;
if ( *(_QWORD *)(a1 + 8) )
{
if ( __OFADD__(1, v5) )
return raiseOverflow();
v6 = (__int64)(**(_QWORD **)(a1 + 8) & 0xBFFFFFFFFFFFFFFFuLL) < (__int64)(v5 + 1);
}
if ( v6 )
*(_QWORD *)(a1 + 8) = prepareSeqAddUninit(v5, *(signed __int64 **)(a1 + 8), 1, 0x18u, 8);
if ( __OFADD__(1, v5) )
return raiseOverflow();
*(_QWORD *)a1 = v5 + 1;
result = (_QWORD **)(*(_QWORD *)(a1 + 8) + 24 * v5);
result[1] = (_QWORD *)*a2;
result[2] = (_QWORD *)a2[1];
result[3] = (_QWORD *)a2[2];
return result;
}
//----- (00000001400102DD) ----------------------------------------------------
_QWORD **__fastcall eqdup___system_u4017(__int64 *a1, __int64 a2, _QWORD *a3)
{
_QWORD **result; // rax
__int64 v4; // [rsp+20h] [rbp-20h]
__int64 v5; // [rsp+28h] [rbp-18h]
v4 = *a1;
v5 = a1[1];
nimZeroMem_1(a3, 0x10u);
a3[1] = v5;
*a3 = v4;
result = (_QWORD **)v5;
if ( v5 )
return nimIncRefCyclic_0(v5);
return result;
}
//----- (000000014001035A) ----------------------------------------------------
void __fastcall __noreturn signalHandler(int a1)
{
__int64 v1; // r8
__int64 v2; // [rsp+20h] [rbp-20h] BYREF
void *v3; // [rsp+28h] [rbp-18h]
__int64 v4; // [rsp+30h] [rbp-10h] BYREF
void *v5; // [rsp+38h] [rbp-8h]
v4 = 0;
v5 = 0;
rawNewString(&v2, 2000);
v4 = v2;
v5 = v3;
rawWriteStackTrace__system_u4426(&v4);
if ( a1 == 2 )
{
prepareAdd(&v4, 31, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_156;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_155;
appendString(&v4, &v2);
}
else if ( a1 == 11 )
{
prepareAdd(&v4, 61, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_158;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_157;
appendString(&v4, &v2);
}
else if ( a1 == 22 )
{
prepareAdd(&v4, 31, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_160;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_159;
appendString(&v4, &v2);
}
else if ( a1 == 8 )
{
prepareAdd(&v4, 26, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_162;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_161;
appendString(&v4, &v2);
}
else
{
if ( a1 == 4 )
{
prepareAdd(&v4, 27, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_164;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_163;
}
else
{
prepareAdd(&v4, 15, v1);
v2 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_168;
v3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_167;
}
appendString(&v4, &v2);
}
v2 = v4;
v3 = v5;
showErrorMessage2__system_u4085((size_t *)&v2);
exit_0(1);
}
// 1400103B4: variable 'v1' is possibly undefined
// 140020D90: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_156;
// 140020DF0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_158;
// 140020E30: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_160;
// 140020E70: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_162;
// 140020EB0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_164;
// 140020F40: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_168;
//----- (000000014001054A) ----------------------------------------------------
_crt_signal_t registerSignalHandler__system_u4698()
{
signal_0(2, (_crt_signal_t)signalHandler);
signal_0(11, (_crt_signal_t)signalHandler);
signal_0(22, (_crt_signal_t)signalHandler);
signal_0(8, (_crt_signal_t)signalHandler);
return signal_0(4, (_crt_signal_t)signalHandler);
}
//----- (00000001400105F9) ----------------------------------------------------
void __fastcall colonanonymous___system_u9048()
{
_BYTE v0[8]; // [rsp+20h] [rbp-30h] BYREF
const char *v1; // [rsp+28h] [rbp-28h]
__int64 v2; // [rsp+30h] [rbp-20h]
const char *v3; // [rsp+38h] [rbp-18h]
__int16 v4; // [rsp+40h] [rbp-10h]
v1 = ":anonymous";
v3 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v2 = 0;
v4 = 0;
nimFrame_4((__int64)v0);
DeleteCriticalSection(&echoLock__system_u9047);
popFrame_4();
}
//----- (0000000140010650) ----------------------------------------------------
__int64 *__fastcall mnewString(__int64 *a1, __int64 a2)
{
_QWORD *v2; // rdx
__int64 v4; // [rsp+20h] [rbp-40h]
__int64 v5; // [rsp+30h] [rbp-30h] BYREF
_QWORD *v6; // [rsp+38h] [rbp-28h]
_QWORD *v7; // [rsp+48h] [rbp-18h]
_QWORD *v8; // [rsp+50h] [rbp-10h]
__int64 v9; // [rsp+58h] [rbp-8h]
nimZeroMem_1(&v5, 0x10u);
if ( a2 > 0 )
{
v9 = 0;
if ( __OFADD__(1, a2) || (v4 = a2 + 9, __OFADD__(8, a2 + 1)) )
{
raiseOverflow();
}
else if ( v4 >= 0 )
{
v8 = 0;
v8 = allocShared0Impl__system_u1762(v4);
v7 = v8;
*v8 = a2;
v9 = a2;
v5 = a2;
v6 = v7;
}
else
{
raiseRangeErrorI(v4, 0, 0x7FFFFFFFFFFFFFFFLL);
}
}
else
{
v5 = 0;
v6 = 0;
}
v2 = v6;
*a1 = v5;
a1[1] = (__int64)v2;
return a1;
}
//----- (000000014001077D) ----------------------------------------------------
_QWORD **__fastcall nimPrepareStrMutationImpl__system_u2410(_QWORD *a1)
{
__int64 v2; // [rsp+28h] [rbp-28h]
__int64 v3; // [rsp+30h] [rbp-20h]
__int64 v4; // [rsp+48h] [rbp-8h]
v4 = a1[1];
if ( __OFADD__(1, *a1) )
return raiseOverflow();
v3 = *a1 + 9LL;
if ( __OFADD__(8, *a1 + 1LL) )
return raiseOverflow();
if ( v3 < 0 )
return (_QWORD **)raiseRangeErrorI(v3, 0, 0x7FFFFFFFFFFFFFFFLL);
a1[1] = allocSharedImpl(v3);
*(_QWORD *)a1[1] = *a1;
v2 = *a1 + 1LL;
if ( __OFADD__(1, *a1) )
return raiseOverflow();
if ( v2 >= 0 )
return (_QWORD **)copyMem__system_u1731_0((void *)(a1[1] + 8LL), (const void *)(v4 + 8), v2);
return (_QWORD **)raiseRangeErrorI(v2, 0, 0x7FFFFFFFFFFFFFFFLL);
}
//----- (00000001400108DE) ----------------------------------------------------
_QWORD **__fastcall sysFatal__system_u5276(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "sysFatal";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__k6VacnfEHcFyOMal5EruvA_;
v16[2] = "DivByZeroDefect";
v11 = 1694;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v11 = 53;
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\fatal.nim";
v6[4] = 53;
raiseExceptionEx((__int64)v16, (__int64)"DivByZeroDefect");
return popFrame_4();
}
// 1400109BA: variable 'v2' is possibly undefined
// 1400224B0: using guessed type __int64 (__fastcall **refptr_NTIv2__k6VacnfEHcFyOMal5EruvA_)();
//----- (0000000140010A21) ----------------------------------------------------
_QWORD **raiseDivByZero()
{
__int64 v1[2]; // [rsp+20h] [rbp-10h] BYREF
v1[0] = TM__Q5wkpxktOdTGvlSRo9bzt9aw_175;
v1[1] = (__int64)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_174;
return sysFatal__system_u5276(v1);
}
// 140020F80: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_175;
//----- (0000000140010A52) ----------------------------------------------------
_QWORD **raiseRangeErrorU()
{
__int64 v1[2]; // [rsp+20h] [rbp-10h] BYREF
v1[0] = TM__Q5wkpxktOdTGvlSRo9bzt9aw_176;
v1[1] = (__int64)&TM__Q5wkpxktOdTGvlSRo9bzt9aw_13;
return sysFatal__system_u4979(v1);
}
// 140020F90: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_176;
//----- (0000000140010A8F) ----------------------------------------------------
_QWORD **__fastcall raiseEIO__system_u9050(__int64 *a1)
{
__int64 v1; // rdx
__int64 v2; // r8
_QWORD *v3; // rcx
__int64 v4; // rdx
_QWORD v6[6]; // [rsp+0h] [rbp-A0h] BYREF
__int64 v7[2]; // [rsp+30h] [rbp-70h] BYREF
__int64 v8; // [rsp+40h] [rbp-60h]
__int64 v9; // [rsp+48h] [rbp-58h]
const char *v10; // [rsp+58h] [rbp-48h]
__int64 v11; // [rsp+60h] [rbp-40h]
const char *v12; // [rsp+68h] [rbp-38h]
__int16 v13; // [rsp+70h] [rbp-30h]
__int64 v14; // [rsp+80h] [rbp-20h] BYREF
__int64 v15; // [rsp+88h] [rbp-18h]
_QWORD *v16; // [rsp+98h] [rbp-8h]
v1 = a1[1];
v8 = *a1;
v9 = v1;
v10 = "raiseEIO";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v11 = 0;
v13 = 0;
nimFrame_4((__int64)&v6[10]);
v14 = 0;
v15 = 0;
v16 = 0;
v16 = (_QWORD *)nimNewObj(64, 8);
*v16 = refptr_NTIv2__txzrG6zQAbHR6Hap9b2RC7g_;
v16[2] = "IOError";
v12 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v11 = 1694;
v7[0] = v8;
v7[1] = v9;
eqdup___system_u2662(&v14, v7, v2);
v3 = v16;
v4 = v15;
v16[3] = v14;
v3[4] = v4;
v16[1] = 0;
v11 = 2946;
v6[4] = 2946;
raiseExceptionEx((__int64)v16, (__int64)"IOError");
return popFrame_4();
}
// 140010B60: variable 'v2' is possibly undefined
// 1400224D0: using guessed type __int64 (__fastcall **refptr_NTIv2__txzrG6zQAbHR6Hap9b2RC7g_)();
//----- (0000000140010BC8) ----------------------------------------------------
_QWORD **__fastcall writeWindows__system_u9129(FILE *a1, __int64 *a2, char a3)
{
__int64 v3; // rax
void *v4; // rdx
const char *v5; // rax
__int64 v7; // [rsp+0h] [rbp-A0h] BYREF
__int64 v8; // [rsp+20h] [rbp-80h] BYREF
void *v9; // [rsp+28h] [rbp-78h]
__int64 v10; // [rsp+30h] [rbp-70h]
void *v11; // [rsp+38h] [rbp-68h]
__int64 v12; // [rsp+40h] [rbp-60h]
__int64 v13; // [rsp+48h] [rbp-58h]
const char *v14; // [rsp+58h] [rbp-48h]
__int64 v15; // [rsp+60h] [rbp-40h]
const char *v16; // [rsp+68h] [rbp-38h]
__int16 v17; // [rsp+70h] [rbp-30h]
int v18; // [rsp+84h] [rbp-1Ch]
int v19; // [rsp+88h] [rbp-18h]
int v20; // [rsp+8Ch] [rbp-14h]
_BYTE *v21; // [rsp+90h] [rbp-10h]
__int64 v22; // [rsp+98h] [rbp-8h]
v3 = *a2;
v4 = (void *)a2[1];
v10 = v3;
v11 = v4;
v14 = "writeWindows";
v16 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v15 = 0;
v17 = 0;
nimFrame_4((__int64)(&v7 + 10));
v21 = nimErrorFlag_3();
v15 = 2976;
v20 = 0;
v8 = v10;
v9 = v11;
v5 = (const char *)nimToCStringConv(&v8);
v20 = fprintf(a1, "%s", v5);
v22 = v20;
v15 = 2977;
while ( v22 < v10 )
{
v15 = 2978;
if ( v22 < 0 || v22 >= v10 )
{
LABEL_15:
raiseIndexError2(v22, v10 - 1);
return popFrame_4();
}
if ( *((_BYTE *)v11 + v22 + 8) )
{
v15 = 2985;
if ( v22 >= v10 )
goto LABEL_15;
v18 = fprintf(a1, "%s", (const char *)v11 + v22 + 8);
v15 = 2986;
if ( v18 <= 0 )
{
v15 = 2987;
if ( a3 != 1
|| (v8 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_180,
v9 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_177,
raiseEIO__system_u9050(&v8),
!*v21) )
{
v15 = 2988;
}
return popFrame_4();
}
v15 = 2989;
v12 = v22 + v18;
if ( __OFADD__(v22, v18) )
{
LABEL_12:
raiseOverflow();
return popFrame_4();
}
v22 = v12;
}
else
{
v15 = 2979;
v19 = fputc(0, a1);
v15 = 2980;
if ( v19 )
{
v15 = 2981;
if ( a3 != 1
|| (v8 = TM__Q5wkpxktOdTGvlSRo9bzt9aw_178,
v9 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_177,
raiseEIO__system_u9050(&v8),
!*v21) )
{
v15 = 2982;
}
return popFrame_4();
}
v15 = 2983;
v13 = v22 + 1;
if ( __OFADD__(1, v22) )
goto LABEL_12;
v22 = v13;
}
}
return popFrame_4();
}
// 140010DB7: conditional instruction was optimized away because %var_18.8>=0
// 140020FD0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_178;
// 140020FE0: using guessed type __int64 TM__Q5wkpxktOdTGvlSRo9bzt9aw_180;
//----- (0000000140010EC2) ----------------------------------------------------
_QWORD **__fastcall echoBinSafe(__int64 a1, __int64 a2)
{
FILE *v2; // rax
__int64 v3; // rdx
FILE *v4; // rax
FILE *v5; // rax
__int64 v7[2]; // [rsp+20h] [rbp-70h] BYREF
_BYTE v8[8]; // [rsp+30h] [rbp-60h] BYREF
const char *v9; // [rsp+38h] [rbp-58h]
__int64 v10; // [rsp+40h] [rbp-50h]
const char *v11; // [rsp+48h] [rbp-48h]
__int16 v12; // [rsp+50h] [rbp-40h]
int v13; // [rsp+6Ch] [rbp-24h]
size_t v14; // [rsp+70h] [rbp-20h]
__int64 *v15; // [rsp+78h] [rbp-18h]
_BYTE *v16; // [rsp+80h] [rbp-10h]
__int64 v17; // [rsp+88h] [rbp-8h]
v9 = "echoBinSafe";
v11 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v10 = 0;
v12 = 0;
nimFrame_4((__int64)v8);
v16 = nimErrorFlag_3();
v10 = 2966;
EnterCriticalSection(&echoLock__system_u9047);
v15 = 0;
v11 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators.nim";
v17 = 0;
v10 = 19;
while ( v17 < a2 )
{
v10 = 2967;
v11 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
if ( v17 < 0 || v17 >= a2 )
{
raiseIndexError2(v17, a2 - 1);
return popFrame_4();
}
v15 = (__int64 *)(16 * v17 + a1);
v10 = 2990;
v2 = __acrt_iob_func(1u);
v3 = v15[1];
v7[0] = *v15;
v7[1] = v3;
writeWindows__system_u9129(v2, v7, 0);
if ( *v16 )
return popFrame_4();
v10 = 13;
v11 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators.nim";
++v17;
}
v10 = 2994;
v11 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
v14 = 0;
v4 = __acrt_iob_func(1u);
v14 = fwrite("\n", 1u, 1u, v4);
v10 = 2995;
v13 = 0;
v5 = __acrt_iob_func(1u);
v13 = fflush_0(v5);
v10 = 2999;
LeaveCriticalSection(&echoLock__system_u9047);
return popFrame_4();
}
//----- (00000001400110C2) ----------------------------------------------------
__int64 nimTestErrorFlag()
{
__int64 result; // rax
__int64 *address; // rbx
unsigned __int8 v2; // [rsp+2Fh] [rbp-1h]
v2 = *(_BYTE *)_emutls_get_address(&_emutls_v_nimInErrorMode__system_u4460);
if ( v2 == 1 )
v2 = *(_QWORD *)_emutls_get_address(&_emutls_v_currException__system_u4105) != 0;
result = v2 ^ 1u;
if ( v2 == 1 )
{
address = (__int64 *)_emutls_get_address(&_emutls_v_currException__system_u4105);
reportUnhandledError__system_u4454(*address);
eqsink___stdZtypedthreads_u195((__int64 **)address, 0);
exit_0(1);
}
return result;
}
//----- (0000000140011157) ----------------------------------------------------
__int64 atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatssystemdotnim_Init000()
{
registerSignalHandler__system_u4698();
InitializeCriticalSection(&echoLock__system_u9047);
atexit(colonanonymous___system_u9048);
return nimTestErrorFlag();
}
//----- (00000001400111A0) ----------------------------------------------------
__int64 __fastcall floorMod__pureZtimes_u1259(__int64 a1, __int64 a2)
{
bool v3; // [rsp+5h] [rbp-Bh]
bool v4; // [rsp+6h] [rbp-Ah]
bool v5; // [rsp+7h] [rbp-9h]
__int64 v6; // [rsp+8h] [rbp-8h]
v6 = a1 % a2;
v4 = a1 % a2 > 0;
if ( a1 % a2 > 0 )
v4 = a2 < 0;
v5 = v4;
if ( !v4 )
{
v3 = v6 < 0;
if ( v6 < 0 )
v3 = a2 > 0;
v5 = v3;
}
if ( v5 )
v6 += a2;
return v6;
}
//----- (0000000140011249) ----------------------------------------------------
__int64 __fastcall floorDiv__pureZtimes_u317(__int64 a1, __int64 a2)
{
__int64 v3; // [rsp+8h] [rbp-18h]
bool v4; // [rsp+15h] [rbp-Bh]
bool v5; // [rsp+16h] [rbp-Ah]
bool v6; // [rsp+17h] [rbp-9h]
__int64 v7; // [rsp+18h] [rbp-8h]
v7 = a1 / a2;
v3 = a1 % a2;
v5 = a1 % a2 > 0;
if ( a1 % a2 > 0 )
v5 = a2 < 0;
v6 = v5;
if ( !v5 )
{
v4 = v3 < 0;
if ( v3 < 0 )
v4 = a2 > 0;
v6 = v4;
}
if ( v6 )
--v7;
return v7;
}
//----- (0000000140011300) ----------------------------------------------------
void *__fastcall nimToCStringConv_0(_QWORD *a1)
{
if ( *a1 )
return (void *)(a1[1] + 8LL);
else
return &unk_140021920;
}
//----- (000000014001134B) ----------------------------------------------------
__int64 __fastcall nimFrame_5(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (00000001400113DB) ----------------------------------------------------
_QWORD **popFrame_5()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140011402) ----------------------------------------------------
HMODULE __fastcall loadLib__pureZdynlib_u3(__int64 *a1)
{
__int64 v1; // rbx
const CHAR *v2; // rax
__int64 v4; // [rsp+0h] [rbp-80h] BYREF
_QWORD v5[2]; // [rsp+20h] [rbp-60h] BYREF
__int64 v6; // [rsp+30h] [rbp-50h]
__int64 v7; // [rsp+38h] [rbp-48h]
const char *v8; // [rsp+48h] [rbp-38h]
__int64 v9; // [rsp+50h] [rbp-30h]
const char *v10; // [rsp+58h] [rbp-28h]
__int16 v11; // [rsp+60h] [rbp-20h]
HMODULE v12; // [rsp+70h] [rbp-10h]
HMODULE LibraryA; // [rsp+78h] [rbp-8h]
v1 = a1[1];
v6 = *a1;
v7 = v1;
v8 = "loadLib";
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\dynlib.nim";
v9 = 0;
v11 = 0;
nimFrame_5((__int64)(&v4 + 8));
v9 = 187;
v10 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\dynlib.nim";
LibraryA = 0;
v5[0] = v6;
v5[1] = v7;
v2 = (const CHAR *)nimToCStringConv_0(v5);
LibraryA = LoadLibraryA(v2);
v12 = LibraryA;
popFrame_5();
return v12;
}
//----- (00000001400114BC) ----------------------------------------------------
FARPROC __fastcall symAddr__pureZdynlib_u74(HMODULE a1, const CHAR *a2)
{
char v3[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v4; // [rsp+28h] [rbp-38h]
__int64 v5; // [rsp+30h] [rbp-30h]
const char *v6; // [rsp+38h] [rbp-28h]
__int16 v7; // [rsp+40h] [rbp-20h]
FARPROC v8; // [rsp+50h] [rbp-10h]
FARPROC ProcAddress; // [rsp+58h] [rbp-8h]
v4 = "symAddr";
v6 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\dynlib.nim";
v5 = 0;
v7 = 0;
nimFrame_5((__int64)v3);
v5 = 193;
ProcAddress = 0;
ProcAddress = GetProcAddress(a1, a2);
v8 = ProcAddress;
popFrame_5();
return v8;
}
//----- (0000000140011540) ----------------------------------------------------
void *nimErrorFlag_4()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (0000000140011565) ----------------------------------------------------
__int64 __fastcall nimFrame_6(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (00000001400115F5) ----------------------------------------------------
_QWORD **popFrame_6()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (000000014001161C) ----------------------------------------------------
__int64 __fastcall rdFileTime__windowsZwinlean_u282(__int64 a1)
{
_BYTE v2[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v3; // [rsp+28h] [rbp-38h]
__int64 v4; // [rsp+30h] [rbp-30h]
const char *v5; // [rsp+38h] [rbp-28h]
__int16 v6; // [rsp+40h] [rbp-20h]
__int64 v7; // [rsp+58h] [rbp-8h]
v3 = "rdFileTime";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\windows\\winlean.nim";
v4 = 0;
v6 = 0;
nimFrame_6((__int64)v2);
v4 = 339;
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\windows\\winlean.nim";
v7 = a1;
popFrame_6();
return v7;
}
//----- (000000014001168F) ----------------------------------------------------
_QWORD **atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_Init000()
{
__int64 v1[2]; // [rsp+20h] [rbp-60h] BYREF
_BYTE v2[8]; // [rsp+30h] [rbp-50h] BYREF
const char *v3; // [rsp+38h] [rbp-48h]
__int64 v4; // [rsp+40h] [rbp-40h]
const char *v5; // [rsp+48h] [rbp-38h]
__int16 v6; // [rsp+50h] [rbp-30h]
FARPROC v7; // [rsp+68h] [rbp-18h]
HMODULE Lib__pureZdynlib_u3; // [rsp+70h] [rbp-10h]
_BYTE *v9; // [rsp+78h] [rbp-8h]
v3 = "winlean";
v5 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\windows\\winlean.nim";
v4 = 0;
v6 = 0;
nimFrame_6((__int64)v2);
v9 = nimErrorFlag_4();
v4 = 837;
Lib__pureZdynlib_u3 = 0;
v1[0] = TM__k6kyf4Co79a84IkK9blFuQVA_3;
v1[1] = (__int64)"\n";
Lib__pureZdynlib_u3 = loadLib__pureZdynlib_u3(v1);
if ( !*v9 )
{
ws2__windowsZwinlean_u797 = (__int64)Lib__pureZdynlib_u3;
v4 = 838;
if ( Lib__pureZdynlib_u3 )
{
v4 = 839;
v7 = 0;
v7 = symAddr__pureZdynlib_u74((HMODULE)ws2__windowsZwinlean_u797, "inet_ntop");
if ( !*v9 )
inet_ntop_real__windowsZwinlean_u796 = (__int64)v7;
}
}
nimTestErrorFlag();
return popFrame_6();
}
// 140021990: using guessed type __int64 TM__k6kyf4Co79a84IkK9blFuQVA_3;
// 140027160: using guessed type __int64 inet_ntop_real__windowsZwinlean_u796;
// 140027168: using guessed type __int64 ws2__windowsZwinlean_u797;
//----- (0000000140011795) ----------------------------------------------------
FARPROC atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_DatInit000()
{
FARPROC result; // rax
__int64 v1; // [rsp+20h] [rbp-10h] BYREF
void *v2; // [rsp+28h] [rbp-8h]
v1 = TM__k6kyf4Co79a84IkK9blFuQVA_7;
v2 = &TM__k6kyf4Co79a84IkK9blFuQVA_6;
TM__k6kyf4Co79a84IkK9blFuQVA_4 = (__int64)nimLoadLibrary(&v1);
if ( !TM__k6kyf4Co79a84IkK9blFuQVA_4 )
{
v1 = TM__k6kyf4Co79a84IkK9blFuQVA_9;
v2 = &TM__k6kyf4Co79a84IkK9blFuQVA_8;
nimLoadLibraryError(&v1);
}
result = nimGetProcAddr((HMODULE)TM__k6kyf4Co79a84IkK9blFuQVA_4, "GetSystemTimeAsFileTime");
Dl_1426063656_ = (__int64)result;
return result;
}
// 1400219C0: using guessed type __int64 TM__k6kyf4Co79a84IkK9blFuQVA_7;
// 1400219F0: using guessed type __int64 TM__k6kyf4Co79a84IkK9blFuQVA_9;
// 140027170: using guessed type __int64 Dl_1426063656_;
// 140027178: using guessed type __int64 TM__k6kyf4Co79a84IkK9blFuQVA_4;
//----- (0000000140011820) ----------------------------------------------------
__int64 __fastcall nimFrame_7(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (00000001400118B0) ----------------------------------------------------
_QWORD **popFrame_7()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (00000001400118D7) ----------------------------------------------------
__int64 __fastcall toUnix__pureZtimes_u1230(__int64 *a1)
{
__int64 v1; // rdx
__int64 v3; // [rsp+0h] [rbp-70h] BYREF
__int64 v4; // [rsp+20h] [rbp-50h]
__int64 v5; // [rsp+28h] [rbp-48h]
const char *v6; // [rsp+38h] [rbp-38h]
__int64 v7; // [rsp+40h] [rbp-30h]
const char *v8; // [rsp+48h] [rbp-28h]
__int16 v9; // [rsp+50h] [rbp-20h]
__int64 v10; // [rsp+68h] [rbp-8h]
v1 = a1[1];
v4 = *a1;
v5 = v1;
v6 = "toUnix";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\times.nim";
v7 = 0;
v9 = 0;
nimFrame_7((__int64)(&v3 + 6));
v7 = 933;
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\times.nim";
v10 = v4;
popFrame_7();
return v10;
}
//----- (000000014001194F) ----------------------------------------------------
void *__fastcall nimSetMem__systemZmemory_u7_2(void *a1, int a2, size_t a3)
{
return memset(a1, a2, a3);
}
//----- (000000014001198B) ----------------------------------------------------
void *nimErrorFlag_5()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (00000001400119B0) ----------------------------------------------------
__int64 __fastcall nimZeroMem_2(void *a1, size_t a2)
{
unsigned __int8 *v3; // [rsp+28h] [rbp-8h]
v3 = (unsigned __int8 *)nimErrorFlag_5();
nimSetMem__systemZmemory_u7_2(a1, 0, a2);
return *v3;
}
//----- (00000001400119F5) ----------------------------------------------------
_QWORD *__fastcall initTime__pureZtimes_u1200(_QWORD *a1, __int64 a2, __int64 a3)
{
__int64 v3; // rdx
_BYTE v5[8]; // [rsp+20h] [rbp-50h] BYREF
const char *v6; // [rsp+28h] [rbp-48h]
__int64 v7; // [rsp+30h] [rbp-40h]
const char *v8; // [rsp+38h] [rbp-38h]
__int16 v9; // [rsp+40h] [rbp-30h]
__int64 v10; // [rsp+50h] [rbp-20h]
__int64 v11; // [rsp+58h] [rbp-18h]
__int64 v12; // [rsp+60h] [rbp-10h]
__int64 v13; // [rsp+68h] [rbp-8h]
v6 = "initTime";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\times.nim";
v7 = 0;
v9 = 0;
nimFrame_7((__int64)v5);
v7 = 917;
v13 = a2;
v10 = a2;
v12 = a3;
v11 = a3;
popFrame_7();
v3 = v11;
*a1 = v10;
a1[1] = v3;
return a1;
}
//----- (0000000140011A93) ----------------------------------------------------
_QWORD *__fastcall fromWinTime__pureZtimes_u1250(_QWORD *a1, __int64 a2)
{
__int64 v2; // rdx
_QWORD v4[2]; // [rsp+20h] [rbp-80h] BYREF
_BYTE v5[8]; // [rsp+30h] [rbp-70h] BYREF
const char *v6; // [rsp+38h] [rbp-68h]
__int64 v7; // [rsp+40h] [rbp-60h]
const char *v8; // [rsp+48h] [rbp-58h]
__int16 v9; // [rsp+50h] [rbp-50h]
__int64 v10; // [rsp+60h] [rbp-40h]
unsigned __int64 v11; // [rsp+68h] [rbp-38h]
__int64 v12; // [rsp+70h] [rbp-30h] BYREF
__int64 v13; // [rsp+78h] [rbp-28h]
__int64 v14; // [rsp+80h] [rbp-20h]
unsigned __int64 v15; // [rsp+88h] [rbp-18h]
unsigned __int64 v16; // [rsp+90h] [rbp-10h]
_BYTE *v17; // [rsp+98h] [rbp-8h]
v6 = "fromWinTime";
v8 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\times.nim";
v7 = 0;
v9 = 0;
nimFrame_7((__int64)v5);
v17 = nimErrorFlag_5();
nimZeroMem_2(&v12, 0x10u);
v7 = 966;
v16 = 0;
v16 = floorMod__pureZtimes_u1259(a2, 10000000);
if ( !*v17 )
{
v11 = 100 * v16;
if ( !is_mul_ok(0x64u, v16)
|| (v15 = v11, v7 = 967, v10 = a2 - 116444736000000000LL, __OFSUB__(a2, 116444736000000000LL)) )
{
raiseOverflow();
}
else
{
v14 = floorDiv__pureZtimes_u317(v10, 10000000);
if ( !*v17 )
{
v7 = 968;
if ( v15 < 0x3B9ACA00 )
{
initTime__pureZtimes_u1200(v4, v14, v15);
v12 = v4[0];
v13 = v4[1];
}
else
{
raiseRangeErrorI(v15, 0, 999999999);
}
}
}
}
popFrame_7();
v2 = v13;
*a1 = v12;
a1[1] = v2;
return a1;
}
//----- (0000000140011C57) ----------------------------------------------------
_QWORD *__fastcall getTime__pureZtimes_u1281(_QWORD *a1)
{
__int64 v1; // rdx
_QWORD v3[2]; // [rsp+20h] [rbp-70h] BYREF
_BYTE v4[8]; // [rsp+30h] [rbp-60h] BYREF
const char *v5; // [rsp+38h] [rbp-58h]
__int64 v6; // [rsp+40h] [rbp-50h]
const char *v7; // [rsp+48h] [rbp-48h]
__int16 v8; // [rsp+50h] [rbp-40h]
__int64 v9; // [rsp+68h] [rbp-28h] BYREF
__int64 v10; // [rsp+70h] [rbp-20h] BYREF
__int64 v11; // [rsp+78h] [rbp-18h]
__int64 v12; // [rsp+80h] [rbp-10h]
_BYTE *v13; // [rsp+88h] [rbp-8h]
v5 = "getTime";
v7 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\pure\\times.nim";
v6 = 0;
v8 = 0;
nimFrame_7((__int64)v4);
v13 = nimErrorFlag_5();
nimZeroMem_2(&v10, 0x10u);
v6 = 1000;
((void (__fastcall *)(__int64 *))*refptr_Dl_1426063656_)(&v9);
v6 = 1001;
v12 = 0;
v12 = rdFileTime__windowsZwinlean_u282(v9);
if ( !*v13 )
{
fromWinTime__pureZtimes_u1250(v3, v12);
v10 = v3[0];
v11 = v3[1];
}
popFrame_7();
v1 = v11;
*a1 = v10;
a1[1] = v1;
return a1;
}
// 140022480: using guessed type __int64 *refptr_Dl_1426063656_;
//----- (0000000140011D50) ----------------------------------------------------
unsigned __int64 __fastcall nimPrepareStrMutationV2(_QWORD *a1)
{
unsigned __int64 result; // rax
bool v2; // [rsp+2Fh] [rbp-1h]
v2 = a1[1] != 0;
if ( a1[1] )
v2 = (*(_QWORD *)a1[1] & 0x4000000000000000LL) != 0;
result = !v2;
if ( v2 )
return (unsigned __int64)nimPrepareStrMutationImpl__system_u2410(a1);
return result;
}
//----- (0000000140011DC1) ----------------------------------------------------
__int64 __fastcall nimFrame_8(__int64 a1)
{
_QWORD *address; // rax
__int64 result; // rax
if ( *(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) )
*(_WORD *)(a1 + 34) = *(_WORD *)(*(_QWORD *)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692) + 34LL)
+ 1;
else
*(_WORD *)(a1 + 34) = 0;
address = _emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*(_QWORD *)a1 = *address;
*address = a1;
result = *(unsigned __int16 *)(a1 + 34);
if ( (_WORD)result == 2000 )
return callDepthLimitReached__system_u4678();
return result;
}
//----- (0000000140011E51) ----------------------------------------------------
_QWORD **popFrame_8()
{
_QWORD **result; // rax
result = (_QWORD **)_emutls_get_address(refptr___emutls_v_framePtr__system_u2692);
*result = (_QWORD *)**result;
return result;
}
//----- (0000000140011E78) ----------------------------------------------------
__int64 *__fastcall buildEncodedFlag__crackme_u18(__int64 *a1)
{
_BYTE *v1; // rdx
__int64 v3[2]; // [rsp+20h] [rbp-50h] BYREF
_BYTE v4[8]; // [rsp+30h] [rbp-40h] BYREF
const char *v5; // [rsp+38h] [rbp-38h]
__int64 v6; // [rsp+40h] [rbp-30h]
const char *v7; // [rsp+48h] [rbp-28h]
__int16 v8; // [rsp+50h] [rbp-20h]
__int64 v9; // [rsp+60h] [rbp-10h] BYREF
_BYTE *v10; // [rsp+68h] [rbp-8h]
v5 = "buildEncodedFlag";
v7 = "C:\\CTF\\nimcrackme1\\crackme.nim";
v6 = 0;
v8 = 0;
nimFrame_8((__int64)v4);
v6 = 13;
v7 = "C:\\CTF\\nimcrackme1\\crackme.nim";
mnewString(v3, 38);
v9 = v3[0];
v10 = (_BYTE *)v3[1];
v6 = 14;
if ( v3[0] > 0 )
{
nimPrepareStrMutationV2(&v9);
v10[8] = 40;
v6 = 15;
if ( v9 > 1 )
{
nimPrepareStrMutationV2(&v9);
v10[9] = 5;
v6 = 16;
if ( v9 > 2 )
{
nimPrepareStrMutationV2(&v9);
v10[10] = 12;
v6 = 17;
if ( v9 > 3 )
{
nimPrepareStrMutationV2(&v9);
v10[11] = 71;
v6 = 18;
if ( v9 > 4 )
{
nimPrepareStrMutationV2(&v9);
v10[12] = 18;
v6 = 19;
if ( v9 > 5 )
{
nimPrepareStrMutationV2(&v9);
v10[13] = 75;
v6 = 20;
if ( v9 > 6 )
{
nimPrepareStrMutationV2(&v9);
v10[14] = 21;
v6 = 21;
if ( v9 > 7 )
{
nimPrepareStrMutationV2(&v9);
v10[15] = 92;
v6 = 22;
if ( v9 > 8 )
{
nimPrepareStrMutationV2(&v9);
v10[16] = 9;
v6 = 23;
if ( v9 > 9 )
{
nimPrepareStrMutationV2(&v9);
v10[17] = 18;
v6 = 24;
if ( v9 > 10 )
{
nimPrepareStrMutationV2(&v9);
v10[18] = 23;
v6 = 25;
if ( v9 > 11 )
{
nimPrepareStrMutationV2(&v9);
v10[19] = 85;
v6 = 26;
if ( v9 > 12 )
{
nimPrepareStrMutationV2(&v9);
v10[20] = 9;
v6 = 27;
if ( v9 > 13 )
{
nimPrepareStrMutationV2(&v9);
v10[21] = 75;
v6 = 28;
if ( v9 > 14 )
{
nimPrepareStrMutationV2(&v9);
v10[22] = 66;
v6 = 29;
if ( v9 > 15 )
{
nimPrepareStrMutationV2(&v9);
v10[23] = 8;
v6 = 30;
if ( v9 > 16 )
{
nimPrepareStrMutationV2(&v9);
v10[24] = 85;
v6 = 31;
if ( v9 > 17 )
{
nimPrepareStrMutationV2(&v9);
v10[25] = 90;
v6 = 32;
if ( v9 > 18 )
{
nimPrepareStrMutationV2(&v9);
v10[26] = 69;
v6 = 33;
if ( v9 > 19 )
{
nimPrepareStrMutationV2(&v9);
v10[27] = 88;
v6 = 34;
if ( v9 > 20 )
{
nimPrepareStrMutationV2(&v9);
v10[28] = 68;
v6 = 35;
if ( v9 > 21 )
{
nimPrepareStrMutationV2(&v9);
v10[29] = 87;
v6 = 36;
if ( v9 > 22 )
{
nimPrepareStrMutationV2(&v9);
v10[30] = 69;
v6 = 37;
if ( v9 > 23 )
{
nimPrepareStrMutationV2(&v9);
v10[31] = 119;
v6 = 38;
if ( v9 > 24 )
{
nimPrepareStrMutationV2(&v9);
v10[32] = 93;
v6 = 39;
if ( v9 > 25 )
{
nimPrepareStrMutationV2(&v9);
v10[33] = 84;
v6 = 40;
if ( v9 > 26 )
{
nimPrepareStrMutationV2(&v9);
v10[34] = 68;
v6 = 41;
if ( v9 > 27 )
{
nimPrepareStrMutationV2(&v9);
v10[35] = 92;
v6 = 42;
if ( v9 > 28 )
{
nimPrepareStrMutationV2(&v9);
v10[36] = 69;
v6 = 43;
if ( v9 > 29 )
{
nimPrepareStrMutationV2(&v9);
v10[37] = 19;
v6 = 44;
if ( v9 > 30 )
{
nimPrepareStrMutationV2(&v9);
v10[38] = 89;
v6 = 45;
if ( v9 > 31 )
{
nimPrepareStrMutationV2(&v9);
v10[39] = 91;
v6 = 46;
if ( v9 > 32 )
{
nimPrepareStrMutationV2(&v9);
v10[40] = 71;
v6 = 47;
if ( v9 > 33 )
{
nimPrepareStrMutationV2(&v9);
v10[41] = 66;
v6 = 48;
if ( v9 > 34 )
{
nimPrepareStrMutationV2(&v9);
v10[42] = 94;
v6 = 49;
if ( v9 > 35 )
{
nimPrepareStrMutationV2(&v9);
v10[43] = 89;
v6 = 50;
if ( v9 > 36 )
{
nimPrepareStrMutationV2(&v9);
v10[44] = 22;
v6 = 51;
if ( v9 > 37 )
{
nimPrepareStrMutationV2(&v9);
v10[45] = 93;
}
else
{
raiseIndexError2(37, v9 - 1);
}
}
else
{
raiseIndexError2(36, v9 - 1);
}
}
else
{
raiseIndexError2(35, v9 - 1);
}
}
else
{
raiseIndexError2(34, v9 - 1);
}
}
else
{
raiseIndexError2(33, v9 - 1);
}
}
else
{
raiseIndexError2(32, v9 - 1);
}
}
else
{
raiseIndexError2(31, v9 - 1);
}
}
else
{
raiseIndexError2(30, v9 - 1);
}
}
else
{
raiseIndexError2(29, v9 - 1);
}
}
else
{
raiseIndexError2(28, v9 - 1);
}
}
else
{
raiseIndexError2(27, v9 - 1);
}
}
else
{
raiseIndexError2(26, v9 - 1);
}
}
else
{
raiseIndexError2(25, v9 - 1);
}
}
else
{
raiseIndexError2(24, v9 - 1);
}
}
else
{
raiseIndexError2(23, v9 - 1);
}
}
else
{
raiseIndexError2(22, v9 - 1);
}
}
else
{
raiseIndexError2(21, v9 - 1);
}
}
else
{
raiseIndexError2(20, v9 - 1);
}
}
else
{
raiseIndexError2(19, v9 - 1);
}
}
else
{
raiseIndexError2(18, v9 - 1);
}
}
else
{
raiseIndexError2(17, v9 - 1);
}
}
else
{
raiseIndexError2(16, v9 - 1);
}
}
else
{
raiseIndexError2(15, v9 - 1);
}
}
else
{
raiseIndexError2(14, v9 - 1);
}
}
else
{
raiseIndexError2(13, v9 - 1);
}
}
else
{
raiseIndexError2(12, v9 - 1);
}
}
else
{
raiseIndexError2(11, v9 - 1);
}
}
else
{
raiseIndexError2(10, v9 - 1);
}
}
else
{
raiseIndexError2(9, v9 - 1);
}
}
else
{
raiseIndexError2(8, v9 - 1);
}
}
else
{
raiseIndexError2(7, v9 - 1);
}
}
else
{
raiseIndexError2(6, v9 - 1);
}
}
else
{
raiseIndexError2(5, v9 - 1);
}
}
else
{
raiseIndexError2(4, v9 - 1);
}
}
else
{
raiseIndexError2(3, v9 - 1);
}
}
else
{
raiseIndexError2(2, v9 - 1);
}
}
else
{
raiseIndexError2(1, v9 - 1);
}
}
else
{
raiseIndexError2(0, v9 - 1);
}
popFrame_8();
v1 = v10;
*a1 = v9;
a1[1] = (__int64)v1;
return a1;
}
//----- (0000000140012883) ----------------------------------------------------
__int64 *__fastcall xorStrings__crackme_u3(__int64 *a1, __int64 *a2, __int64 *a3)
{
__int64 v3; // rax
__int64 v4; // rdx
__int64 v5; // rdx
__int64 v6; // rdx
__int64 v8; // [rsp+0h] [rbp-C0h] BYREF
__int64 v9[2]; // [rsp+20h] [rbp-A0h] BYREF
__int64 v10; // [rsp+30h] [rbp-90h]
__int64 v11; // [rsp+38h] [rbp-88h]
__int64 v12; // [rsp+40h] [rbp-80h]
__int64 v13; // [rsp+48h] [rbp-78h]
__int64 v14; // [rsp+50h] [rbp-70h]
__int64 v15; // [rsp+58h] [rbp-68h]
const char *v16; // [rsp+68h] [rbp-58h]
__int64 v17; // [rsp+70h] [rbp-50h]
const char *v18; // [rsp+78h] [rbp-48h]
__int16 v19; // [rsp+80h] [rbp-40h]
__int64 v20; // [rsp+90h] [rbp-30h] BYREF
__int64 v21; // [rsp+98h] [rbp-28h]
__int64 v22; // [rsp+A8h] [rbp-18h]
__int64 v23; // [rsp+B0h] [rbp-10h]
__int64 v24; // [rsp+B8h] [rbp-8h]
v3 = *a2;
v4 = a2[1];
v12 = v3;
v13 = v4;
v5 = a3[1];
v10 = *a3;
v11 = v5;
v16 = "xorStrings";
v18 = "C:\\CTF\\nimcrackme1\\crackme.nim";
v17 = 0;
v19 = 0;
nimFrame_8((__int64)(&v8 + 12));
v20 = 0;
v21 = 0;
v17 = 6;
if ( v12 >= 0 )
{
mnewString(v9, v12);
v20 = v9[0];
v21 = v9[1];
v23 = 0;
v22 = v12;
v18 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v24 = 0;
v17 = 129;
while ( v24 < v22 )
{
v18 = "C:\\CTF\\nimcrackme1\\crackme.nim";
v23 = v24;
v17 = 8;
if ( v24 < 0 || v23 >= v20 )
{
raiseIndexError2(v23, v20 - 1);
break;
}
nimPrepareStrMutationV2(&v20);
if ( v23 < 0 || v23 >= v12 )
{
raiseIndexError2(v23, v12 - 1);
break;
}
if ( !v10 )
{
raiseDivByZero();
break;
}
v15 = v23 % v10;
if ( v23 % v10 < 0 || v10 <= v15 )
{
raiseIndexError2(v15, v10 - 1);
break;
}
*(_BYTE *)(v21 + v23 + 8) = *(_BYTE *)(v13 + v23 + 8) ^ *(_BYTE *)(v11 + v15 + 8);
v17 = 131;
v18 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system\\iterators_1.nim";
v14 = v24 + 1;
if ( __OFADD__(1, v24) )
{
raiseOverflow();
break;
}
v24 = v14;
}
}
else
{
raiseRangeErrorI(v12, 0, 0x7FFFFFFFFFFFFFFFLL);
}
popFrame_8();
v6 = v21;
*a1 = v20;
a1[1] = v6;
return a1;
}
//----- (0000000140012B5F) ----------------------------------------------------
void *nimErrorFlag_6()
{
return _emutls_get_address(refptr___emutls_v_nimInErrorMode__system_u4460);
}
//----- (0000000140012B84) ----------------------------------------------------
_QWORD **main__crackme_u20()
{
__int64 v1[2]; // [rsp+20h] [rbp-A0h] BYREF
__int64 v2; // [rsp+30h] [rbp-90h] BYREF
signed __int64 *v3; // [rsp+38h] [rbp-88h]
_QWORD v4[2]; // [rsp+40h] [rbp-80h] BYREF
_QWORD v5[2]; // [rsp+50h] [rbp-70h] BYREF
_BYTE v6[8]; // [rsp+60h] [rbp-60h] BYREF
const char *v7; // [rsp+68h] [rbp-58h]
__int64 v8; // [rsp+70h] [rbp-50h]
const char *v9; // [rsp+78h] [rbp-48h]
__int16 v10; // [rsp+80h] [rbp-40h]
__int64 v11; // [rsp+90h] [rbp-30h] BYREF
signed __int64 *v12; // [rsp+98h] [rbp-28h]
__int64 v13; // [rsp+A0h] [rbp-20h] BYREF
signed __int64 *v14; // [rsp+A8h] [rbp-18h]
__int64 v15; // [rsp+B0h] [rbp-10h]
_BYTE *v16; // [rsp+B8h] [rbp-8h]
v7 = "main";
v9 = "C:\\CTF\\nimcrackme1\\crackme.nim";
v8 = 0;
v10 = 0;
nimFrame_8((__int64)v6);
v16 = nimErrorFlag_6();
v13 = 0;
v14 = 0;
v11 = 0;
v12 = 0;
v8 = 54;
v9 = "C:\\CTF\\nimcrackme1\\crackme.nim";
buildEncodedFlag__crackme_u18(&v13);
if ( !*v16 )
{
v8 = 55;
v2 = v13;
v3 = v14;
v1[0] = TM__cGo7QGde1ZstH4i7xlaOag_5;
v1[1] = (__int64)&TM__cGo7QGde1ZstH4i7xlaOag_4;
xorStrings__crackme_u3(&v11, &v2, v1);
if ( !*v16 )
{
v8 = 58;
getTime__pureZtimes_u1281(v5);
if ( !*v16 )
{
v15 = 0;
v2 = v5[0];
v3 = (signed __int64 *)v5[1];
v15 = toUnix__pureZtimes_u1230(&v2);
if ( !*v16 )
{
if ( v15 )
{
v8 = 61;
echoBinSafe((__int64)&TM__cGo7QGde1ZstH4i7xlaOag_6, 1);
}
else
{
v8 = 59;
v4[0] = v11;
v4[1] = v12;
echoBinSafe((__int64)v4, 1);
}
}
}
}
}
v8 = 394;
v9 = "C:\\CTF\\nim-2.2.4_x64\\nim-2.2.4\\lib\\system.nim";
if ( v12 && (*v12 & 0x4000000000000000LL) == 0 )
deallocShared(v12);
if ( v14 && (*v14 & 0x4000000000000000LL) == 0 )
deallocShared(v14);
return popFrame_8();
}
// 140021B00: using guessed type __int64 TM__cGo7QGde1ZstH4i7xlaOag_5;
//----- (0000000140012DD3) ----------------------------------------------------
_QWORD **PreMainInner()
{
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatsexitprocsdotnim_Init000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_Init000();
return atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_Init000();
}
//----- (0000000140012DF1) ----------------------------------------------------
_QWORD **PreMain()
{
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_DatInit000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatssystemdotnim_Init000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_DatInit000();
return PreMainInner();
}
//----- (0000000140012E14) ----------------------------------------------------
_QWORD **NimMainInner()
{
return NimMainModule();
}
//----- (0000000140012E28) ----------------------------------------------------
_QWORD **NimMain()
{
PreMain();
return NimMainInner();
}
//----- (0000000140012E41) ----------------------------------------------------
int __fastcall main(int argc, const char **argv, const char **envp)
{
_main();
cmdLine = (__int64)argv;
cmdCount = argc;
gEnv = (__int64)envp;
NimMain();
return *(_QWORD *)refptr_nim_program_result;
}
// 1400226F0: using guessed type _UNKNOWN *refptr_nim_program_result;
// 140027180: using guessed type int cmdCount;
// 140027188: using guessed type __int64 cmdLine;
// 140027190: using guessed type __int64 gEnv;
//----- (0000000140012E8D) ----------------------------------------------------
_QWORD **NimMainModule()
{
_BYTE v1[8]; // [rsp+20h] [rbp-40h] BYREF
const char *v2; // [rsp+28h] [rbp-38h]
__int64 v3; // [rsp+30h] [rbp-30h]
const char *v4; // [rsp+38h] [rbp-28h]
__int16 v5; // [rsp+40h] [rbp-20h]
void *v6; // [rsp+58h] [rbp-8h]
v2 = "crackme";
v4 = "C:\\CTF\\nimcrackme1\\crackme.nim";
v3 = 0;
v5 = 0;
nimFrame_8((__int64)v1);
v6 = nimErrorFlag_6();
v3 = 63;
v4 = "C:\\CTF\\nimcrackme1\\crackme.nim";
main__crackme_u20();
nimTestErrorFlag();
return popFrame_8();
}
//----- (0000000140012F10) ----------------------------------------------------
void (*_do_global_dtors())(void)
{
void (*result)(void); // rax
result = (void (*)(void))(*p_0)[0];
if ( (*p_0)[0] )
{
do
{
result();
result = (void (*)(void))(*p_0)[1];
p_0 = (__int64 (*)[58])((char *)p_0 + 8);
}
while ( result );
}
return result;
}
// 14001F320: using guessed type __int64 (*p_0)[58];
//----- (0000000140012F50) ----------------------------------------------------
int _do_global_ctors()
{
unsigned int v0; // ecx
void (**v1)(void); // rbx
__int64 *v2; // rsi
unsigned int v4; // eax
v0 = *refptr___CTOR_LIST__;
if ( v0 == -1 )
{
v4 = 0;
do
v0 = v4++;
while ( refptr___CTOR_LIST__[v4] );
}
if ( v0 )
{
v1 = (void (**)(void))&refptr___CTOR_LIST__[v0];
v2 = &refptr___CTOR_LIST__[v0 - (unsigned __int64)(v0 - 1) - 1];
do
(*v1--)();
while ( v1 != (void (**)(void))v2 );
}
return atexit((void (__cdecl *)())_do_global_dtors);
}
// 140022510: using guessed type __int64 *refptr___CTOR_LIST__;
//----- (0000000140012FC0) ----------------------------------------------------
int _main()
{
int result; // eax
result = initialized;
if ( !initialized )
{
initialized = 1;
return _do_global_ctors();
}
return result;
}
// 1400271A0: using guessed type int initialized;
//----- (0000000140012FE0) ----------------------------------------------------
__int64 setargv()
{
return 0;
}
//----- (0000000140012FF0) ----------------------------------------------------
// Alternative name is 'TlsCallback_1'
__int64 __fastcall _dyn_tls_dtor(__int64 a1, unsigned int a2)
{
if ( a2 != 3 && a2 )
return 1;
_mingw_TLScallback(a1, a2);
return 1;
}
//----- (0000000140013020) ----------------------------------------------------
// Alternative name is '__dyn_tls_init'
__int64 __fastcall TlsCallback_0(__int64 a1, int a2)
{
if ( *(_DWORD *)refptr__CRT_MT != 2 )
*(_DWORD *)refptr__CRT_MT = 2;
if ( a2 == 1 )
_mingw_TLScallback(a1, 1u);
return 1;
}
// 1400224F0: using guessed type _UNKNOWN *refptr__CRT_MT;
//----- (00000001400130B0) ----------------------------------------------------
__int64 _tlregdtor()
{
return 0;
}
// 1400130B0: using guessed type __int64 _tlregdtor();
//----- (00000001400130C0) ----------------------------------------------------
int __cdecl matherr(struct _exception *Except)
{
const char *v1; // rbx
char *name; // rsi
double retval; // xmm8_8
double arg2; // xmm7_8
double arg1; // xmm6_8
FILE *v6; // rax
switch ( Except->type )
{
case 1:
v1 = "Argument domain error (DOMAIN)";
break;
case 2:
v1 = "Argument singularity (SIGN)";
break;
case 3:
v1 = "Overflow range error (OVERFLOW)";
break;
case 4:
v1 = "The result is too small to be represented (UNDERFLOW)";
break;
case 5:
v1 = "Total loss of significance (TLOSS)";
break;
case 6:
v1 = "Partial loss of significance (PLOSS)";
break;
default:
v1 = "Unknown error";
break;
}
name = Except->name;
retval = Except->retval;
arg2 = Except->arg2;
arg1 = Except->arg1;
v6 = _acrt_iob_func_0(2u);
fprintf_0(v6, "_matherr(): %s in %s(%g, %g) (retval=%g)\n", v1, name, arg1, arg2, retval);
return 0;
}
//----- (00000001400131C0) ----------------------------------------------------
void __cdecl fpreset()
{
__asm { fninit }
}
//----- (00000001400131D0) ----------------------------------------------------
void __noreturn _report_error(char *Format, ...)
{
FILE *v2; // rax
FILE *v3; // rax
va_list va; // [rsp+58h] [rbp+10h] BYREF
va_start(va, Format);
v2 = _acrt_iob_func_0(2u);
fwrite("Mingw-w64 runtime failure:\n", 1u, 0x1Bu, v2);
v3 = _acrt_iob_func_0(2u);
vfprintf(v3, Format, va);
abort();
}
//----- (0000000140013240) ----------------------------------------------------
int __fastcall mark_section_writable(const void *a1)
{
__int64 v1; // rsi
int v3; // r9d
_QWORD *v4; // rax
__int64 SectionForAddress; // rdi
__int64 v6; // rbx
__int64 v7; // rax
char *v8; // rcx
DWORD v9; // r8d
PVOID BaseAddress; // rcx
SIZE_T RegionSize; // rdx
__int64 v12; // rbx
DWORD LastError; // eax
struct _MEMORY_BASIC_INFORMATION Buffer; // [rsp+20h] [rbp-48h] BYREF
v1 = maxSections;
if ( maxSections <= 0 )
{
v1 = 0;
LABEL_6:
SectionForAddress = _mingw_GetSectionForAddress((__int64)a1);
if ( !SectionForAddress )
_report_error("Address %p has no image-section", a1);
v6 = 40 * v1;
v7 = 40 * v1 + the_secs;
*(_QWORD *)(v7 + 32) = SectionForAddress;
*(_DWORD *)v7 = 0;
v8 = (char *)GetPEImageBase() + *(unsigned int *)(SectionForAddress + 12);
*(_QWORD *)(the_secs + 40 * v1 + 24) = v8;
if ( !VirtualQuery(v8, &Buffer, 0x30u) )
_report_error(
" VirtualQuery failed for %d bytes at address %p",
*(_DWORD *)(SectionForAddress + 8),
*(const void **)(the_secs + v6 + 24));
LODWORD(v4) = Buffer.Protect;
if ( ((Buffer.Protect - 64) & 0xFFFFFFBF) != 0 && ((Buffer.Protect - 4) & 0xFFFFFFFB) != 0 )
{
v9 = 64;
BaseAddress = Buffer.BaseAddress;
if ( Buffer.Protect == 2 )
v9 = 4;
RegionSize = Buffer.RegionSize;
v12 = the_secs + v6;
*(_QWORD *)(v12 + 8) = Buffer.BaseAddress;
*(_QWORD *)(v12 + 16) = RegionSize;
LODWORD(v4) = VirtualProtect(BaseAddress, RegionSize, v9, (PDWORD)v12);
if ( !(_DWORD)v4 )
{
LastError = GetLastError();
_report_error(" VirtualProtect failed with code 0x%x", LastError);
}
}
++maxSections;
}
else
{
v3 = 0;
v4 = (_QWORD *)(the_secs + 24);
while ( (unsigned __int64)a1 < *v4 || (unsigned __int64)a1 >= (unsigned __int64)*(unsigned int *)(v4[1] + 8LL) + *v4 )
{
++v3;
v4 += 5;
if ( v3 == maxSections )
goto LABEL_6;
}
}
return (int)v4;
}
// 140027204: using guessed type int maxSections;
// 140027208: using guessed type __int64 the_secs;
//----- (00000001400133B0) ----------------------------------------------------
void pei386_runtime_relocator()
{
int v0; // edi
unsigned __int64 v1; // rax
void *v2; // rsp
_DWORD *v3; // rbx
void *v4; // rsp
int v5; // eax
int v6; // edx
unsigned int *v7; // rbx
__int64 v8; // rsi
int v9; // ecx
__int64 v10; // rsi
unsigned int v11; // ecx
__int64 v12; // r8
int v13; // edx
const void **v14; // rax
const void *v15; // r9
_DWORD *v16; // r14
__int64 v17; // rsi
int v18; // ecx
__int64 v19; // rbx
DWORD v20; // r8d
__int64 v21; // rsi
int v22; // ecx
__int64 v23; // rsi
int *v24; // rsi
int v25; // r12d
char v26; // [rsp+30h] [rbp-10h] BYREF
DWORD flOldProtect[17]; // [rsp+3Ch] [rbp-4h] BYREF
v0 = was_init_0;
if ( was_init_0 )
return;
was_init_0 = 1;
v1 = (40LL * (int)_mingw_GetSectionCount() + 15) & 0xFFFFFFFFFFFFFFF0uLL;
v2 = alloca(v1);
maxSections = 0;
v3 = refptr___RUNTIME_PSEUDO_RELOC_LIST__;
v4 = alloca(v1);
the_secs = (__int64)&v26;
if ( refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ - refptr___RUNTIME_PSEUDO_RELOC_LIST__ <= 7 )
return;
if ( refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ - refptr___RUNTIME_PSEUDO_RELOC_LIST__ <= 11 )
goto LABEL_5;
if ( *(_DWORD *)refptr___RUNTIME_PSEUDO_RELOC_LIST__ )
{
LABEL_51:
if ( v3 < (_DWORD *)refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ )
{
do
{
v23 = (unsigned int)v3[1];
v3 += 2;
v24 = (int *)((char *)refptr___image_base__ + v23);
v25 = *v24 + *(v3 - 2);
mark_section_writable(v24);
*v24 = v25;
}
while ( v3 < (_DWORD *)refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ );
LABEL_26:
if ( maxSections > 0 )
{
v19 = 0;
do
{
v20 = *(_DWORD *)(v19 + the_secs);
if ( v20 )
VirtualProtect(*(LPVOID *)(v19 + the_secs + 8), *(_QWORD *)(v19 + the_secs + 16), v20, flOldProtect);
++v0;
v19 += 40;
}
while ( v0 < maxSections );
}
}
return;
}
v5 = *((_DWORD *)refptr___RUNTIME_PSEUDO_RELOC_LIST__ + 1);
if ( !*(_QWORD *)((char *)refptr___RUNTIME_PSEUDO_RELOC_LIST__ + 4) )
{
v3 = (_DWORD *)((char *)refptr___RUNTIME_PSEUDO_RELOC_LIST__ + 12);
LABEL_5:
if ( *v3 )
goto LABEL_51;
v5 = v3[1];
}
if ( v5 )
goto LABEL_51;
v6 = v3[2];
if ( v6 != 1 )
_report_error(" Unknown pseudo relocation protocol version %d.\n", v6);
v7 = v3 + 3;
if ( v7 < (unsigned int *)refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ )
{
while ( 1 )
{
while ( 1 )
{
v11 = v7[2];
v12 = v7[1];
v13 = (unsigned __int8)v11;
v14 = (const void **)((char *)refptr___image_base__ + *v7);
v15 = *v14;
v16 = (_DWORD *)((char *)refptr___image_base__ + v12);
if ( (unsigned __int8)v11 == 32 )
{
v21 = (unsigned int)*v16;
v22 = v7[2] & 0xC0;
if ( (int)v21 >= 0 )
{
v10 = (__int64)v15 + v21 - (_QWORD)v14;
if ( !v22 )
{
LABEL_41:
if ( v10 <= (__int64)0xFFFFFFFF7FFFFFFFuLL || v10 > 0xFFFFFFFFLL )
goto LABEL_38;
}
}
else
{
v10 = (__int64)v15 + (v21 | 0xFFFFFFFF00000000uLL) - (_QWORD)v14;
if ( !v22 )
goto LABEL_41;
}
mark_section_writable((char *)refptr___image_base__ + v12);
*v16 = v10;
goto LABEL_16;
}
if ( (unsigned __int8)v11 <= 0x20u )
break;
if ( (unsigned __int8)v11 != 64 )
LABEL_54:
_report_error(" Unknown pseudo relocation bit size %d.\n", (unsigned __int8)v11);
v10 = (__int64)v15 + *(_QWORD *)v16 - (_QWORD)v14;
if ( (v11 & 0xC0) == 0 && v10 >= 0 )
LABEL_38:
_report_error(
"%d bit pseudo relocation at %p out of range, targeting %p, yielding the value %p.\n",
v13,
(char *)refptr___image_base__ + v12,
v15,
(const void *)v10);
mark_section_writable((char *)refptr___image_base__ + v12);
*(_QWORD *)v16 = v10;
LABEL_16:
v7 += 3;
if ( v7 >= (unsigned int *)refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ )
goto LABEL_26;
}
if ( (unsigned __int8)v11 == 8 )
break;
if ( (unsigned __int8)v11 != 16 )
goto LABEL_54;
v17 = *(unsigned __int16 *)v16;
v18 = v7[2] & 0xC0;
if ( (v17 & 0x8000u) == 0LL )
{
v10 = (__int64)v15 + v17 - (_QWORD)v14;
if ( v18 )
goto LABEL_25;
}
else
{
v10 = (__int64)v15 + (v17 | 0xFFFFFFFFFFFF0000uLL) - (_QWORD)v14;
if ( v18 )
goto LABEL_25;
}
if ( v10 < -32768 || v10 > 0xFFFF )
goto LABEL_38;
LABEL_25:
v7 += 3;
mark_section_writable((char *)refptr___image_base__ + v12);
*(_WORD *)v16 = v10;
if ( v7 >= (unsigned int *)refptr___RUNTIME_PSEUDO_RELOC_LIST_END__ )
goto LABEL_26;
}
v8 = *(unsigned __int8 *)v16;
v9 = v7[2] & 0xC0;
if ( (v8 & 0x80u) == 0LL )
{
v10 = (__int64)v15 + v8 - (_QWORD)v14;
if ( !v9 )
goto LABEL_13;
}
else
{
v10 = (__int64)v15 + (v8 | 0xFFFFFFFFFFFFFF00uLL) - (_QWORD)v14;
if ( !v9 )
{
LABEL_13:
if ( v10 > 255 || v10 < -128 )
goto LABEL_38;
}
}
mark_section_writable((char *)refptr___image_base__ + v12);
*(_BYTE *)v16 = v10;
goto LABEL_16;
}
}
// 140022520: using guessed type _UNKNOWN *refptr___RUNTIME_PSEUDO_RELOC_LIST_END__;
// 140022530: using guessed type _UNKNOWN *refptr___RUNTIME_PSEUDO_RELOC_LIST__;
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
// 140027200: using guessed type int was_init_0;
// 140027204: using guessed type int maxSections;
// 140027208: using guessed type __int64 the_secs;
//----- (0000000140013710) ----------------------------------------------------
// local variable allocation has failed, the output may be wrong!
__int64 (__fastcall *__fastcall _mingw_raise_matherr(int a1, __int64 a2, double a3, double a4, __int64 a5))(_QWORD)
{
__int64 (__fastcall *result)(_QWORD); // rax
__m128d v6; // xmm2
int v7; // [rsp+20h] [rbp-38h] BYREF
__int64 v8; // [rsp+28h] [rbp-30h]
__m128d v9; // [rsp+30h] [rbp-28h]
__int64 v10; // [rsp+40h] [rbp-18h]
result = stUserMathErr;
v6 = _mm_unpacklo_pd(*(__m128d *)&a3, *(__m128d *)&a4);
if ( stUserMathErr )
{
v7 = a1;
v8 = a2;
v9 = v6;
v10 = a5;
return (__int64 (__fastcall *)(_QWORD))stUserMathErr(&v7);
}
return result;
}
// 140013710: inconsistent variable size for 'xmm2_8.8'
// 140013710: inconsistent variable size for 'xmm3_8.8'
// 140027210: using guessed type __int64 (__fastcall *stUserMathErr)(_QWORD);
//----- (0000000140013750) ----------------------------------------------------
void __fastcall _mingw_setusermatherr(_UserMathErrorFunctionPointer UserMathErrorFunction)
{
stUserMathErr = (__int64 (__fastcall *)(_QWORD))UserMathErrorFunction;
_setusermatherr(UserMathErrorFunction);
}
// 140027210: using guessed type __int64 (__fastcall *stUserMathErr)(_QWORD);
//----- (0000000140013900) ----------------------------------------------------
void _mingwthr_run_key_dtors_part_0()
{
_QWORD *v0; // rbx
LPVOID Value; // rsi
EnterCriticalSection(&_mingwthr_cs);
v0 = key_dtor_list;
if ( key_dtor_list )
{
do
{
Value = TlsGetValue(*(_DWORD *)v0);
if ( !GetLastError() && Value )
((void (__fastcall *)(LPVOID))v0[1])(Value);
v0 = (_QWORD *)v0[2];
}
while ( v0 );
}
LeaveCriticalSection(&_mingwthr_cs);
}
//----- (0000000140013970) ----------------------------------------------------
__int64 __fastcall __w64_mingwthr_add_key_dtor(int a1, __int64 a2)
{
_QWORD *v5; // rax
_QWORD *v6; // rbx
void *v7; // rax
if ( !_mingwthr_cs_init )
return 0;
v5 = calloc(1u, 0x18u);
v6 = v5;
if ( v5 )
{
v5[1] = a2;
*(_DWORD *)v5 = a1;
EnterCriticalSection(&_mingwthr_cs);
v7 = key_dtor_list;
key_dtor_list = v6;
v6[2] = v7;
LeaveCriticalSection(&_mingwthr_cs);
return 0;
}
return 0xFFFFFFFFLL;
}
// 140027248: using guessed type int _mingwthr_cs_init;
//----- (00000001400139E0) ----------------------------------------------------
__int64 __fastcall __w64_mingwthr_remove_key_dtor(int a1)
{
_QWORD *v3; // rcx
_QWORD *v4; // rdx
__int64 v5; // rax
if ( !_mingwthr_cs_init )
return 0;
EnterCriticalSection(&_mingwthr_cs);
v3 = key_dtor_list;
if ( key_dtor_list )
{
v4 = 0;
while ( 1 )
{
v5 = v3[2];
if ( *(_DWORD *)v3 == a1 )
break;
v4 = v3;
if ( !v5 )
goto LABEL_11;
v3 = (_QWORD *)v3[2];
}
if ( v4 )
v4[2] = v5;
else
key_dtor_list = (void *)v3[2];
free(v3);
}
LABEL_11:
LeaveCriticalSection(&_mingwthr_cs);
return 0;
}
// 140027248: using guessed type int _mingwthr_cs_init;
//----- (0000000140013A70) ----------------------------------------------------
__int64 __fastcall _mingw_TLScallback(__int64 a1, unsigned int a2)
{
void *v3; // rbx
void *v4; // rcx
if ( a2 == 2 )
{
fpreset();
return 1;
}
else
{
if ( a2 > 2 )
{
if ( a2 == 3 && _mingwthr_cs_init )
_mingwthr_run_key_dtors_part_0();
}
else if ( a2 )
{
if ( !_mingwthr_cs_init )
InitializeCriticalSection(&_mingwthr_cs);
_mingwthr_cs_init = 1;
}
else
{
if ( _mingwthr_cs_init )
_mingwthr_run_key_dtors_part_0();
if ( _mingwthr_cs_init == 1 )
{
v3 = key_dtor_list;
while ( v3 )
{
v4 = v3;
v3 = (void *)*((_QWORD *)v3 + 2);
free(v4);
}
key_dtor_list = 0;
_mingwthr_cs_init = 0;
DeleteCriticalSection(&_mingwthr_cs);
}
}
return 1;
}
}
// 140027248: using guessed type int _mingwthr_cs_init;
//----- (0000000140013B70) ----------------------------------------------------
void __cdecl __noreturn exit_0(int Code)
{
(*(void (__fastcall **)(int))refptr___imp_exit)(Code);
JUMPOUT(0x140013B7ELL);
}
// 140013B7D: control flows out of bounds to 140013B7E
// 1400225B0: using guessed type _UNKNOWN *refptr___imp_exit;
//----- (0000000140013B80) ----------------------------------------------------
void __cdecl __noreturn exit_0(int Code)
{
(*(void (__fastcall **)(int))refptr___imp__exit)(Code);
JUMPOUT(0x140013B8ELL);
}
// 140013B8D: control flows out of bounds to 140013B8E
// 140022590: using guessed type _UNKNOWN *refptr___imp__exit;
//----- (0000000140013B90) ----------------------------------------------------
_BOOL8 __fastcall ValidateImageBase(__int64 a1)
{
_BOOL8 result; // rax
__int64 v2; // rcx
result = 0;
if ( *(_WORD *)a1 == 23117 )
{
v2 = *(int *)(a1 + 60) + a1;
if ( *(_DWORD *)v2 == 17744 )
return *(_WORD *)(v2 + 24) == 523;
}
return result;
}
//----- (0000000140013BC0) ----------------------------------------------------
__int64 __fastcall FindPESection(__int64 a1, unsigned __int64 a2)
{
__int64 v2; // rcx
int v3; // r8d
__int64 result; // rax
__int64 v5; // r9
v2 = *(int *)(a1 + 60) + a1;
v3 = *(unsigned __int16 *)(v2 + 6);
result = v2 + *(unsigned __int16 *)(v2 + 20) + 24;
if ( !(_WORD)v3 )
return 0;
v5 = result + 40LL * (unsigned int)(v3 - 1) + 40;
while ( a2 < *(unsigned int *)(result + 12)
|| a2 >= (unsigned int)(*(_DWORD *)(result + 8) + *(_DWORD *)(result + 12)) )
{
result += 40;
if ( result == v5 )
return 0;
}
return result;
}
//----- (0000000140013C10) ----------------------------------------------------
const char *__fastcall FindPESectionByName(char *Str2)
{
const char *v2; // rbx
char *v3; // rax
int v4; // edx
__int64 v5; // rdi
if ( strlen(Str2) <= 8 )
{
v2 = 0;
if ( *(_WORD *)refptr___image_base__ != 23117 )
return v2;
v3 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v3 != 17744 || *((_WORD *)v3 + 12) != 523 )
return v2;
v2 = &v3[*((unsigned __int16 *)v3 + 10) + 24];
v4 = *((unsigned __int16 *)v3 + 3);
if ( (_WORD)v4 )
{
v5 = (__int64)&v2[40 * (v4 - 1) + 40];
while ( strncmp_0(v2, Str2, 8u) )
{
v2 += 40;
if ( v2 == (const char *)v5 )
return 0;
}
return v2;
}
}
return 0;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013CB0) ----------------------------------------------------
__int64 __fastcall _mingw_GetSectionForAddress(__int64 a1)
{
__int64 result; // rax
char *v2; // r8
unsigned __int64 v3; // rcx
int v4; // r8d
__int64 v5; // r9
result = 0;
if ( *(_WORD *)refptr___image_base__ == 23117 )
{
v2 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v2 == 17744 && *((_WORD *)v2 + 12) == 523 )
{
v3 = a1 - (_QWORD)refptr___image_base__;
result = (__int64)&v2[*((unsigned __int16 *)v2 + 10) + 24];
v4 = *((unsigned __int16 *)v2 + 3);
if ( (_WORD)v4 )
{
v5 = result + 40LL * (unsigned int)(v4 - 1) + 40;
while ( v3 < *(unsigned int *)(result + 12)
|| v3 >= (unsigned int)(*(_DWORD *)(result + 8) + *(_DWORD *)(result + 12)) )
{
result += 40;
if ( result == v5 )
return 0;
}
}
else
{
return 0;
}
}
}
return result;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013D30) ----------------------------------------------------
__int64 _mingw_GetSectionCount()
{
char *v0; // rax
if ( *(_WORD *)refptr___image_base__ == 23117
&& (v0 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15), *(_DWORD *)v0 == 17744)
&& *((_WORD *)v0 + 12) == 523 )
{
return *((unsigned __int16 *)v0 + 3);
}
else
{
return 0;
}
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013D70) ----------------------------------------------------
__int64 __fastcall FindPESectionExec(__int64 a1)
{
__int64 result; // rax
char *v2; // rdx
int v3; // r8d
__int64 v4; // rdx
result = 0;
if ( *(_WORD *)refptr___image_base__ == 23117 )
{
v2 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v2 == 17744 && *((_WORD *)v2 + 12) == 523 )
{
v3 = *((unsigned __int16 *)v2 + 3);
result = (__int64)&v2[*((unsigned __int16 *)v2 + 10) + 24];
if ( (_WORD)v3 )
{
v4 = result + 40LL * (unsigned int)(v3 - 1) + 40;
do
{
if ( (*(_BYTE *)(result + 39) & 0x20) != 0 )
{
if ( !a1 )
return result;
--a1;
}
result += 40;
}
while ( result != v4 );
}
return 0;
}
}
return result;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013DF0) ----------------------------------------------------
void *GetPEImageBase()
{
__int64 v0; // rdx
char *v1; // rcx
v0 = 0;
if ( *(_WORD *)refptr___image_base__ != 23117 )
return 0;
v1 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v1 != 17744 )
return 0;
if ( *((_WORD *)v1 + 12) == 523 )
return refptr___image_base__;
return (void *)v0;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013E30) ----------------------------------------------------
_BOOL8 __fastcall IsNonwritableInCurrentImage(__int64 a1)
{
_BOOL8 result; // rax
char *v2; // r8
int v3; // r9d
unsigned __int64 v4; // rcx
char *v5; // rdx
__int64 v6; // r9
result = 0;
if ( *(_WORD *)refptr___image_base__ == 23117 )
{
v2 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v2 == 17744 && *((_WORD *)v2 + 12) == 523 )
{
v3 = *((unsigned __int16 *)v2 + 3);
v4 = a1 - (_QWORD)refptr___image_base__;
v5 = &v2[*((unsigned __int16 *)v2 + 10) + 24];
if ( (_WORD)v3 )
{
v6 = (__int64)&v5[40 * (v3 - 1) + 40];
while ( v4 < *((unsigned int *)v5 + 3) || v4 >= (unsigned int)(*((_DWORD *)v5 + 2) + *((_DWORD *)v5 + 3)) )
{
v5 += 40;
if ( (char *)v6 == v5 )
return 0;
}
return *((_DWORD *)v5 + 9) >= 0;
}
}
}
return result;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013EC0) ----------------------------------------------------
char *__fastcall _mingw_enum_import_library_names(int a1)
{
char *v1; // r8
unsigned __int64 v3; // rax
int v4; // r10d
__int64 v5; // rdx
__int64 v6; // r10
char *i; // rax
if ( *(_WORD *)refptr___image_base__ != 23117 )
return 0;
v1 = (char *)refptr___image_base__ + *((int *)refptr___image_base__ + 15);
if ( *(_DWORD *)v1 != 17744 )
return 0;
if ( *((_WORD *)v1 + 12) != 523 )
return 0;
v3 = *((unsigned int *)v1 + 36);
if ( !(_DWORD)v3 )
return 0;
v4 = *((unsigned __int16 *)v1 + 3);
v5 = (__int64)&v1[*((unsigned __int16 *)v1 + 10) + 24];
if ( !(_WORD)v4 )
return 0;
v6 = v5 + 40LL * (unsigned int)(v4 - 1) + 40;
while ( v3 < *(unsigned int *)(v5 + 12) || v3 >= (unsigned int)(*(_DWORD *)(v5 + 8) + *(_DWORD *)(v5 + 12)) )
{
v5 += 40;
if ( v5 == v6 )
return 0;
}
for ( i = (char *)refptr___image_base__ + v3; *((_DWORD *)i + 1) || *((_DWORD *)i + 3); i += 20 )
{
if ( a1 <= 0 )
return (char *)refptr___image_base__ + *((unsigned int *)i + 3);
--a1;
}
return 0;
}
// 140022570: using guessed type _UNKNOWN *refptr___image_base__;
//----- (0000000140013FD0) ----------------------------------------------------
void __fastcall emutls_destroy(void *ptr)
{
__int64 v1; // rdi
__int64 v3; // rbx
__int64 v4; // rax
v1 = *(_QWORD *)ptr;
if ( *(_QWORD *)ptr )
{
v3 = 0;
do
{
v4 = *((_QWORD *)ptr + v3 + 1);
if ( v4 )
free(*(void **)(v4 - 8));
++v3;
}
while ( v1 != v3 );
}
free(ptr);
}
//----- (0000000140014020) ----------------------------------------------------
void __cdecl emutls_init()
{
pthread_mutex_init(&emutls_mutex, 0);
if ( (unsigned int)pthread_key_create(&emutls_key, (__int64)emutls_destroy) )
abort();
}
//----- (0000000140014060) ----------------------------------------------------
void *__fastcall _emutls_get_address(__emutls_object *obj)
{
__int64 v1; // r8
__int64 v2; // r9
pointer offset; // rsi
pointer *v5; // rax
__int64 v6; // rbx
pointer v7; // rbp
pointer v8; // rsi
void *v9; // rcx
_QWORD *v11; // rax
pointer v12; // rbp
unsigned int v13; // ecx
word align; // rbp
size_t size; // r12
_QWORD *v16; // rax
_QWORD *v17; // rcx
void *templ; // rdx
void *v19; // rcx
__int64 v20; // r12
_QWORD *v21; // rax
void *v22; // rax
int v23; // [rsp+20h] [rbp-28h]
__int64 v24; // [rsp+28h] [rbp-20h]
offset = obj->loc.offset;
if ( !offset )
{
pthread_once(&once_0, (void (__fastcall *)(__int64, _QWORD *))emutls_init, v1, v2, v23, v24);
pthread_mutex_lock(&emutls_mutex);
offset = obj->loc.offset;
if ( !offset )
{
offset = emutls_size + 1;
emutls_size = offset;
obj->loc.offset = offset;
}
pthread_mutex_unlock(&emutls_mutex);
}
v5 = (pointer *)pthread_getspecific(emutls_key);
v6 = (__int64)v5;
if ( v5 )
{
v7 = *v5;
if ( *v5 < offset )
{
v20 = 2 * v7;
if ( 2 * v7 < offset )
v20 = offset + 32;
v21 = realloc_0(v5, 8 * v20 + 8);
v6 = (__int64)v21;
if ( !v21 )
goto LABEL_24;
*v21 = v20;
memset(&v21[v7 + 1], 0, 8 * (v20 - v7));
pthread_setspecific(emutls_key, v6);
}
v8 = offset - 1;
v9 = *(void **)(v6 + 8 * v8 + 8);
if ( v9 )
return v9;
}
else
{
v11 = calloc(offset + 33, 8u);
v12 = offset + 32;
v6 = (__int64)v11;
if ( !v11 )
goto LABEL_24;
v13 = emutls_key;
v8 = offset - 1;
*v11 = v12;
pthread_setspecific(v13, (__int64)v11);
v9 = *(void **)(v6 + 8 * v8 + 8);
if ( v9 )
return v9;
}
align = obj->align;
size = obj->size;
if ( align > 8 )
{
v22 = malloc_0(size + align + 7);
if ( v22 )
{
v17 = (_QWORD *)(-(__int64)align & ((unsigned __int64)v22 + align + 7));
*(v17 - 1) = v22;
goto LABEL_14;
}
LABEL_24:
abort();
}
v16 = malloc_0(size + 8);
if ( !v16 )
goto LABEL_24;
*v16 = v16;
v17 = v16 + 1;
LABEL_14:
templ = obj->templ;
if ( templ )
v19 = memcpy_0(v17, templ, size);
else
v19 = memset(v17, 0, size);
*(_QWORD *)(v6 + 8 * v8 + 8) = v19;
return v19;
}
// 1400140C6: variable 'v1' is possibly undefined
// 1400140C6: variable 'v2' is possibly undefined
// 1400140C6: variable 'v23' is possibly undefined
// 1400140C6: variable 'v24' is possibly undefined
//----- (0000000140014260) ----------------------------------------------------
void __fastcall _emutls_register_common(__emutls_object *obj, word size, word align, void *templ)
{
if ( obj->size < size )
{
obj->size = size;
obj->templ = 0;
}
if ( obj->align < align )
obj->align = align;
if ( templ )
{
if ( obj->size == size )
obj->templ = templ;
}
}
//----- (0000000140014290) ----------------------------------------------------
__int64 __fastcall _mingw_vfprintf(FILE *Stream, char *a2, const char **a3)
{
lock_file(Stream);
LODWORD(a2) = _mingw_pformat(24576, Stream, 0, a2, a3);
unlock_file_0(Stream);
return (unsigned int)a2;
}
//----- (00000001400142E0) ----------------------------------------------------
char *__fastcall _pformat_cvt(int a1, __int64 *a2, int a3, int *a4, int *a5)
{
__int64 v5; // rax
int v6; // edx
__int16 v8; // cx
__int16 v9; // r10
int v10; // eax
int v11; // edx
int v12; // ecx
int v14; // [rsp+44h] [rbp-24h] BYREF
char *v15; // [rsp+48h] [rbp-20h] BYREF
__int64 v16; // [rsp+50h] [rbp-18h] BYREF
int v17; // [rsp+58h] [rbp-10h]
v5 = *a2;
v6 = *((_DWORD *)a2 + 2);
v16 = v5;
v17 = v6;
v8 = v6;
v9 = v6 & 0x7FFF;
if ( (v6 & 0x7FFF) == 0 )
{
if ( !v5 )
{
v10 = 0;
v11 = 0;
goto LABEL_5;
}
if ( v5 >= 0 )
{
v10 = 2;
v11 = -16445;
goto LABEL_5;
}
goto LABEL_4;
}
if ( v9 != 0x7FFF )
{
LABEL_4:
v10 = 1;
v11 = (__int16)(v9 - 16446);
goto LABEL_5;
}
if ( (unsigned int)v5 | HIDWORD(v5) & 0x7FFFFFFF )
{
v14 = 4;
v11 = 0;
v12 = 0;
goto LABEL_6;
}
v10 = 3;
v11 = 0;
LABEL_5:
v14 = v10;
v12 = v8 & 0x8000;
LABEL_6:
*a5 = v12;
return _gdtoa(fpi_0, v11, (int *)&v16, &v14, a1, a3, a4, &v15);
}
// 14001F370: using guessed type int fpi_0[8];
//----- (00000001400143D0) ----------------------------------------------------
__int64 __fastcall _pformat_putc(char a1, __int64 a2)
{
int v3; // edx
int v4; // eax
__int64 result; // rax
v3 = *(_DWORD *)(a2 + 8);
if ( (v3 & 0x4000) == 0 )
{
v4 = *(_DWORD *)(a2 + 36);
if ( *(_DWORD *)(a2 + 40) <= v4 )
goto LABEL_5;
}
if ( (v3 & 0x2000) == 0 )
{
*(_BYTE *)(*(_QWORD *)a2 + *(int *)(a2 + 36)) = a1;
v4 = *(_DWORD *)(a2 + 36);
LABEL_5:
result = (unsigned int)(v4 + 1);
*(_DWORD *)(a2 + 36) = result;
return result;
}
fputc(a1, *(FILE **)a2);
result = (unsigned int)(*(_DWORD *)(a2 + 36) + 1);
*(_DWORD *)(a2 + 36) = result;
return result;
}
//----- (0000000140014430) ----------------------------------------------------
__int64 __fastcall _pformat_wputchars(__int64 a1, int a2, __int64 a3)
{
int v6; // eax
int v7; // edx
bool v8; // sf
__int64 result; // rax
int v10; // r12d
__int64 v11; // rsi
int v12; // r12d
int v13; // eax
char *v14; // r14
char *v15; // r15
int v16; // eax
int v17; // edx
int v18; // ecx
int v19; // eax
bool v20; // zf
int v21; // eax
mbstate_t State; // [rsp+28h] [rbp-60h] BYREF
char Dest[88]; // [rsp+30h] [rbp-58h] BYREF
wcrtomb(Dest, 0, &State);
v6 = *(_DWORD *)(a3 + 16);
v7 = v6;
if ( a2 <= v6 )
v7 = a2;
v8 = v6 < 0;
result = *(unsigned int *)(a3 + 12);
if ( !v8 )
a2 = v7;
if ( (int)result <= a2 )
{
*(_DWORD *)(a3 + 12) = -1;
v10 = a2 - 1;
if ( a2 <= 0 )
{
*(_DWORD *)(a3 + 12) = -2;
return result;
}
goto LABEL_7;
}
v19 = result - a2;
v20 = (*(_BYTE *)(a3 + 9) & 4) == 0;
*(_DWORD *)(a3 + 12) = v19;
if ( v20 )
{
*(_DWORD *)(a3 + 12) = v19 - 1;
do
{
_pformat_putc(32, a3);
v21 = *(_DWORD *)(a3 + 12);
*(_DWORD *)(a3 + 12) = v21 - 1;
}
while ( v21 );
v10 = a2 - 1;
if ( a2 <= 0 )
goto LABEL_19;
goto LABEL_7;
}
v10 = a2 - 1;
if ( a2 > 0 )
{
LABEL_7:
v11 = 0;
v12 = v10 + 1;
while ( 1 )
{
v13 = wcrtomb(Dest, *(_WORD *)(a1 + 2 * v11), &State);
if ( v13 <= 0 )
goto LABEL_19;
v14 = Dest;
v15 = &Dest[v13 - 1 + 1];
do
{
while ( 1 )
{
v17 = *(_DWORD *)(a3 + 8);
++v14;
if ( (v17 & 0x4000) == 0 )
{
v16 = *(_DWORD *)(a3 + 36);
if ( *(_DWORD *)(a3 + 40) <= v16 )
goto LABEL_11;
}
v18 = *(v14 - 1);
if ( (v17 & 0x2000) != 0 )
break;
*(_BYTE *)(*(_QWORD *)a3 + *(int *)(a3 + 36)) = v18;
v16 = *(_DWORD *)(a3 + 36);
LABEL_11:
*(_DWORD *)(a3 + 36) = v16 + 1;
if ( v14 == v15 )
goto LABEL_16;
}
fputc(v18, *(FILE **)a3);
++*(_DWORD *)(a3 + 36);
}
while ( v14 != v15 );
LABEL_16:
if ( v12 - (int)++v11 <= 0 )
{
result = *(unsigned int *)(a3 + 12);
*(_DWORD *)(a3 + 12) = result - 1;
if ( (int)result > 0 )
goto LABEL_18;
return result;
}
}
}
--*(_DWORD *)(a3 + 12);
do
{
LABEL_18:
_pformat_putc(32, a3);
LABEL_19:
result = *(unsigned int *)(a3 + 12);
*(_DWORD *)(a3 + 12) = result - 1;
}
while ( (int)result > 0 );
return result;
}
//----- (00000001400145C0) ----------------------------------------------------
__int64 __fastcall _pformat_putchars(__int64 a1, int a2, __int64 a3)
{
int v3; // eax
int v4; // edi
bool v5; // cc
int v6; // edx
bool v7; // sf
__int64 result; // rax
int v11; // edx
int v12; // eax
__int64 v13; // rdi
int v14; // edx
int v15; // ecx
FILE *v16; // rdx
int v17; // edx
FILE *v18; // rdx
int v19; // edx
int v20; // eax
v3 = *(_DWORD *)(a3 + 16);
v4 = a2;
v5 = a2 <= v3;
v6 = v3;
if ( v5 )
v6 = v4;
v7 = v3 < 0;
result = *(unsigned int *)(a3 + 12);
if ( !v7 )
v4 = v6;
if ( (int)result > v4 )
{
v19 = result - v4;
*(_DWORD *)(a3 + 12) = result - v4;
v12 = *(_DWORD *)(a3 + 8);
if ( (v12 & 0x400) != 0 )
{
v11 = v4 - 1;
if ( !v4 )
{
--*(_DWORD *)(a3 + 12);
goto LABEL_21;
}
goto LABEL_8;
}
*(_DWORD *)(a3 + 12) = v19 - 1;
do
{
_pformat_putc(32, a3);
v20 = *(_DWORD *)(a3 + 12);
*(_DWORD *)(a3 + 12) = v20 - 1;
}
while ( v20 );
v11 = v4 - 1;
if ( !v4 )
goto LABEL_19;
}
else
{
*(_DWORD *)(a3 + 12) = -1;
v11 = v4 - 1;
if ( !v4 )
{
*(_DWORD *)(a3 + 12) = -2;
return result;
}
}
v12 = *(_DWORD *)(a3 + 8);
LABEL_8:
v13 = a1 + (unsigned int)(v11 + 1);
while ( 1 )
{
++a1;
if ( (v12 & 0x4000) != 0 || (v14 = *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40) > v14) )
{
v15 = *(char *)(a1 - 1);
v16 = *(FILE **)a3;
if ( (v12 & 0x2000) != 0 )
fputc(v15, v16);
else
*((_BYTE *)&v16->_ptr + *(int *)(a3 + 36)) = v15;
v14 = *(_DWORD *)(a3 + 36);
}
*(_DWORD *)(a3 + 36) = v14 + 1;
if ( a1 == v13 )
break;
v12 = *(_DWORD *)(a3 + 8);
}
LABEL_19:
while ( 1 )
{
result = *(unsigned int *)(a3 + 12);
*(_DWORD *)(a3 + 12) = result - 1;
if ( (int)result <= 0 )
break;
v12 = *(_DWORD *)(a3 + 8);
LABEL_21:
if ( (v12 & 0x4000) != 0 || (v17 = *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40) > v17) )
{
v18 = *(FILE **)a3;
if ( (v12 & 0x2000) != 0 )
fputc(32, v18);
else
*((_BYTE *)&v18->_ptr + *(int *)(a3 + 36)) = 32;
v17 = *(_DWORD *)(a3 + 36);
}
*(_DWORD *)(a3 + 36) = v17 + 1;
}
return result;
}
//----- (0000000140014710) ----------------------------------------------------
__int64 __fastcall _pformat_puts(const char *a1, __int64 a2)
{
size_t v3; // rdx
const char *v4; // rbx
int v5; // eax
v3 = *(int *)(a2 + 16);
v4 = a1;
if ( !a1 )
v4 = "(null)";
if ( (v3 & 0x80000000) != 0LL )
v5 = strlen(v4);
else
v5 = strnlen(v4, v3);
return _pformat_putchars((__int64)v4, v5, a2);
}
//----- (0000000140014760) ----------------------------------------------------
__int64 __fastcall _pformat_emit_inf_or_nan(int a1, __int64 a2, __int64 a3)
{
int v3; // r10d
char v4; // al
char *v5; // r9
char v6; // r10
__int64 i; // rcx
char v9; // [rsp+2Ch] [rbp-Ch] BYREF
_BYTE v10[11]; // [rsp+2Dh] [rbp-Bh] BYREF
v3 = *(_DWORD *)(a3 + 8);
*(_DWORD *)(a3 + 16) = -1;
if ( a1 )
{
v4 = 45;
goto LABEL_9;
}
v4 = 43;
if ( (v3 & 0x100) != 0 )
{
LABEL_9:
v9 = v4;
v5 = v10;
goto LABEL_5;
}
if ( (v3 & 0x40) != 0 )
{
v5 = v10;
v9 = 32;
}
else
{
v5 = &v9;
}
LABEL_5:
v6 = v3 & 0x20;
for ( i = 0; i != 3; ++i )
v5[i] = v6 | *(_BYTE *)(a2 + i) & 0xDF;
return _pformat_putchars((__int64)&v9, (_DWORD)v5 + 3 - (unsigned int)&v9, a3);
}
//----- (0000000140014800) ----------------------------------------------------
__int64 __fastcall _pformat_xint_isra_0(int a1, unsigned __int64 a2, __int64 a3)
{
int v5; // r15d
int v6; // eax
int v7; // edi
int v8; // eax
char v9; // cl
int v10; // r12d
unsigned __int64 v11; // rax
void *v12; // rsp
void *v13; // rsp
char v14; // r8
_BYTE *v15; // rsi
unsigned __int64 v16; // rax
void *v17; // rsp
void *v18; // rsp
char v19; // al
__int64 result; // rax
int v21; // r8d
void *v22; // rcx
int v23; // r12d
int v24; // edi
int v25; // r14d
int v27; // eax
int v28; // ecx
FILE *v29; // rdx
int v30; // eax
FILE *v31; // rdx
int v32; // eax
unsigned __int64 v33; // rax
void *v34; // rsp
void *v35; // rsp
void *v36; // rcx
void *v37; // rcx
_BYTE v38[64]; // [rsp+20h] [rbp+0h] BYREF
if ( a1 != 111 )
{
v5 = *(_DWORD *)(a3 + 16);
v6 = 0;
v7 = *(_DWORD *)(a3 + 8);
if ( v5 >= 0 )
v6 = *(_DWORD *)(a3 + 16);
v8 = v6 + 18;
if ( (v7 & 0x1000) != 0 )
{
v9 = 4;
goto LABEL_6;
}
v10 = *(_DWORD *)(a3 + 12);
if ( v10 >= v8 )
v8 = *(_DWORD *)(a3 + 12);
v16 = (v8 + 15LL) & 0xFFFFFFFFFFFFFFF0uLL;
v17 = alloca(v16);
v9 = 4;
v14 = 15;
v18 = alloca(v16);
LABEL_18:
v15 = v38;
if ( !a2 )
goto LABEL_11;
goto LABEL_19;
}
v5 = *(_DWORD *)(a3 + 16);
v32 = 0;
v7 = *(_DWORD *)(a3 + 8);
if ( v5 >= 0 )
v32 = *(_DWORD *)(a3 + 16);
v8 = v32 + 24;
if ( (v7 & 0x1000) == 0 )
{
v10 = *(_DWORD *)(a3 + 12);
if ( v10 >= v8 )
v8 = *(_DWORD *)(a3 + 12);
v33 = (v8 + 15LL) & 0xFFFFFFFFFFFFFFF0uLL;
v34 = alloca(v33);
v9 = 3;
v14 = 7;
v35 = alloca(v33);
goto LABEL_18;
}
v9 = 3;
LABEL_6:
if ( *(_WORD *)(a3 + 32) )
v8 += v8 / 3u;
v10 = *(_DWORD *)(a3 + 12);
if ( v10 >= v8 )
v8 = *(_DWORD *)(a3 + 12);
v11 = (v8 + 15LL) & 0xFFFFFFFFFFFFFFF0uLL;
v12 = alloca(v11);
v13 = alloca(v11);
v14 = 8 * (a1 != 111) + 7;
v15 = v38;
if ( !a2 )
{
LABEL_11:
*(_DWORD *)(a3 + 8) = v7 & 0xFFFFF7FF;
if ( v5 <= 0 )
goto LABEL_12;
goto LABEL_24;
}
do
{
LABEL_19:
++v15;
v19 = a1 & 0x20 | ((a2 & v14) + 55);
if ( (unsigned __int8)((a2 & v14) + 48) <= 0x39u )
v19 = (a2 & v14) + 48;
a2 >>= v9;
*(v15 - 1) = v19;
}
while ( a2 );
if ( v15 == v38 )
goto LABEL_11;
if ( v5 <= 0 )
{
LABEL_12:
if ( a1 != 111 )
goto LABEL_26;
goto LABEL_13;
}
LABEL_24:
result = v15 - v38;
v21 = v5 - ((_DWORD)v15 - (unsigned int)v38);
if ( v21 > 0 )
{
v22 = v15;
v15 += v21;
memset(v22, 48, v21);
goto LABEL_26;
}
if ( a1 != 111 )
{
if ( v15 != v38 )
{
if ( (int)result >= v10 )
{
*(_DWORD *)(a3 + 12) = -1;
LABEL_31:
if ( (*(_BYTE *)(a3 + 9) & 8) != 0 )
{
*v15 = a1;
v15 += 2;
*(v15 - 1) = 48;
}
goto LABEL_33;
}
v24 = *(_DWORD *)(a3 + 8);
v23 = v10 - result;
*(_DWORD *)(a3 + 12) = v23;
if ( (v24 & 0x800) != 0 )
goto LABEL_39;
goto LABEL_42;
}
goto LABEL_83;
}
LABEL_13:
if ( (*(_BYTE *)(a3 + 9) & 8) != 0 )
*v15++ = 48;
LABEL_26:
if ( v15 != v38 || !v5 )
{
result = v15 - v38;
goto LABEL_29;
}
LABEL_83:
*v15++ = 48;
result = v15 - v38;
LABEL_29:
if ( (int)result >= v10 )
{
*(_DWORD *)(a3 + 12) = -1;
if ( a1 == 111 )
{
if ( v38 < v15 )
{
v24 = *(_DWORD *)(a3 + 8);
v25 = -2;
v23 = -1;
goto LABEL_50;
}
return result;
}
goto LABEL_31;
}
v23 = v10 - result;
v24 = *(_DWORD *)(a3 + 8);
*(_DWORD *)(a3 + 12) = v23;
if ( a1 != 111 && (v24 & 0x800) != 0 )
{
LABEL_39:
v23 -= 2;
if ( v23 <= 0 )
{
LABEL_40:
*v15 = a1;
v15 += 2;
*(v15 - 1) = 48;
goto LABEL_34;
}
if ( v5 < 0 && (v24 & 0x600) == 0x200 )
{
v37 = v15;
v15 += v23;
result = (__int64)memset(v37, 48, v23);
goto LABEL_81;
}
*v15 = a1;
v15 += 2;
*(v15 - 1) = 48;
goto LABEL_42;
}
if ( v5 >= 0 || (v24 & 0x600) != 0x200 )
{
LABEL_42:
v25 = v23 - 1;
if ( (v24 & 0x400) == 0 )
{
--v23;
do
result = _pformat_putc(32, a3);
while ( v23-- != 0 );
v25 = -2;
if ( v38 < v15 )
goto LABEL_49;
return result;
}
if ( v38 >= v15 )
goto LABEL_60;
while ( 1 )
{
LABEL_50:
--v15;
if ( (v24 & 0x4000) == 0 )
{
v27 = *(_DWORD *)(a3 + 36);
if ( *(_DWORD *)(a3 + 40) <= v27 )
goto LABEL_48;
}
v28 = (char)*v15;
v29 = *(FILE **)a3;
if ( (v24 & 0x2000) == 0 )
break;
fputc(v28, v29);
result = (unsigned int)(*(_DWORD *)(a3 + 36) + 1);
*(_DWORD *)(a3 + 36) = result;
if ( v38 >= v15 )
{
LABEL_54:
if ( v23 > 0 )
{
while ( 1 )
{
v24 = *(_DWORD *)(a3 + 8);
LABEL_60:
if ( (v24 & 0x4000) != 0 || (v30 = *(_DWORD *)(a3 + 36), *(_DWORD *)(a3 + 40) > v30) )
{
v31 = *(FILE **)a3;
if ( (v24 & 0x2000) != 0 )
fputc(32, v31);
else
*((_BYTE *)&v31->_ptr + *(int *)(a3 + 36)) = 32;
v30 = *(_DWORD *)(a3 + 36);
}
*(_DWORD *)(a3 + 36) = v30 + 1;
result = (unsigned int)(v25 - 1);
if ( v25 <= 0 )
break;
--v25;
}
}
return result;
}
LABEL_49:
v24 = *(_DWORD *)(a3 + 8);
}
*((_BYTE *)&v29->_ptr + *(int *)(a3 + 36)) = v28;
v27 = *(_DWORD *)(a3 + 36);
LABEL_48:
result = (unsigned int)(v27 + 1);
*(_DWORD *)(a3 + 36) = result;
if ( v38 >= v15 )
goto LABEL_54;
goto LABEL_49;
}
v36 = v15;
v15 += v23;
result = (__int64)memset(v36, 48, v23);
if ( a1 == 111 )
{
LABEL_33:
v23 = -1;
goto LABEL_34;
}
LABEL_81:
v23 = -1;
if ( (v24 & 0x800) != 0 )
goto LABEL_40;
LABEL_34:
if ( v38 < v15 )
{
v24 = *(_DWORD *)(a3 + 8);
v25 = v23 - 1;
goto LABEL_50;
}
return result;
}
//----- (0000000140014CB0) ----------------------------------------------------
__int64 __fastcall _pformat_int_isra_0(unsigned __int64 a1, __int64 a2)
{
int v2; // eax
int v3; // r14d
int v4; // r12d
int v6; // eax
int v7; // esi
void *v8; // rsp
_BYTE *v9; // rdi
_BYTE *i; // r8
int v11; // r8d
void *v12; // rcx
_BYTE *v13; // rax
int v14; // esi
_BYTE *v15; // rsi
int v16; // eax
int v17; // ecx
FILE *v18; // rdx
__int64 result; // rax
int v20; // edx
int v21; // ecx
int v22; // edx
FILE *v23; // rdx
int v24; // eax
void *v25; // rcx
int v26; // eax
int v27; // eax
_BYTE v28[64]; // [rsp+20h] [rbp+0h] BYREF
v2 = 0;
v3 = *(_DWORD *)(a2 + 16);
v4 = *(_DWORD *)(a2 + 8);
if ( v3 >= 0 )
v2 = *(_DWORD *)(a2 + 16);
v6 = v2 + 23;
if ( (v4 & 0x1000) != 0 && *(_WORD *)(a2 + 32) )
v6 += v6 / 3u;
v7 = *(_DWORD *)(a2 + 12);
if ( v7 >= v6 )
v6 = *(_DWORD *)(a2 + 12);
v8 = alloca(v6);
if ( (v4 & 0x80u) == 0 )
{
LABEL_11:
v9 = v28;
if ( !a1 )
goto LABEL_20;
goto LABEL_12;
}
if ( (a1 & 0x8000000000000000uLL) == 0LL )
{
LOBYTE(v4) = v4 & 0x7F;
*(_DWORD *)(a2 + 8) = v4;
goto LABEL_11;
}
a1 = -(__int64)a1;
LABEL_12:
for ( i = v28; ; i = v9 )
{
v9 = i + 1;
*i = a1 % 0xA + 48;
if ( a1 <= 9 )
break;
if ( v28 != v9 && (v4 & 0x1000) != 0 && *(_WORD *)(a2 + 32) && ((v9 - v28) & 0x8000000000000003uLL) == 3 )
{
*v9 = 44;
v9 = i + 2;
}
a1 /= 0xAu;
}
LABEL_20:
if ( v3 > 0 )
{
v11 = v3 - ((_DWORD)v9 - (unsigned int)v28);
if ( v11 <= 0 )
{
if ( v28 != v9 )
goto LABEL_25;
v13 = v28;
LABEL_57:
v9 = v13 + 1;
*v13 = 48;
goto LABEL_25;
}
v12 = v9;
v9 += v11;
memset(v12, 48, v11);
}
if ( v28 == v9 )
{
v13 = v9;
if ( v3 )
goto LABEL_57;
}
LABEL_25:
if ( v7 <= 0 )
goto LABEL_30;
v14 = v7 - ((_DWORD)v9 - (unsigned int)v28);
*(_DWORD *)(a2 + 12) = v14;
if ( v14 <= 0 )
goto LABEL_30;
if ( (v4 & 0x1C0) != 0 )
{
*(_DWORD *)(a2 + 12) = v14 - 1;
if ( v3 >= 0 )
goto LABEL_29;
}
else if ( v3 >= 0 )
{
LABEL_29:
if ( (v4 & 0x400) == 0 )
{
v26 = *(_DWORD *)(a2 + 12);
*(_DWORD *)(a2 + 12) = v26 - 1;
if ( v26 > 0 )
{
do
{
_pformat_putc(32, a2);
v27 = *(_DWORD *)(a2 + 12);
*(_DWORD *)(a2 + 12) = v27 - 1;
}
while ( v27 > 0 );
v4 = *(_DWORD *)(a2 + 8);
}
}
goto LABEL_30;
}
if ( (v4 & 0x600) != 0x200 )
goto LABEL_29;
v24 = *(_DWORD *)(a2 + 12);
*(_DWORD *)(a2 + 12) = v24 - 1;
if ( v24 > 0 )
{
v25 = v9;
v9 += v24;
memset(v25, 48, v24);
*(_DWORD *)(a2 + 12) = -1;
}
LABEL_30:
if ( (v4 & 0x80u) == 0 )
{
if ( (v4 & 0x100) != 0 )
{
v15 = v9 + 1;
*v9 = 43;
}
else
{
v15 = v9;
if ( (v4 & 0x40) != 0 )
{
v15 = v9 + 1;
*v9 = 32;
}
}
}
else
{
v15 = v9 + 1;
*v9 = 45;
}
if ( v28 < v15 )
{
while ( 1 )
{
--v15;
if ( (v4 & 0x4000) == 0 )
{
v16 = *(_DWORD *)(a2 + 36);
if ( *(_DWORD *)(a2 + 40) <= v16 )
goto LABEL_35;
}
v17 = (char)*v15;
v18 = *(FILE **)a2;
if ( (v4 & 0x2000) == 0 )
break;
fputc(v17, v18);
++*(_DWORD *)(a2 + 36);
if ( v28 == v15 )
goto LABEL_41;
LABEL_36:
v4 = *(_DWORD *)(a2 + 8);
}
*((_BYTE *)&v18->_ptr + *(int *)(a2 + 36)) = v17;
v16 = *(_DWORD *)(a2 + 36);
LABEL_35:
*(_DWORD *)(a2 + 36) = v16 + 1;
if ( v28 == v15 )
goto LABEL_41;
goto LABEL_36;
}
LABEL_41:
LODWORD(result) = *(_DWORD *)(a2 + 12);
while ( 1 )
{
v20 = result;
result = (unsigned int)(result - 1);
*(_DWORD *)(a2 + 12) = result;
if ( v20 <= 0 )
break;
v21 = *(_DWORD *)(a2 + 8);
if ( (v21 & 0x4000) != 0 || (v22 = *(_DWORD *)(a2 + 36), *(_DWORD *)(a2 + 40) > v22) )
{
v23 = *(FILE **)a2;
if ( (v21 & 0x2000) != 0 )
fputc(32, v23);
else
*((_BYTE *)&v23->_ptr + *(int *)(a2 + 36)) = 32;
v22 = *(_DWORD *)(a2 + 36);
LODWORD(result) = *(_DWORD *)(a2 + 12);
}
*(_DWORD *)(a2 + 36) = v22 + 1;
}
return result;
}
//----- (0000000140015040) ----------------------------------------------------
__int64 __fastcall _pformat_emit_radix_point(__int64 a1)
{
wchar_t v2; // dx
unsigned __int64 v3; // rax
void *v4; // rsp
void *v5; // rsp
char *v6; // rsi
int v7; // eax
char *v8; // r12
int v9; // eax
__int64 result; // rax
int v11; // edx
int v12; // ecx
struct lconv *v13; // rax
int v14; // eax
char Dest[6]; // [rsp+20h] [rbp-10h] BYREF
wchar_t DstCh; // [rsp+26h] [rbp-Ah] BYREF
mbstate_t State; // [rsp+28h] [rbp-8h] BYREF
if ( *(_DWORD *)(a1 + 20) == -3 )
{
State = 0;
v13 = localeconv();
v14 = mbrtowc_0(&DstCh, v13->decimal_point, 0x10u, &State);
if ( v14 <= 0 )
{
v2 = *(_WORD *)(a1 + 24);
}
else
{
v2 = DstCh;
*(_WORD *)(a1 + 24) = DstCh;
}
*(_DWORD *)(a1 + 20) = v14;
}
else
{
v2 = *(_WORD *)(a1 + 24);
}
if ( !v2 )
return _pformat_putc(46, a1);
v3 = (*(int *)(a1 + 20) + 15LL) & 0xFFFFFFFFFFFFFFF0uLL;
v4 = alloca(*(int *)(a1 + 20));
State = 0;
v5 = alloca(v3);
v6 = Dest;
v7 = wcrtomb(Dest, v2, &State);
if ( v7 > 0 )
{
v8 = &Dest[v7 - 1 + 1];
while ( 1 )
{
v11 = *(_DWORD *)(a1 + 8);
++v6;
if ( (v11 & 0x4000) == 0 )
{
v9 = *(_DWORD *)(a1 + 36);
if ( *(_DWORD *)(a1 + 40) <= v9 )
goto LABEL_7;
}
v12 = *(v6 - 1);
if ( (v11 & 0x2000) != 0 )
{
fputc(v12, *(FILE **)a1);
result = (unsigned int)(*(_DWORD *)(a1 + 36) + 1);
*(_DWORD *)(a1 + 36) = result;
if ( v8 == v6 )
return result;
}
else
{
*(_BYTE *)(*(_QWORD *)a1 + *(int *)(a1 + 36)) = v12;
v9 = *(_DWORD *)(a1 + 36);
LABEL_7:
result = (unsigned int)(v9 + 1);
*(_DWORD *)(a1 + 36) = result;
if ( v8 == v6 )
return result;
}
}
}
return _pformat_putc(46, a1);
}
//----- (0000000140015190) ----------------------------------------------------
__int64 __fastcall _pformat_emit_float(int a1, char *a2, int a3, __int64 a4)
{
int v6; // ecx
int v7; // esi
int v9; // eax
int v10; // ecx
int v11; // ecx
int v12; // eax
bool v13; // zf
int v14; // eax
char v15; // al
char v16; // cl
int v17; // eax
__int64 result; // rax
char v19; // al
char v20; // cl
int v21; // ecx
int v22; // eax
int v23; // ecx
int v24; // eax
int v25; // eax
unsigned int v26; // eax
unsigned int v27; // eax
v6 = *(_DWORD *)(a4 + 12);
v7 = a3;
if ( a3 > 0 )
{
if ( a3 > v6 )
{
v13 = (*(_BYTE *)(a4 + 9) & 0x10) == 0;
*(_DWORD *)(a4 + 12) = -1;
if ( v13 )
goto LABEL_14;
if ( !*(_WORD *)(a4 + 32) )
goto LABEL_14;
v11 = -1;
v26 = (a3 + 2) / 3u;
if ( v26 == 1 )
goto LABEL_14;
goto LABEL_68;
}
v9 = *(_DWORD *)(a4 + 16);
v10 = v6 - a3;
if ( v10 <= v9 )
{
v13 = (*(_BYTE *)(a4 + 9) & 0x10) == 0;
*(_DWORD *)(a4 + 12) = -1;
if ( v13 || !*(_WORD *)(a4 + 32) )
goto LABEL_14;
v11 = -1;
goto LABEL_77;
}
LABEL_4:
v11 = v10 - v9;
*(_DWORD *)(a4 + 12) = v11;
if ( v9 > 0 )
goto LABEL_5;
goto LABEL_57;
}
if ( v6 > 0 )
{
v9 = *(_DWORD *)(a4 + 16);
v10 = v6 - 1;
if ( v10 > v9 )
goto LABEL_4;
LABEL_34:
*(_DWORD *)(a4 + 12) = -1;
if ( !a1 )
goto LABEL_15;
goto LABEL_35;
}
if ( v6 )
goto LABEL_34;
v23 = *(_DWORD *)(a4 + 16);
if ( v23 >= 0 )
goto LABEL_34;
v11 = -v23;
*(_DWORD *)(a4 + 12) = v11;
LABEL_57:
v24 = *(_DWORD *)(a4 + 8);
if ( (v24 & 0x800) == 0 )
{
if ( a3 <= 0 || (v24 & 0x1000) == 0 )
goto LABEL_8;
LABEL_60:
if ( !*(_WORD *)(a4 + 32) )
goto LABEL_7;
LABEL_77:
v26 = (a3 + 2) / 3;
if ( v26 == 1 )
goto LABEL_7;
LABEL_68:
v27 = v26 - 1 - v11;
while ( v11 > 0 )
{
*(_DWORD *)(a4 + 12) = --v11;
if ( !(v11 + v27) )
goto LABEL_7;
}
LABEL_14:
if ( !a1 )
{
LABEL_15:
v12 = *(_DWORD *)(a4 + 8);
goto LABEL_16;
}
LABEL_35:
_pformat_putc(45, a4);
goto LABEL_19;
}
LABEL_5:
*(_DWORD *)(a4 + 12) = --v11;
if ( a3 > 0 && (*(_BYTE *)(a4 + 9) & 0x10) != 0 )
goto LABEL_60;
LABEL_7:
if ( v11 <= 0 )
goto LABEL_14;
LABEL_8:
if ( a1 )
{
*(_DWORD *)(a4 + 12) = v11 - 1;
if ( v11 == 1 || (*(_DWORD *)(a4 + 8) & 0x600) != 0 )
goto LABEL_35;
goto LABEL_50;
}
v12 = *(_DWORD *)(a4 + 8);
if ( (v12 & 0x1C0) != 0 )
{
*(_DWORD *)(a4 + 12) = v11 - 1;
if ( v11 != 1 && (v12 & 0x600) == 0 )
{
LABEL_50:
v21 = v11 - 2;
goto LABEL_51;
}
}
else
{
v21 = v11 - 1;
if ( (v12 & 0x600) == 0 )
{
LABEL_51:
*(_DWORD *)(a4 + 12) = v21;
do
{
_pformat_putc(32, a4);
v22 = *(_DWORD *)(a4 + 12);
*(_DWORD *)(a4 + 12) = v22 - 1;
}
while ( v22 > 0 );
goto LABEL_14;
}
}
LABEL_16:
if ( (v12 & 0x100) != 0 )
{
_pformat_putc(43, a4);
}
else if ( (v12 & 0x40) != 0 )
{
_pformat_putc(32, a4);
}
LABEL_19:
v14 = *(_DWORD *)(a4 + 12);
if ( v14 > 0 && (*(_DWORD *)(a4 + 8) & 0x600) == 0x200 )
{
*(_DWORD *)(a4 + 12) = v14 - 1;
do
{
_pformat_putc(48, a4);
v25 = *(_DWORD *)(a4 + 12);
*(_DWORD *)(a4 + 12) = v25 - 1;
}
while ( v25 > 0 );
}
if ( v7 <= 0 )
{
_pformat_putc(48, a4);
v17 = *(_DWORD *)(a4 + 16);
if ( v17 <= 0 && (*(_BYTE *)(a4 + 9) & 8) == 0 )
{
if ( !v7 )
goto LABEL_31;
goto LABEL_45;
}
}
else
{
while ( 1 )
{
v15 = *a2;
v16 = 48;
if ( *a2 )
{
++a2;
v16 = v15;
}
_pformat_putc(v16, a4);
if ( !--v7 )
break;
if ( (*(_BYTE *)(a4 + 9) & 0x10) != 0 && *(_WORD *)(a4 + 32) && (unsigned int)(-1431655765 * v7) <= 0x55555555 )
_pformat_wputchars(a4 + 32, 1, a4);
}
v17 = *(_DWORD *)(a4 + 16);
if ( v17 > 0 )
{
_pformat_emit_radix_point(a4);
goto LABEL_40;
}
if ( (*(_BYTE *)(a4 + 9) & 8) == 0 )
{
LABEL_31:
result = (unsigned int)(v17 - 1);
*(_DWORD *)(a4 + 16) = result;
return result;
}
}
_pformat_emit_radix_point(a4);
if ( !v7 )
goto LABEL_40;
v17 = *(_DWORD *)(a4 + 16);
LABEL_45:
*(_DWORD *)(a4 + 16) = v7 + v17;
do
{
_pformat_putc(48, a4);
++v7;
}
while ( v7 );
LABEL_40:
while ( 1 )
{
result = *(unsigned int *)(a4 + 16);
*(_DWORD *)(a4 + 16) = result - 1;
if ( (int)result <= 0 )
break;
v19 = *a2;
v20 = 48;
if ( *a2 )
{
++a2;
v20 = v19;
}
_pformat_putc(v20, a4);
}
return result;
}
//----- (0000000140015570) ----------------------------------------------------
__int64 __fastcall _pformat_emit_efloat(int a1, char *a2, int a3, _DWORD *a4)
{
int v4; // r10d
unsigned __int64 v7; // rsi
int i; // ecx
int v9; // eax
int v10; // r8d
int v11; // edi
int v12; // eax
int v13; // ecx
v4 = 1;
v7 = a3 - 1;
for ( i = (int)v7 / 10; i; i /= 10 )
++v4;
v9 = a4[11];
if ( v9 == -1 )
{
a4[11] = 2;
v9 = 2;
}
v10 = a4[3];
v11 = v4;
if ( v9 >= v4 )
v11 = v9;
v12 = v10 - (v11 + 2);
if ( v10 <= v11 + 2 )
v12 = -1;
a4[3] = v12;
_pformat_emit_float(a1, a2, 1, (__int64)a4);
v13 = a4[2];
a4[4] = a4[11];
a4[2] = v13 | 0x1C0;
_pformat_putc(v13 & 0x20 | 0x45, (__int64)a4);
a4[3] += v11 + 1;
return _pformat_int_isra_0(v7, (__int64)a4);
}
//----- (0000000140015640) ----------------------------------------------------
void __fastcall _pformat_efloat(long double *a1, _DWORD *a2)
{
int v2; // r8d
long double v3; // fst7
int v5; // r8d
char *v6; // rax
__int64 v7; // rsi
long double v8; // [rsp+30h] [rbp-38h] BYREF
int v9; // [rsp+48h] [rbp-20h] BYREF
int v10[7]; // [rsp+4Ch] [rbp-1Ch] BYREF
v2 = a2[4];
v3 = *a1;
if ( v2 < 0 )
{
a2[4] = 6;
v5 = 7;
}
else
{
v5 = v2 + 1;
}
v8 = v3;
v6 = _pformat_cvt(2, (__int64 *)&v8, v5, v10, &v9);
v7 = (__int64)v6;
if ( v10[0] == -32768 )
_pformat_emit_inf_or_nan(v9, (__int64)v6, (__int64)a2);
else
_pformat_emit_efloat(v9, v6, v10[0], a2);
_freedtoa(v7);
}
// 140015640: too many cbuild loops
//----- (00000001400156E0) ----------------------------------------------------
void __fastcall _pformat_float(long double *a1, __int64 a2)
{
int v2; // r8d
long double v3; // fst7
char *v5; // rax
__int64 v6; // rsi
int v7; // eax
int v8; // edx
int v9; // ecx
int v10; // edx
FILE *v11; // rdx
long double v12; // [rsp+30h] [rbp-38h] BYREF
int v13; // [rsp+48h] [rbp-20h] BYREF
int v14[7]; // [rsp+4Ch] [rbp-1Ch] BYREF
v2 = *(_DWORD *)(a2 + 16);
v3 = *a1;
if ( v2 < 0 )
{
*(_DWORD *)(a2 + 16) = 6;
v2 = 6;
}
v12 = v3;
v5 = _pformat_cvt(3, (__int64 *)&v12, v2, v14, &v13);
v6 = (__int64)v5;
if ( v14[0] == -32768 )
{
_pformat_emit_inf_or_nan(v13, (__int64)v5, a2);
}
else
{
_pformat_emit_float(v13, v5, v14[0], a2);
v7 = *(_DWORD *)(a2 + 12);
while ( 1 )
{
v8 = v7--;
*(_DWORD *)(a2 + 12) = v7;
if ( v8 <= 0 )
break;
v9 = *(_DWORD *)(a2 + 8);
if ( (v9 & 0x4000) != 0 || (v10 = *(_DWORD *)(a2 + 36), *(_DWORD *)(a2 + 40) > v10) )
{
v11 = *(FILE **)a2;
if ( (v9 & 0x2000) != 0 )
fputc(32, v11);
else
*((_BYTE *)&v11->_ptr + *(int *)(a2 + 36)) = 32;
v10 = *(_DWORD *)(a2 + 36);
v7 = *(_DWORD *)(a2 + 12);
}
*(_DWORD *)(a2 + 36) = v10 + 1;
}
}
_freedtoa(v6);
}
// 1400156E0: too many cbuild loops
//----- (00000001400157C0) ----------------------------------------------------
void __fastcall _pformat_gfloat(long double *a1, _DWORD *a2)
{
int v2; // r8d
long double v3; // fst7
char *v5; // rax
int v6; // edi
char *v7; // rsi
int v8; // eax
int v9; // edx
int v10; // eax
int v11; // eax
int v12; // ecx
int v13; // eax
int v14; // edx
long double v15; // [rsp+30h] [rbp-38h] BYREF
int v16; // [rsp+48h] [rbp-20h] BYREF
int v17[7]; // [rsp+4Ch] [rbp-1Ch] BYREF
v2 = a2[4];
v3 = *a1;
if ( v2 < 0 )
{
a2[4] = 6;
v2 = 6;
}
else if ( !v2 )
{
a2[4] = 1;
v2 = 1;
}
v15 = v3;
v5 = _pformat_cvt(2, (__int64 *)&v15, v2, v17, &v16);
v6 = v17[0];
v7 = v5;
if ( v17[0] == -32768 )
{
_pformat_emit_inf_or_nan(v16, (__int64)v5, (__int64)a2);
_freedtoa((__int64)v7);
}
else
{
v8 = a2[2] & 0x800;
if ( v17[0] < -3 || (v9 = a2[4], v17[0] > v9) )
{
if ( v8 )
v11 = a2[4] - 1;
else
v11 = strlen(v7) - 1;
v12 = v16;
a2[4] = v11;
_pformat_emit_efloat(v12, v7, v6, a2);
_freedtoa((__int64)v7);
}
else
{
if ( v8 )
{
a2[4] = v9 - v17[0];
}
else
{
v13 = strlen(v7) - v17[0];
a2[4] = v13;
if ( v13 < 0 )
{
v14 = a2[3];
if ( v14 > 0 )
a2[3] = v14 + v13;
}
}
_pformat_emit_float(v16, v7, v6, (__int64)a2);
while ( 1 )
{
v10 = a2[3];
a2[3] = v10 - 1;
if ( v10 <= 0 )
break;
_pformat_putc(32, (__int64)a2);
}
_freedtoa((__int64)v7);
}
}
}
// 1400157C0: too many cbuild loops
//----- (0000000140015940) ----------------------------------------------------
__int64 __fastcall _pformat_emit_xfloat_isra_0(unsigned __int64 a1, __int16 a2, __int64 a3)
{
int v3; // r10d
unsigned __int64 v4; // r9
__int16 v6; // r8
unsigned __int64 v7; // rbp
int v8; // edx
int v9; // ecx
char *v10; // rsi
char v11; // al
unsigned int v12; // eax
int v13; // r10d
char *v14; // r10
unsigned __int64 v15; // r9
char v16; // cl
__int64 v17; // rax
char *v18; // rax
int v19; // r10d
int v20; // r12d
int v21; // eax
int v22; // eax
int v23; // ecx
int v24; // r10d
int v25; // edx
signed __int64 v26; // r9
int v27; // r9d
int v28; // r11d
int v29; // edx
int v30; // r10d
int v31; // eax
int v32; // eax
__int16 v34; // [rsp+2Eh] [rbp-5Ah] BYREF
char v35; // [rsp+30h] [rbp-58h] BYREF
char v36; // [rsp+31h] [rbp-57h] BYREF
v3 = *(_DWORD *)(a3 + 16);
v4 = a1;
if ( a2 || a1 )
{
v6 = a2 - 3;
if ( (unsigned int)v3 > 0xE )
{
v7 = v6;
v8 = 16;
if ( !a1 && v3 <= 0 )
{
v9 = *(_DWORD *)(a3 + 8);
goto LABEL_24;
}
goto LABEL_5;
}
goto LABEL_20;
}
if ( (unsigned int)v3 <= 0xE )
{
v6 = 0;
LABEL_20:
v15 = a1 >> 1;
v16 = 4 * (15 - v3);
v17 = v15 + (4LL << (4 * (14 - (unsigned __int8)v3)));
if ( v17 < 0 )
{
v6 += 4;
v4 = (unsigned __int64)v17 >> 3 >> v16;
}
else
{
v4 = (unsigned __int64)(2 * v17) >> v16;
if ( !v4 && !v3 )
{
v9 = *(_DWORD *)(a3 + 8);
v7 = v6;
goto LABEL_24;
}
}
v8 = v3 + 1;
v7 = v6;
goto LABEL_5;
}
if ( v3 <= 0 )
{
v9 = *(_DWORD *)(a3 + 8);
v7 = 0;
v6 = 0;
goto LABEL_24;
}
v7 = 0;
v6 = 0;
v8 = 16;
v4 = 0;
LABEL_5:
v9 = *(_DWORD *)(a3 + 8);
v10 = &v35;
while ( 1 )
{
v12 = v4 & 0xF;
if ( v8 == 1 )
break;
v13 = *(_DWORD *)(a3 + 16);
if ( v13 > 0 )
*(_DWORD *)(a3 + 16) = v13 - 1;
v14 = v10;
LABEL_15:
if ( (v4 & 0xF) == 0 )
{
if ( &v35 >= v14 && *(int *)(a3 + 16) < 0 )
{
v10 = v14;
goto LABEL_10;
}
goto LABEL_8;
}
LABEL_16:
if ( v12 > 9 )
{
v11 = v9 & 0x20 | (v12 + 55);
goto LABEL_9;
}
LABEL_8:
v11 = v12 + 48;
LABEL_9:
v10 = v14 + 1;
*v14 = v11;
LABEL_10:
v4 >>= 4;
if ( !--v8 )
goto LABEL_52;
}
if ( &v35 < v10 || (v9 & 0x800) != 0 || (v24 = *(_DWORD *)(a3 + 16), v24 > 0) )
{
v14 = v10 + 1;
*v10 = 46;
goto LABEL_15;
}
if ( (v4 & 0xF) != 0 )
{
v14 = v10;
goto LABEL_16;
}
if ( !v24 )
*v10++ = 48;
LABEL_52:
if ( v10 == &v35 )
{
if ( *(int *)(a3 + 16) > 0 )
{
LABEL_25:
v35 = 46;
v18 = &v36;
LABEL_26:
v19 = *(_DWORD *)(a3 + 12);
v10 = v18 + 1;
*v18 = 48;
v20 = 2;
if ( v19 > 0 )
goto LABEL_54;
LABEL_27:
if ( (v9 & 0x80u) != 0 )
goto LABEL_64;
goto LABEL_28;
}
LABEL_24:
v18 = &v35;
if ( (v9 & 0x800) == 0 )
goto LABEL_26;
goto LABEL_25;
}
v19 = *(_DWORD *)(a3 + 12);
v20 = 2;
if ( v19 <= 0 )
goto LABEL_27;
LABEL_54:
v25 = *(_DWORD *)(a3 + 16);
v26 = v10 - &v35;
if ( v25 > 0 )
LODWORD(v26) = v25 + (_DWORD)v10 - (unsigned int)&v35;
v27 = v26 - (((v9 & 0x1C0) == 0) - 6);
v28 = v27;
v29 = v6 / 10;
if ( v29 )
{
do
{
++v28;
v29 /= 10;
}
while ( v29 );
v20 = (__int16)(v28 - v27 + 2);
}
if ( v19 <= v28 )
{
v30 = -1;
goto LABEL_71;
}
v30 = v19 - v28;
if ( (v9 & 0x600) != 0 )
{
LABEL_71:
*(_DWORD *)(a3 + 12) = v30;
goto LABEL_27;
}
*(_DWORD *)(a3 + 12) = v30 - 1;
do
{
_pformat_putc(32, a3);
v31 = *(_DWORD *)(a3 + 12);
*(_DWORD *)(a3 + 12) = v31 - 1;
}
while ( v31 > 0 );
v9 = *(_DWORD *)(a3 + 8);
if ( (v9 & 0x80u) != 0 )
{
LABEL_64:
_pformat_putc(45, a3);
goto LABEL_31;
}
LABEL_28:
if ( (v9 & 0x100) != 0 )
{
_pformat_putc(43, a3);
}
else if ( (v9 & 0x40) != 0 )
{
_pformat_putc(32, a3);
}
LABEL_31:
_pformat_putc(48, a3);
_pformat_putc(*(_BYTE *)(a3 + 8) & 0x20 | 0x58, a3);
v21 = *(_DWORD *)(a3 + 12);
if ( v21 > 0 && (*(_BYTE *)(a3 + 9) & 2) != 0 )
{
*(_DWORD *)(a3 + 12) = v21 - 1;
do
{
_pformat_putc(48, a3);
v22 = *(_DWORD *)(a3 + 12);
*(_DWORD *)(a3 + 12) = v22 - 1;
}
while ( v22 > 0 );
}
if ( &v35 < v10 )
{
do
{
v23 = *--v10;
if ( v23 == 46 )
{
_pformat_emit_radix_point(a3);
}
else if ( v23 == 44 )
{
v34 = *(_WORD *)(a3 + 32);
if ( v34 )
_pformat_wputchars((__int64)&v34, 1, a3);
}
else
{
_pformat_putc(v23, a3);
}
}
while ( v10 != &v35 );
}
while ( 1 )
{
v32 = *(_DWORD *)(a3 + 16);
*(_DWORD *)(a3 + 16) = v32 - 1;
if ( v32 <= 0 )
break;
_pformat_putc(48, a3);
}
_pformat_putc(*(_BYTE *)(a3 + 8) & 0x20 | 0x50, a3);
*(_QWORD *)(a3 + 8) = _mm_unpacklo_epi32(
_mm_cvtsi32_si128(*(_DWORD *)(a3 + 8) | 0x1C0u),
_mm_cvtsi32_si128(*(_DWORD *)(a3 + 12) + v20)).m128i_u64[0];
return _pformat_int_isra_0(v7, a3);
}
//----- (0000000140015DF0) ----------------------------------------------------
__int64 __fastcall _mingw_pformat(__int16 a1, FILE *a2, signed int a3, char *a4, const char **a5)
{
unsigned int v9; // edi
int *v10; // rax
unsigned int v11; // ecx
char *v12; // rbx
char v13; // al
unsigned int v14; // esi
char v15; // al
char *v16; // rsi
char *v17; // r11
int v18; // r10d
unsigned int v19; // r14d
int v20; // ecx
char *v21; // rbp
unsigned __int64 v23; // rax
unsigned __int64 v24; // rdx
unsigned __int64 v25; // rcx
unsigned __int64 v26; // rdx
char *v27; // rax
char *v28; // rdx
double v29; // rcx
int v30; // eax
bool v31; // zf
int v32; // ebx
unsigned __int64 v33; // rcx
int v34; // r9d
__int16 v35; // dx
int v36; // eax
const char **v37; // rbx
const char **v38; // rbx
double v39; // rdx
double v40; // rdx
double v41; // rdx
int v42; // eax
int v43; // eax
struct lconv *v44; // rax
int v45; // eax
int v46; // eax
unsigned __int64 v47; // rax
const wchar_t *v48; // rsi
int v49; // eax
unsigned int v50; // eax
unsigned int v51; // eax
long double State; // [rsp+20h] [rbp-C8h]
int ErrorMessage; // [rsp+30h] [rbp-B8h]
int v54; // [rsp+34h] [rbp-B4h]
char *v55; // [rsp+38h] [rbp-B0h]
long double v56; // [rsp+40h] [rbp-A8h] BYREF
wchar_t DstCh; // [rsp+5Eh] [rbp-8Ah] BYREF
mbstate_t v58[2]; // [rsp+60h] [rbp-88h] BYREF
FILE *Stream; // [rsp+70h] [rbp-78h] BYREF
__int128 v60; // [rsp+78h] [rbp-70h] BYREF
__int16 v61; // [rsp+88h] [rbp-60h]
int v62; // [rsp+8Ch] [rbp-5Ch]
wchar_t v63; // [rsp+90h] [rbp-58h]
unsigned int v64; // [rsp+94h] [rbp-54h]
signed int v65; // [rsp+98h] [rbp-50h]
int v66; // [rsp+9Ch] [rbp-4Ch]
v9 = a1 & 0x6000;
v10 = errno();
v11 = *a4;
Stream = a2;
LODWORD(v10) = *v10;
v65 = a3;
v12 = a4 + 1;
*(_QWORD *)&v60 = v9 | 0xFFFFFFFF00000000uLL;
v62 = 0;
ErrorMessage = (int)v10;
*((_QWORD *)&v60 + 1) = 0xFFFFFFFDFFFFFFFFuLL;
v61 = 0;
v13 = v11;
v63 = 0;
v64 = 0;
v66 = -1;
if ( v11 )
{
while ( 1 )
{
if ( v11 == 37 )
{
v15 = *v12;
LODWORD(v60) = v9;
*(_QWORD *)((char *)&v60 + 4) = -1;
if ( !v15 )
return v64;
v16 = v12;
v17 = (char *)&v60 + 4;
v18 = 0;
v19 = 0;
while ( 2 )
{
v20 = v15;
v21 = v16 + 1;
switch ( v15 )
{
case ' ':
if ( v19 )
goto LABEL_21;
v15 = *++v16;
LODWORD(v60) = v60 | 0x40;
goto LABEL_22;
case '#':
if ( v19 )
goto LABEL_21;
v15 = *++v16;
LODWORD(v60) = v60 | 0x800;
goto LABEL_22;
case '%':
v12 = v16 + 1;
_pformat_putc(37, (__int64)&Stream);
break;
case '\'':
if ( v19 )
goto LABEL_21;
v55 = v17;
LODWORD(v60) = v60 | 0x1000;
v54 = v18;
v58[0]._Wchar = 0;
v44 = localeconv();
v45 = mbrtowc_0(&DstCh, v44->thousands_sep, 0x10u, v58);
v18 = v54;
v17 = v55;
if ( v45 > 0 )
v63 = DstCh;
v62 = v45;
v15 = *++v16;
goto LABEL_22;
case '*':
if ( !v17 )
goto LABEL_84;
if ( (v19 & 0xFFFFFFFD) != 0 )
{
v15 = v16[1];
v17 = 0;
++v16;
v19 = 4;
}
else
{
v46 = *(_DWORD *)a5;
*(_DWORD *)v17 = *(_DWORD *)a5;
if ( v46 >= 0 )
goto LABEL_110;
if ( !v19 )
{
v51 = v60;
BYTE1(v51) = BYTE1(v60) | 4;
*(_QWORD *)&v60 = _mm_unpacklo_epi32(_mm_cvtsi32_si128(v51), _mm_cvtsi32_si128(-DWORD1(v60))).m128i_u64[0];
LABEL_110:
v15 = v16[1];
++a5;
++v16;
v17 = 0;
goto LABEL_22;
}
v15 = v16[1];
++a5;
++v16;
v17 = 0;
DWORD2(v60) = -1;
v19 = 2;
}
goto LABEL_22;
case '+':
if ( v19 )
goto LABEL_21;
v15 = *++v16;
LODWORD(v60) = v60 | 0x100;
goto LABEL_22;
case '-':
if ( v19 )
goto LABEL_21;
v15 = *++v16;
LODWORD(v60) = v60 | 0x400;
goto LABEL_22;
case '.':
if ( v19 <= 1 )
{
v15 = v16[1];
v19 = 2;
++v16;
DWORD2(v60) = 0;
v17 = (char *)&v60 + 8;
}
else
{
LABEL_84:
v15 = v16[1];
v19 = 4;
++v16;
}
goto LABEL_22;
case '0':
if ( v19 )
{
if ( v19 == 4 )
goto LABEL_57;
v20 = 48;
LABEL_129:
if ( v19 == 2 )
v19 = 3;
LABEL_18:
if ( !v17 )
goto LABEL_21;
if ( *(int *)v17 >= 0 )
{
*(_DWORD *)v17 = v20 + 10 * *(_DWORD *)v17 - 48;
LABEL_21:
v15 = *++v16;
goto LABEL_22;
}
v15 = *++v16;
*(_DWORD *)v17 = v20 - 48;
}
else
{
v15 = *++v16;
LODWORD(v60) = v60 | 0x200;
}
goto LABEL_22;
case 'A':
v30 = v60;
v29 = *(double *)a5;
if ( (v60 & 4) == 0 )
goto LABEL_88;
goto LABEL_60;
case 'C':
DWORD2(v60) = -1;
v37 = a5 + 1;
goto LABEL_95;
case 'E':
v41 = *(double *)a5;
if ( (v60 & 4) == 0 )
goto LABEL_97;
goto LABEL_78;
case 'F':
v40 = *(double *)a5;
if ( (v60 & 4) == 0 )
goto LABEL_99;
goto LABEL_76;
case 'G':
v39 = *(double *)a5;
if ( (v60 & 4) == 0 )
goto LABEL_101;
goto LABEL_73;
case 'I':
v15 = v16[1];
if ( v15 == 54 )
{
if ( v16[2] != 52 )
{
LABEL_57:
_pformat_putc(37, (__int64)&Stream);
break;
}
v15 = v16[3];
v18 = 3;
v16 += 3;
v19 = 4;
}
else if ( v15 == 51 )
{
if ( v16[2] != 50 )
goto LABEL_57;
v15 = v16[3];
v18 = 2;
v16 += 3;
v19 = 4;
}
else
{
++v16;
v18 = 3;
v19 = 4;
}
LABEL_22:
if ( !v15 )
return v64;
continue;
case 'L':
v15 = v16[1];
v19 = 4;
++v16;
LODWORD(v60) = v60 | 4;
goto LABEL_22;
case 'S':
v38 = a5 + 1;
goto LABEL_122;
case 'X':
case 'o':
case 'u':
case 'x':
LODWORD(v60) = v60 & 0xFFFFFEFF;
if ( v18 == 3 )
{
v23 = (unsigned __int64)*a5;
}
else if ( v18 == 2 )
{
v23 = *(unsigned int *)a5;
}
else
{
LODWORD(v23) = *(_DWORD *)a5;
if ( v18 == 1 )
{
v23 = (unsigned __int16)v23;
}
else
{
v24 = (unsigned int)v23;
v23 = (unsigned __int8)v23;
if ( v18 != 5 )
v23 = v24;
}
}
v58[0] = (mbstate_t)v23;
if ( v20 == 117 )
_pformat_int_isra_0(v23, (__int64)&Stream);
else
_pformat_xint_isra_0(v20, v23, (__int64)&Stream);
goto LABEL_74;
case 'a':
v29 = *(double *)a5;
v30 = v60 | 0x20;
v31 = (v60 & 4) == 0;
LODWORD(v60) = v60 | 0x20;
if ( v31 )
{
LABEL_88:
if ( (int)(2146435072
- (HIDWORD(v29) & 0x7FFFFFFF | ((LODWORD(v29) | (unsigned int)-LODWORD(v29)) >> 31))) >= 0 )
{
State = v29;
if ( SWORD4(State) < 0 )
{
LOBYTE(v30) = v30 | 0x80;
LODWORD(v60) = v30;
}
v42 = LODWORD(v29) | HIDWORD(v29) & 0xFFFFF;
if ( (HIDWORD(v29) & 0x7FF00000) == 2146435072 && v42 == 0 && HIDWORD(v29) & 0x7FF00000 | v42 )
{
_pformat_emit_inf_or_nan(WORD4(State) & 0x8000, (__int64)"Inf", (__int64)&Stream);
goto LABEL_74;
}
v35 = WORD4(State) & 0x7FFF;
v47 = *(_QWORD *)&State;
if ( (WORD4(State) & 0x7FFF) != 0 )
{
if ( (WORD4(State) & 0x7FFFu) <= 0x3C00 )
{
v47 = *(_QWORD *)&State >> (1 - BYTE8(State));
v35 = 15361;
}
v35 -= 16380;
}
else if ( *(_QWORD *)&State )
{
v35 = -1019;
}
v33 = v47 >> 3;
goto LABEL_120;
}
LABEL_132:
_pformat_emit_inf_or_nan(0, (__int64)"NaN", (__int64)&Stream);
goto LABEL_74;
}
LABEL_60:
v32 = *(_DWORD *)(*(_QWORD *)&v29 + 8LL);
v33 = **(_QWORD **)&v29;
v34 = v33 | HIDWORD(v33) & 0x7FFFFFFF;
if ( (int)(65534 - ((unsigned __int16)(2 * v32) | ((v34 | (unsigned int)-v34) >> 31))) >> 16 )
goto LABEL_132;
if ( (v32 & 0x8000u) != 0 )
{
LOBYTE(v30) = v30 | 0x80;
LODWORD(v60) = v30;
}
v35 = v32 & 0x7FFF;
if ( (v32 & 0x7FFF) == 0 )
{
if ( v33 )
v35 = -16382;
goto LABEL_120;
}
if ( v35 != 0x7FFF || v34 )
{
v35 -= 0x3FFF;
LABEL_120:
_pformat_emit_xfloat_isra_0(v33, v35, (__int64)&Stream);
goto LABEL_74;
}
_pformat_emit_inf_or_nan(v32 & 0x8000, (__int64)"Inf", (__int64)&Stream);
LABEL_74:
++a5;
v12 = v16 + 1;
break;
case 'c':
v36 = *(_DWORD *)a5;
v37 = a5 + 1;
DWORD2(v60) = -1;
if ( (unsigned int)(v18 - 2) <= 1 )
{
LABEL_95:
v43 = *(_DWORD *)a5;
a5 = v37;
v12 = v16 + 1;
LOWORD(v58[0]._Wchar) = v43;
_pformat_wputchars((__int64)v58, 1, (__int64)&Stream);
}
else
{
LOBYTE(v58[0]._Wchar) = v36;
++a5;
v12 = v16 + 1;
_pformat_putchars((__int64)v58, 1, (__int64)&Stream);
}
goto LABEL_8;
case 'd':
case 'i':
LODWORD(v60) = v60 | 0x80;
if ( v18 == 3 )
{
v25 = (unsigned __int64)*a5;
}
else
{
v25 = *(int *)a5;
if ( v18 != 2 )
{
if ( v18 == 1 )
{
v25 = (__int16)v25;
}
else if ( v18 == 5 )
{
v25 = (char)v25;
}
}
}
++a5;
v12 = v16 + 1;
_pformat_int_isra_0(v25, (__int64)&Stream);
goto LABEL_8;
case 'e':
v41 = *(double *)a5;
v31 = (v60 & 4) == 0;
LODWORD(v60) = v60 | 0x20;
if ( v31 )
{
LABEL_97:
v56 = v41;
_pformat_efloat(&v56, &Stream);
}
else
{
LABEL_78:
v56 = **(long double **)&v41;
_pformat_efloat(&v56, &Stream);
}
goto LABEL_74;
case 'f':
v40 = *(double *)a5;
v31 = (v60 & 4) == 0;
LODWORD(v60) = v60 | 0x20;
if ( v31 )
{
LABEL_99:
v56 = v40;
_pformat_float(&v56, (__int64)&Stream);
}
else
{
LABEL_76:
v56 = **(long double **)&v40;
_pformat_float(&v56, (__int64)&Stream);
}
goto LABEL_74;
case 'g':
v39 = *(double *)a5;
v31 = (v60 & 4) == 0;
LODWORD(v60) = v60 | 0x20;
if ( v31 )
{
LABEL_101:
v56 = v39;
_pformat_gfloat(&v56, &Stream);
}
else
{
LABEL_73:
v56 = **(long double **)&v39;
_pformat_gfloat(&v56, &Stream);
}
goto LABEL_74;
case 'h':
v15 = v16[1];
if ( v15 == 104 )
{
v15 = v16[2];
v18 = 5;
v16 += 2;
}
else
{
++v16;
v18 = 1;
}
v19 = 4;
goto LABEL_22;
case 'j':
case 't':
case 'z':
v15 = v16[1];
v18 = 3;
++v16;
v19 = 4;
goto LABEL_22;
case 'l':
v15 = v16[1];
if ( v15 == 108 )
{
v15 = v16[2];
v18 = 3;
v16 += 2;
}
else
{
++v16;
v18 = 2;
}
v19 = 4;
goto LABEL_22;
case 'm':
v12 = v16 + 1;
v27 = strerror_0(ErrorMessage);
_pformat_puts(v27, (__int64)&Stream);
goto LABEL_8;
case 'n':
v28 = (char *)*a5;
switch ( v18 )
{
case 5:
*v28 = v64;
break;
case 1:
*(_WORD *)v28 = v64;
break;
case 3:
*(_QWORD *)v28 = (int)v64;
break;
default:
*(_DWORD *)v28 = v64;
break;
}
goto LABEL_74;
case 'p':
if ( !v19 && (_DWORD)v60 == v9 )
{
DWORD2(v60) = 16;
v50 = v9;
BYTE1(v50) = BYTE1(v9) | 2;
LODWORD(v60) = v50;
}
v26 = (unsigned __int64)*a5++;
v12 = v16 + 1;
_pformat_xint_isra_0(120, v26, (__int64)&Stream);
goto LABEL_8;
case 's':
v38 = a5 + 1;
if ( (unsigned int)(v18 - 2) <= 1 )
{
LABEL_122:
v48 = (const wchar_t *)*a5;
if ( !*a5 )
v48 = L"(null)";
if ( SDWORD2(v60) < 0 )
v49 = wcslen_0(v48);
else
v49 = wcsnlen(v48, SDWORD2(v60));
_pformat_wputchars((__int64)v48, v49, (__int64)&Stream);
}
else
{
_pformat_puts(*a5, (__int64)&Stream);
}
a5 = v38;
v12 = v21;
goto LABEL_8;
default:
if ( (unsigned __int8)(v15 - 48) > 9u || v19 > 3 )
goto LABEL_57;
if ( v19 )
goto LABEL_129;
v19 = 1;
goto LABEL_18;
}
break;
}
}
else
{
v14 = v64;
if ( (BYTE1(v60) & 0x40) != 0 || v65 > (int)v64 )
{
if ( (BYTE1(v60) & 0x20) != 0 )
fputc(v11, Stream);
else
*((_BYTE *)&Stream->_ptr + (int)v64) = v13;
}
v64 = v14 + 1;
}
LABEL_8:
v13 = *v12++;
v11 = v13;
if ( !v13 )
return v64;
}
}
return v11;
}
// 140016743: conditional instruction was optimized away because dx.2>=3C01
// 140015DF0: too many cbuild loops
//----- (00000001400168E0) ----------------------------------------------------
char *__fastcall _rv_alloc_D2A(int a1)
{
signed int v1; // ebx
int v2; // eax
_QWORD *v3; // rax
v1 = 0;
if ( a1 > 27 )
{
v2 = 4;
do
{
v2 *= 2;
++v1;
}
while ( v2 + 23 < a1 );
}
v3 = _Balloc_D2A(v1);
*(_DWORD *)v3 = v1;
return (char *)v3 + 4;
}
//----- (0000000140016920) ----------------------------------------------------
char *__fastcall _nrv_alloc_D2A(char *a1, _QWORD *a2, int a3)
{
int v5; // eax
signed int v6; // ebx
_QWORD *v7; // rax
char *v8; // rdx
char v9; // cl
char *v10; // r8
_BYTE *v11; // rax
char v12; // cl
if ( a3 <= 27 )
{
v6 = 0;
}
else
{
v5 = 4;
v6 = 0;
do
{
v5 *= 2;
++v6;
}
while ( a3 > v5 + 23 );
}
v7 = _Balloc_D2A(v6);
v8 = a1 + 1;
*(_DWORD *)v7 = v6;
v9 = *a1;
v10 = (char *)v7 + 4;
*((_BYTE *)v7 + 4) = *a1;
v11 = (char *)v7 + 4;
if ( v9 )
{
do
{
v12 = *v8;
++v11;
++v8;
*v11 = v12;
}
while ( v12 );
}
if ( a2 )
*a2 = v11;
return v10;
}
//----- (00000001400169A0) ----------------------------------------------------
void __fastcall _freedtoa(__int64 a1)
{
*(_QWORD *)(a1 + 4) = _mm_unpacklo_epi32(
_mm_cvtsi32_si128(*(_DWORD *)(a1 - 4)),
_mm_cvtsi32_si128(1 << *(_DWORD *)(a1 - 4))).m128i_u64[0];
_Bfree_D2A((int *)(a1 - 4));
}
//----- (00000001400169D0) ----------------------------------------------------
__int64 __fastcall _quorem_D2A(__int64 a1, __int64 a2)
{
__int64 result; // rax
int v3; // edi
unsigned __int64 v6; // rbx
int v7; // edi
unsigned int *v8; // r12
__int64 v9; // r11
unsigned int *v10; // rbp
unsigned int *v11; // r11
unsigned int v12; // ecx
unsigned int v13; // esi
__int64 v14; // r15
unsigned int *v15; // r10
unsigned int *v16; // r9
unsigned __int64 v17; // rax
__int64 v18; // r8
__int64 v19; // rdx
unsigned __int64 v20; // rax
unsigned __int64 v21; // rcx
__int64 v22; // rcx
unsigned int *v23; // rcx
__int64 v24; // rdx
__int64 v25; // rax
__int64 v26; // rax
unsigned int *v27; // rax
int v28; // [rsp+2Ch] [rbp-4Ch]
result = 0;
v3 = *(_DWORD *)(a2 + 20);
if ( *(_DWORD *)(a1 + 20) >= v3 )
{
v6 = a2 + 24;
v7 = v3 - 1;
v8 = (unsigned int *)(a1 + 24);
v9 = 4LL * v7;
v10 = (unsigned int *)(a2 + 24 + v9);
v11 = (unsigned int *)(a1 + 24 + v9);
v12 = *v10 + 1;
v28 = *v11 / v12;
v13 = v28;
if ( *v11 < v12 )
goto LABEL_6;
v14 = *v11 / v12;
v15 = (unsigned int *)(a2 + 24);
v16 = v8;
v17 = 0;
v18 = 0;
do
{
v19 = *v15++;
++v16;
v20 = v17 + v14 * v19;
v21 = *(v16 - 1) - (unsigned __int64)(unsigned int)v20;
v17 = HIDWORD(v20);
v22 = v21 - v18;
*(v16 - 1) = v22;
v18 = BYTE4(v22) & 1;
}
while ( v10 >= v15 );
if ( *v11 )
{
LABEL_6:
if ( (int)_cmp_D2A(a1, a2) < 0 )
return v13;
}
else
{
while ( v8 < --v11 && !*v11 )
--v7;
*(_DWORD *)(a1 + 20) = v7;
if ( (int)_cmp_D2A(a1, a2) < 0 )
return v13;
}
v23 = v8;
v24 = 0;
do
{
v25 = *v23;
v6 += 4LL;
++v23;
v26 = v25 - *(unsigned int *)(v6 - 4) - v24;
*(v23 - 1) = v26;
v24 = BYTE4(v26) & 1;
}
while ( (unsigned __int64)v10 >= v6 );
v27 = &v8[v7];
if ( *v27 )
{
return (unsigned int)(v28 + 1);
}
else
{
while ( v8 < --v27 && !*v27 )
--v7;
*(_DWORD *)(a1 + 20) = v7;
return (unsigned int)(v28 + 1);
}
}
return result;
}
//----- (0000000140016B50) ----------------------------------------------------
char *__fastcall _gdtoa(int *a1, int a2, int *a3, _DWORD *a4, int a5, int a6, int *a7, char **a8)
{
int v8; // edi
int v9; // r15d
int v10; // r14d
_DWORD *v12; // rbx
int v13; // eax
int v14; // ebp
signed int v15; // ecx
int i; // eax
int *v17; // rsi
int *v18; // rax
_DWORD *v19; // rdx
__int64 v20; // r8
unsigned __int64 v21; // rcx
int v22; // r9d
__int64 v23; // rax
__int64 v24; // rax
signed int v25; // r13d
int *v26; // rax
signed int v27; // edx
unsigned int v28; // eax
int v29; // eax
double v30; // xmm0_8
int v31; // r8d
int v32; // ecx
unsigned int v33; // edx
unsigned int v34; // eax
int v35; // r9d
double v36; // xmm0_8
int v37; // r9d
double v38; // xmm0_8
int v39; // r9d
char *v40; // r12
int v42; // eax
int v43; // ecx
int v44; // eax
char *v45; // rax
int v46; // r9d
double v47; // r10
int v48; // eax
double v49; // xmm0_8
double v50; // rdx
double v51; // rax
int v52; // r11d
int v53; // edi
double *v54; // rcx
double v55; // xmm2_8
double v56; // xmm3_8
char *v57; // rax
double v58; // xmm1_8
double v59; // xmm0_8
double v60; // xmm0_8
char v61; // dl
char *v62; // rcx
char *v63; // rax
char v64; // dl
char *v65; // rax
double v66; // xmm2_8
int *v67; // r11
int *v68; // rdi
double v69; // rdx
int v70; // ebp
int v71; // edx
int v72; // eax
int v73; // ebp
int *v74; // rax
int v75; // eax
int *v76; // rax
int *v77; // rax
int v78; // r9d
char v79; // bp
int v80; // ebp
int v81; // edx
int *v82; // rax
int v83; // edx
int v84; // eax
double v85; // xmm0_8
double v86; // xmm4_8
double v87; // xmm1_8
bool v88; // r10
int v89; // edx
int *v90; // rax
int *v91; // r12
int v92; // eax
int *v93; // r15
char *j; // rbx
int v95; // edx
char *v96; // rbp
char *v97; // r14
int v98; // eax
int v99; // r13d
char v100; // r14
int v101; // ebp
int *v102; // rax
char *v103; // r10
int *v104; // r11
int *v105; // r15
int v106; // eax
int *v107; // rax
bool v108; // r12
int v109; // eax
__int64 v110; // rbp
int v111; // eax
int *v112; // rax
unsigned int v113; // ebp
int v114; // eax
int v115; // ecx
double v116; // xmm0_8
double v117; // xmm0_8
char *v118; // rdx
char v119; // al
int v120; // edi
bool v121; // zf
int v122; // eax
char *v123; // rbp
int *v124; // rax
int *v125; // r14
double v126; // rdx
int *v127; // rbp
int *v128; // rax
int v129; // eax
double v130; // xmm0_8
char *v131; // rdx
int *v132; // rax
int *v134; // [rsp+30h] [rbp-C8h]
int v135; // [rsp+30h] [rbp-C8h]
__int64 v136; // [rsp+30h] [rbp-C8h]
__int64 v137; // [rsp+30h] [rbp-C8h]
int v139; // [rsp+38h] [rbp-C0h]
int *v140; // [rsp+38h] [rbp-C0h]
__int64 v141; // [rsp+38h] [rbp-C0h]
int *v142; // [rsp+38h] [rbp-C0h]
int *v143; // [rsp+38h] [rbp-C0h]
char *v144; // [rsp+38h] [rbp-C0h]
int v145; // [rsp+44h] [rbp-B4h]
int v146; // [rsp+48h] [rbp-B0h]
int v147; // [rsp+48h] [rbp-B0h]
int v148; // [rsp+4Ch] [rbp-ACh]
int v149; // [rsp+4Ch] [rbp-ACh]
int v150; // [rsp+50h] [rbp-A8h]
int v151; // [rsp+50h] [rbp-A8h]
int v152; // [rsp+50h] [rbp-A8h]
int v153; // [rsp+50h] [rbp-A8h]
int v154; // [rsp+50h] [rbp-A8h]
int *v155; // [rsp+50h] [rbp-A8h]
int *v156; // [rsp+50h] [rbp-A8h]
char *v157; // [rsp+58h] [rbp-A0h]
int v158; // [rsp+60h] [rbp-98h]
int *v159; // [rsp+60h] [rbp-98h]
int v160; // [rsp+68h] [rbp-90h]
_DWORD *v161; // [rsp+68h] [rbp-90h]
int v162; // [rsp+70h] [rbp-88h]
int v163; // [rsp+78h] [rbp-80h]
int v164; // [rsp+7Ch] [rbp-7Ch]
int v165; // [rsp+80h] [rbp-78h]
int v166; // [rsp+84h] [rbp-74h]
int v167; // [rsp+84h] [rbp-74h]
int v168; // [rsp+88h] [rbp-70h]
double v169; // [rsp+90h] [rbp-68h]
bool v170; // [rsp+98h] [rbp-60h]
int v171; // [rsp+9Ch] [rbp-5Ch]
int v172[19]; // [rsp+ACh] [rbp-4Ch] BYREF
v8 = *a4;
v9 = a5;
v10 = a6;
v12 = a4;
*a4 &= 0xFFFFFFCF;
v13 = v8 & 7;
if ( v13 != 3 )
{
v145 = v8 & 4;
if ( (v8 & 4) != 0 )
{
v40 = 0;
if ( v13 == 4 )
{
*a7 = -32768;
return _nrv_alloc_D2A("NaN", a8, 3);
}
return v40;
}
if ( (v8 & 7) != 0 )
{
v14 = *a1;
v15 = 0;
for ( i = 32; v14 > i; ++v15 )
i *= 2;
v17 = (int *)_Balloc_D2A(v15);
v18 = a3;
v19 = v17 + 6;
v20 = (v14 - 1) >> 5;
v21 = (unsigned __int64)&a3[v20];
do
{
v22 = *v18++;
*v19++ = v22;
}
while ( v21 >= (unsigned __int64)v18 );
v23 = 4 * v20 + 4;
if ( v21 + 1 < (unsigned __int64)a3 + 1 )
v23 = 4;
v24 = v23 >> 2;
v25 = v24;
v26 = &v17[v24];
do
{
v27 = v25--;
if ( v26[5] )
{
v17[5] = v27;
_BitScanReverse(&v28, v17[v25 + 6]);
v25 = 32 * v27 - (v28 ^ 0x1F);
goto LABEL_14;
}
--v26;
}
while ( v25 );
v17[5] = 0;
LABEL_14:
v29 = _trailz_D2A((__int64)v17);
v172[0] = v29;
v150 = a2;
if ( v29 )
{
_rshift_D2A((__int64)v17, v29);
v25 -= v172[0];
v150 = v172[0] + a2;
}
if ( v17[5] )
{
v30 = _b2d_D2A((__int64)v17, v172);
v31 = v150 + v25;
v32 = v150 + v25 - 1;
v33 = HIDWORD(v30) & 0xFFFFF | 0x3FF00000;
v34 = LODWORD(v30);
v35 = 1 - (v150 + v25);
*(_QWORD *)&v36 = ((unsigned __int64)v33 << 32) | LODWORD(v30);
if ( v32 >= 0 )
v35 = v150 + v25 - 1;
v37 = v35 - 1077;
v38 = (v36 - 1.5) * 0.289529654602168 + 0.1760912590558 + (double)v32 * 0.301029995663981;
if ( v37 > 0 )
v38 = v38 + (double)v37 * 7.0e-17;
v148 = (int)v38;
if ( v38 < 0.0 && (double)(int)v38 != v38 )
--v148;
*(_QWORD *)&v169 = ((unsigned __int64)((v32 << 20) + v33) << 32) | v34;
v39 = -v150;
if ( (unsigned int)v148 > 0x16 )
{
v165 = 1;
}
else
{
if ( *((double *)refptr___tens_D2A + v148) <= COERCE_DOUBLE(((unsigned __int64)((v32 << 20) + v33) << 32) | v34) )
{
v158 = 0;
v165 = 0;
if ( 1 - v150 <= 0 )
{
v39 = 0;
v158 = v150;
}
goto LABEL_26;
}
--v148;
v165 = 0;
}
v158 = 0;
if ( v150 > 0 )
{
v39 = 0;
v158 = v150;
}
if ( v148 < 0 )
{
v42 = v148;
v148 = 0;
v158 -= v42;
v160 = v42;
v164 = -v42;
LABEL_39:
if ( (unsigned int)a5 > 9 )
{
v9 = 0;
v170 = (unsigned int)(v31 + 1021) <= 0x7F7;
goto LABEL_73;
}
if ( a5 > 5 )
{
v170 = 0;
v9 = a5 - 4;
if ( a5 != 8 )
{
if ( a5 != 9 )
{
v162 = 0;
if ( a5 == 6 )
goto LABEL_45;
v9 = 3;
LABEL_81:
v171 = a6 + v160;
v44 = 1;
v146 = a6 + v160 + 1;
if ( v146 > 0 )
v44 = a6 + v160 + 1;
v43 = v44;
LABEL_48:
v166 = v39;
v172[0] = v44;
v45 = _rv_alloc_D2A(v43);
v46 = v166;
v157 = v45;
v47 = v169;
v163 = a1[3] - 1;
if ( a1[3] == 1 )
goto LABEL_53;
goto LABEL_49;
}
goto LABEL_197;
}
}
else
{
v170 = (unsigned int)(v31 + 1021) <= 0x7F7;
if ( a5 != 4 )
{
if ( a5 != 5 )
{
if ( a5 == 2 )
{
v162 = 0;
LABEL_45:
v43 = 1;
if ( a6 > 0 )
v43 = a6;
v44 = v43;
v171 = v43;
v10 = v43;
v146 = v43;
goto LABEL_48;
}
if ( a5 == 3 )
{
v162 = 0;
goto LABEL_81;
}
LABEL_73:
v147 = v39;
v172[0] = (int)((double)v14 * 0.30103) + 3;
v65 = _rv_alloc_D2A(v172[0]);
v46 = v147;
v157 = v65;
v47 = v169;
v163 = a1[3] - 1;
if ( a1[3] == 1 )
{
v10 = 0;
v146 = -1;
if ( v150 < 0 )
{
v171 = -1;
LABEL_106:
v70 = v14 - v25;
v71 = a1[1];
v72 = v70 + 1;
v172[0] = v70 + 1;
if ( v150 - v70 >= v71 )
{
if ( v9 <= 1 )
{
LABEL_110:
v46 += v72;
v73 = v164;
v167 = v158;
v158 += v72;
LABEL_111:
v152 = v46;
v74 = _i2b_D2A(1);
v46 = v152;
v162 = 1;
v68 = v74;
LABEL_112:
if ( v167 > 0 && v46 > 0 )
{
v75 = v167;
if ( v167 > v46 )
v75 = v46;
v158 -= v75;
v172[0] = v75;
v46 -= v75;
v167 -= v75;
}
if ( v164 )
{
if ( !v162 )
goto LABEL_120;
if ( !v73 )
goto LABEL_120;
v168 = v46;
v68 = _pow5mult_D2A(v68, v73);
v156 = (int *)_mult_D2A(v68, v17);
_Bfree_D2A(v17);
v17 = v156;
v121 = v164 == v73;
v164 -= v73;
v46 = v168;
if ( !v121 )
{
LABEL_120:
v153 = v46;
v76 = _pow5mult_D2A(v17, v164);
v46 = v153;
v17 = v76;
}
}
v154 = v46;
v77 = _i2b_D2A(1);
v78 = v154;
v67 = v77;
if ( v148 )
{
v112 = _pow5mult_D2A(v77, v148);
v78 = v154;
v67 = v112;
if ( v9 <= 1 && v25 == 1 && a2 > a1[1] + 1 )
{
++v158;
v78 = v154 + 1;
v148 = 1;
}
else
{
v148 = 0;
}
_BitScanReverse(&v113, v112[v112[5] + 5]);
v79 = v113 ^ 0x1F;
}
else
{
if ( v9 <= 1 && v25 == 1 && a2 > a1[1] + 1 )
{
++v158;
v78 = v154 + 1;
v148 = 1;
}
v79 = 31;
}
v80 = (v79 - (_BYTE)v78 - 4) & 0x1F;
v172[0] = v80;
v81 = v80;
if ( v80 + v158 > 0 )
{
v155 = v67;
v139 = v78;
v82 = (int *)_lshift_D2A(v17, v80 + v158);
v81 = v172[0];
v67 = v155;
v17 = v82;
v78 = v139;
}
v83 = v78 + v81;
if ( v83 > 0 )
v67 = (int *)_lshift_D2A(v67, v83);
if ( v165 && (v142 = v67, v106 = _cmp_D2A((__int64)v17, (__int64)v67), v67 = v142, v106 < 0) )
{
v107 = _multadd_D2A(v17, 10, 0);
v67 = v142;
v17 = v107;
v108 = v171 <= 0 && v9 > 2;
if ( !v162 )
{
if ( !v108 )
{
v151 = v160;
v146 = v171;
LABEL_183:
v97 = v157;
v109 = 1;
v110 = (__int64)v67;
while ( 1 )
{
v172[0] = v109;
++v97;
LOBYTE(v99) = _quorem_D2A((__int64)v17, v110) + 48;
*(v97 - 1) = v99;
if ( v172[0] >= v146 )
break;
v17 = _multadd_D2A(v17, 10, 0);
v109 = v172[0] + 1;
}
v104 = (int *)v110;
v105 = 0;
LABEL_187:
if ( v163 )
{
if ( v163 != 2 )
{
if ( v17[5] <= 1 )
{
v111 = v17[6];
if ( !v111 )
goto LABEL_191;
}
LABEL_214:
v118 = v157;
goto LABEL_216;
}
}
else
{
v136 = (__int64)v104;
v17 = (int *)_lshift_D2A(v17, 1);
v122 = _cmp_D2A((__int64)v17, v136);
v104 = (int *)v136;
if ( v122 > 0 || !v122 && (v99 & 1) != 0 )
goto LABEL_214;
}
v145 = 16;
if ( v17[5] > 1 )
{
do
LABEL_192:
v96 = v97--;
while ( *v97 == 48 );
goto LABEL_173;
}
v111 = v17[6];
LABEL_191:
v145 = 16 * (v111 != 0);
goto LABEL_192;
}
goto LABEL_261;
}
v132 = _multadd_D2A(v68, 10, 0);
v67 = v142;
v68 = v132;
if ( v108 )
{
LABEL_261:
--v160;
v146 = v171;
goto LABEL_131;
}
v151 = v160;
v146 = v171;
}
else
{
if ( v146 <= 0 && v9 > 2 )
{
LABEL_131:
if ( !v146 )
{
v134 = _multadd_D2A(v67, 5, 0);
v84 = _cmp_D2A((__int64)v17, (__int64)v134);
v67 = v134;
if ( v84 > 0 )
{
v40 = v157;
v151 = v160 + 2;
goto LABEL_94;
}
}
LABEL_137:
v40 = v157;
v145 = 16;
v151 = -v10;
LABEL_95:
_Bfree_D2A(v67);
if ( !v68 )
{
LABEL_97:
_Bfree_D2A(v17);
*v157 = 0;
*a7 = v151;
if ( a8 )
*a8 = v157;
*v12 |= v145;
return v40;
}
LABEL_96:
_Bfree_D2A(v68);
goto LABEL_97;
}
v151 = v160 + 1;
if ( !v162 )
goto LABEL_183;
}
if ( v80 + v167 > 0 )
{
v140 = v67;
v90 = (int *)_lshift_D2A(v68, v80 + v167);
v67 = v140;
v68 = v90;
}
v91 = v68;
if ( v148 )
{
v143 = v67;
v127 = (int *)_Balloc_D2A(v68[2]);
memcpy_0(v127 + 4, v68 + 4, 4LL * v68[5] + 8);
v128 = (int *)_lshift_D2A(v127, 1);
v67 = v143;
v91 = v128;
}
v161 = v12;
v92 = 1;
v149 = v9;
v93 = a3;
v141 = (__int64)v67;
for ( j = v157; ; ++j )
{
v172[0] = v92;
v98 = _quorem_D2A((__int64)v17, v141);
v99 = v98 + 48;
v100 = v98;
v101 = _cmp_D2A((__int64)v17, (__int64)v68);
v102 = (int *)_diff_D2A(v141, (__int64)v91);
if ( v102[4] )
{
_Bfree_D2A(v102);
v95 = 1;
}
else
{
v159 = v102;
v135 = _cmp_D2A((__int64)v17, (__int64)v102);
_Bfree_D2A(v159);
v95 = v149 | v135;
if ( v149 | v135 )
{
v95 = v135;
}
else if ( !(v163 | *v93 & 1) )
{
v103 = j;
v104 = (int *)v141;
v12 = v161;
if ( v99 == 57 )
goto LABEL_258;
if ( v101 <= 0 )
{
v145 = 16;
if ( v17[5] <= 1 )
v145 = 16 * (v17[6] != 0);
}
else
{
LOBYTE(v99) = v100 + 49;
v145 = 32;
}
v96 = v103 + 1;
v105 = v68;
*v103 = v99;
v68 = v91;
goto LABEL_173;
}
}
if ( v101 < 0 || !(v149 | v101) && (*(_BYTE *)v93 & 1) == 0 )
break;
v96 = j + 1;
v97 = j + 1;
if ( v95 > 0 && v163 != 2 )
{
v103 = j;
v104 = (int *)v141;
v12 = v161;
if ( v99 == 57 )
goto LABEL_259;
v105 = v68;
v145 = 32;
v68 = v91;
*v103 = v99 + 1;
goto LABEL_173;
}
*j = v99;
if ( v172[0] == v146 )
{
v105 = v68;
v104 = (int *)v141;
v68 = v91;
v12 = v161;
goto LABEL_187;
}
v17 = _multadd_D2A(v17, 10, 0);
if ( v68 == v91 )
{
v68 = _multadd_D2A(v68, 10, 0);
v91 = v68;
}
else
{
v68 = _multadd_D2A(v68, 10, 0);
v91 = _multadd_D2A(v91, 10, 0);
}
v92 = v172[0] + 1;
}
v103 = j;
v104 = (int *)v141;
v12 = v161;
if ( v163 )
{
if ( v17[5] <= 1 && !v17[6] )
{
if ( v95 <= 0 )
{
v96 = v103 + 1;
v105 = v68;
v68 = v91;
goto LABEL_242;
}
LABEL_252:
v137 = v141;
v144 = v103;
v17 = (int *)_lshift_D2A(v17, 1);
v129 = _cmp_D2A((__int64)v17, v137);
v104 = (int *)v137;
v103 = v144;
if ( v129 <= 0 && (v129 || (v99 & 1) == 0) )
{
v163 = 32;
goto LABEL_255;
}
if ( v99 != 57 )
{
LOBYTE(v99) = v100 + 49;
v163 = 32;
goto LABEL_255;
}
LABEL_258:
v96 = v103 + 1;
LABEL_259:
v105 = v68;
v118 = v157;
v97 = v96;
*v103 = 57;
v68 = v91;
do
{
LABEL_216:
v96 = v97;
v119 = *--v97;
if ( v119 != 57 )
{
v145 = 32;
*v97 = v119 + 1;
goto LABEL_173;
}
}
while ( v118 != v97 );
v145 = 32;
++v151;
*v157 = 49;
LABEL_173:
_Bfree_D2A(v104);
if ( !v68 )
{
v40 = v157;
v157 = v96;
goto LABEL_97;
}
if ( v105 && v105 != v68 )
_Bfree_D2A(v105);
v40 = v157;
v157 = v96;
goto LABEL_96;
}
if ( v163 != 2 )
{
v123 = v103;
while ( (int)_cmp_D2A(v141, (__int64)v91) > 0 )
{
*v123 = v99;
v124 = _multadd_D2A(v91, 10, 0);
if ( v68 == v91 )
v68 = v124;
v125 = v124;
++v123;
v17 = _multadd_D2A(v17, 10, 0);
v91 = v125;
v99 = _quorem_D2A((__int64)v17, v141) + 48;
}
v103 = v123;
v104 = (int *)v141;
v96 = v123 + 1;
v12 = v161;
if ( v99 != 57 )
{
v105 = v68;
LOBYTE(v99) = v99 + 1;
v68 = v91;
v145 = 32;
goto LABEL_242;
}
goto LABEL_259;
}
}
else
{
if ( v95 > 0 )
goto LABEL_252;
LABEL_255:
if ( v17[5] <= 1 )
{
v105 = v68;
v68 = v91;
if ( !v17[6] )
{
v96 = v103 + 1;
v145 = v163;
LABEL_242:
*v103 = v99;
goto LABEL_173;
}
LABEL_257:
v145 = 16;
v96 = v103 + 1;
goto LABEL_242;
}
}
v105 = v68;
v68 = v91;
goto LABEL_257;
}
}
else if ( ((v9 - 3) & 0xFFFFFFFD) != 0 )
{
v72 = v150 - v71 + 1;
v172[0] = v72;
if ( v146 <= 0 || v9 <= 1 || v72 <= v146 )
goto LABEL_110;
v114 = v146 - 1;
if ( v164 >= v146 - 1 )
{
v46 += v146;
v172[0] = v146;
v73 = v164 - v114;
v167 = v158;
v158 += v146;
goto LABEL_111;
}
LABEL_219:
v120 = v164;
v73 = 0;
v164 = v114;
v148 += v114 - v120;
v167 = v158;
v172[0] = v146;
v46 += v146;
v158 += v146;
goto LABEL_111;
}
v114 = v146 - 1;
if ( v164 >= v146 - 1 )
{
v73 = v164 - v114;
if ( v146 >= 0 )
{
v172[0] = v146;
v46 += v146;
v167 = v158;
v158 += v146;
}
else
{
v172[0] = 0;
v167 = v158 - v146;
}
goto LABEL_111;
}
goto LABEL_219;
}
v162 = 1;
v171 = -1;
LABEL_87:
if ( v160 > a1[5] )
goto LABEL_105;
v54 = (double *)refptr___tens_D2A;
goto LABEL_89;
}
v10 = 0;
v162 = 1;
v171 = -1;
v146 = -1;
LABEL_49:
v48 = 2;
if ( v163 >= 0 )
v48 = v163;
v163 = v48;
if ( (v8 & 8) == 0 )
goto LABEL_104;
v163 = 3 - v48;
LABEL_53:
if ( v170 && (unsigned int)v146 <= 0xE && !(v163 | v160) )
{
v172[0] = 0;
v49 = v169;
if ( v165 && v169 < 1.0 )
{
if ( v146 )
{
v52 = v171;
if ( v171 > 0 )
{
v49 = v169 * 10.0;
v53 = -1;
v47 = v169 * 10.0;
v126 = 3.0 * (v169 * 10.0) + 7.0;
*(_QWORD *)&v51 = ((unsigned __int64)(unsigned int)(HIDWORD(v126) - 54525952) << 32)
| LODWORD(v126);
goto LABEL_59;
}
LABEL_103:
v163 = 0;
goto LABEL_104;
}
v69 = v169 + v169 + 7.0;
*(_QWORD *)&v51 = ((unsigned __int64)(unsigned int)(HIDWORD(v69) - 54525952) << 32) | LODWORD(v69);
}
else
{
v50 = v169 + v169 + 7.0;
*(_QWORD *)&v51 = ((unsigned __int64)(unsigned int)(HIDWORD(v50) - 54525952) << 32) | LODWORD(v50);
if ( v146 )
{
v52 = v146;
v53 = 0;
LABEL_59:
v54 = (double *)refptr___tens_D2A;
v55 = v51;
v56 = *((double *)refptr___tens_D2A + v52 - 1);
if ( !v162 )
{
v85 = v47;
v63 = v157;
v172[0] = 1;
v86 = v55 * v56;
v87 = v47;
v88 = 0;
while ( 1 )
{
v89 = (int)v87;
if ( (int)v87 )
{
v88 = v170 && (unsigned int)v146 <= 0xE;
v87 = v87 - (double)v89;
}
++v63;
v61 = v89 + 48;
*(v63 - 1) = v61;
if ( v172[0] == v52 )
break;
v87 = v87 * 10.0;
v88 = v170 && (unsigned int)v146 <= 0xE;
++v172[0];
}
if ( !v88 )
v87 = v85;
if ( v87 > v86 + 0.5 )
{
v40 = v157;
v62 = v63;
goto LABEL_69;
}
if ( 0.5 - v86 > v87 )
{
v40 = v157;
v145 = 16 * (v87 != 0.0);
goto LABEL_266;
}
if ( v150 < 0 )
{
v163 = 0;
v68 = 0;
v73 = v164;
v167 = v158;
goto LABEL_112;
}
v163 = 0;
if ( a1[5] < 0 )
goto LABEL_149;
LABEL_89:
v66 = v54[v160];
if ( v10 < 0 && v146 <= 0 )
{
if ( !v146 && v66 * 5.0 < v169 )
{
v40 = v157;
v67 = 0;
v151 = v160 + 2;
v68 = 0;
LABEL_94:
++v157;
*v40 = 49;
v145 = 32;
goto LABEL_95;
}
goto LABEL_136;
}
v172[0] = 1;
v63 = v157 + 1;
v115 = (int)(v169 / v66);
*v157 = v115 + 48;
v151 = v160 + 1;
v116 = v169 - (double)v115 * v66;
if ( v116 == 0.0 )
{
LABEL_226:
v40 = v157;
v157 = v63;
goto LABEL_97;
}
while ( v172[0] != v146 )
{
v117 = v116 * 10.0;
++v63;
++v172[0];
v115 = (int)(v117 / v66);
*(v63 - 1) = v115 + 48;
v116 = v117 - (double)v115 * v66;
if ( v116 == 0.0 )
goto LABEL_226;
}
if ( v163 )
{
if ( v163 == 1 )
{
v61 = *(v63 - 1);
v62 = v63;
v40 = v157;
v53 = v160;
goto LABEL_69;
}
v40 = v157;
v145 = 16;
v157 = v63;
goto LABEL_97;
}
v130 = v116 + v116;
v61 = *(v63 - 1);
if ( v130 > v66 )
{
v40 = v157;
v62 = v63;
v53 = v160;
while ( 1 )
{
LABEL_69:
v63 = v62 - 1;
if ( v61 != 57 )
{
v157 = v62;
v64 = v61 + 1;
goto LABEL_71;
}
if ( v40 == v63 )
break;
v61 = *(v62 - 2);
LABEL_68:
v62 = v63;
}
v157 = v62;
++v53;
v64 = 49;
LABEL_71:
*v63 = v64;
v151 = v53 + 1;
v145 = 32;
goto LABEL_97;
}
v40 = v157;
v53 = v160;
if ( v130 == v66 && (v115 & 1) != 0 )
goto LABEL_68;
v145 = 16;
do
{
LABEL_266:
v131 = v63;
v121 = *--v63 == 48;
}
while ( v121 );
v157 = v131;
v151 = v53 + 1;
goto LABEL_97;
}
v57 = v157 + 1;
v58 = 0.5 / v56 - v55;
*v157 = (int)v49 + 48;
v59 = v49 - (double)(int)v49;
if ( v58 > v59 )
{
LABEL_268:
v40 = v157;
v157 = v57;
v151 = v53 + 1;
v145 = 16 * (v59 != 0.0);
goto LABEL_97;
}
while ( 1 )
{
if ( v58 > 1.0 - v59 )
{
v61 = *(v57 - 1);
v62 = v57;
v40 = v157;
goto LABEL_69;
}
if ( ++v172[0] >= v52 )
goto LABEL_103;
v60 = v59 * 10.0;
++v57;
v58 = v58 * 10.0;
*(v57 - 1) = (int)v60 + 48;
v59 = v60 - (double)(int)v60;
if ( v58 > v59 )
goto LABEL_268;
}
}
}
if ( v169 - 5.0 > v51 )
{
v40 = v157;
v151 = 2;
v67 = 0;
v68 = 0;
goto LABEL_94;
}
if ( -v51 > v169 - 5.0 )
{
LABEL_136:
v67 = 0;
v68 = 0;
goto LABEL_137;
}
goto LABEL_103;
}
LABEL_104:
if ( v150 < 0 )
{
LABEL_105:
if ( v162 )
goto LABEL_106;
LABEL_149:
v68 = 0;
v73 = v164;
v167 = v158;
goto LABEL_112;
}
goto LABEL_87;
}
LABEL_197:
v162 = 1;
goto LABEL_81;
}
}
v162 = 1;
goto LABEL_45;
}
LABEL_26:
v164 = 0;
v39 += v148;
v160 = v148;
goto LABEL_39;
}
_Bfree_D2A(v17);
}
*a7 = 1;
return _nrv_alloc_D2A("0", a8, 1);
}
*a7 = -32768;
return _nrv_alloc_D2A("Infinity", a8, 8);
}
// 140022640: using guessed type _UNKNOWN *refptr___tens_D2A;
//----- (00000001400182C0) ----------------------------------------------------
void __fastcall _rshift_D2A(__int64 a1, int a2)
{
__int64 v2; // rbx
int v3; // ebp
__int64 v4; // r12
int v5; // edx
unsigned __int64 v6; // r11
_DWORD *v7; // rsi
int *v8; // r8
int v9; // r9d
__int64 v10; // rsi
int v11; // eax
_DWORD *v12; // rax
_DWORD *v13; // rdi
__int64 v14; // rax
v2 = *(int *)(a1 + 20);
v3 = a2 >> 5;
if ( (int)v2 <= a2 >> 5 )
goto LABEL_2;
v4 = a1 + 24;
v5 = a2 & 0x1F;
v6 = a1 + 24 + 4 * v2;
v7 = (_DWORD *)(a1 + 24 + 4LL * v3);
if ( !v5 )
{
v13 = (_DWORD *)(a1 + 24);
if ( (unsigned __int64)v7 < v6 )
{
do
*v13++ = *v7++;
while ( (unsigned __int64)v7 < v6 );
v12 = (_DWORD *)(v4 + 4 * (v2 - v3));
goto LABEL_13;
}
LABEL_2:
*(_DWORD *)(a1 + 20) = 0;
LABEL_3:
*(_DWORD *)(a1 + 24) = 0;
return;
}
v8 = v7 + 1;
v9 = *v7 >> v5;
if ( (unsigned __int64)(v7 + 1) >= v6 )
{
*(_DWORD *)(a1 + 24) = v9;
if ( v9 )
{
v12 = (_DWORD *)(a1 + 24);
LABEL_9:
++v12;
goto LABEL_13;
}
goto LABEL_2;
}
v10 = a1 + 24;
do
{
v11 = *v8;
v10 += 4;
++v8;
*(_DWORD *)(v10 - 4) = v9 | (v11 << (32 - v5));
v9 = (unsigned int)*(v8 - 1) >> v5;
}
while ( (unsigned __int64)v8 < v6 );
v12 = (_DWORD *)(v4 + 4 * (v2 - v3) - 4);
*v12 = v9;
if ( v9 )
goto LABEL_9;
LABEL_13:
v14 = ((__int64)v12 - v4) >> 2;
*(_DWORD *)(a1 + 20) = v14;
if ( !(_DWORD)v14 )
goto LABEL_3;
}
//----- (00000001400183C0) ----------------------------------------------------
__int64 __fastcall _trailz_D2A(__int64 a1)
{
unsigned int *v1; // rax
unsigned __int64 v2; // rcx
unsigned int v3; // edx
v1 = (unsigned int *)(a1 + 24);
v2 = a1 + 24 + 4LL * *(int *)(a1 + 20);
v3 = 0;
if ( (unsigned __int64)v1 < v2 )
{
while ( !*v1 )
{
++v1;
v3 += 32;
if ( (unsigned __int64)v1 >= v2 )
return v3;
}
if ( (unsigned __int64)v1 < v2 )
{
_BitScanForward((unsigned int *)&v1, *v1);
v3 += (unsigned int)v1;
}
}
return v3;
}
//----- (0000000140018400) ----------------------------------------------------
void __fastcall dtoa_lock(int a1)
{
int v2; // eax
__int32 v3; // eax
if ( dtoa_CS_init == 2 )
goto LABEL_10;
if ( !dtoa_CS_init )
{
v3 = _InterlockedExchange(&dtoa_CS_init, 1);
if ( v3 )
{
if ( v3 != 2 )
{
v2 = dtoa_CS_init;
if ( dtoa_CS_init != 1 )
goto LABEL_5;
goto LABEL_4;
}
}
else
{
InitializeCriticalSection(&dtoa_CritSec);
InitializeCriticalSection(&CriticalSection);
atexit(dtoa_lock_cleanup);
}
dtoa_CS_init = 2;
LABEL_10:
EnterCriticalSection(&dtoa_CritSec + a1);
return;
}
if ( dtoa_CS_init != 1 )
return;
do
{
LABEL_4:
Sleep(1u);
v2 = dtoa_CS_init;
}
while ( dtoa_CS_init == 1 );
LABEL_5:
if ( v2 == 2 )
goto LABEL_10;
}
// 140027C70: using guessed type int dtoa_CS_init;
//----- (00000001400184E0) ----------------------------------------------------
void __fastcall dtoa_lock_cleanup()
{
if ( _InterlockedExchange(&dtoa_CS_init, 3) == 2 )
{
DeleteCriticalSection(&dtoa_CritSec);
DeleteCriticalSection(&CriticalSection);
}
}
// 140027C70: using guessed type int dtoa_CS_init;
//----- (0000000140018530) ----------------------------------------------------
_QWORD *__fastcall _Balloc_D2A(signed int a1)
{
_QWORD *result; // rax
bool v3; // zf
unsigned int v4; // esi
unsigned __int64 v5; // rcx
_QWORD *v6; // [rsp+28h] [rbp-20h]
dtoa_lock(0);
if ( a1 > 9 )
{
v4 = 1 << a1;
v5 = (unsigned int)((unsigned __int64)(4LL * (1 << a1) + 35) >> 3);
goto LABEL_6;
}
result = (_QWORD *)freelist[a1];
if ( !result )
{
v4 = 1 << a1;
result = pmem_next;
v5 = (unsigned __int64)(4LL * ((1 << a1) + 9) - 1) >> 3;
if ( v5 + ((pmem_next - &private_mem) >> 3) <= 0x120 )
{
pmem_next = (_UNKNOWN *)((char *)pmem_next + 8 * v5);
goto LABEL_7;
}
LABEL_6:
result = malloc_0(8 * v5);
if ( !result )
return result;
LABEL_7:
v3 = dtoa_CS_init == 2;
result[1] = _mm_unpacklo_epi32(_mm_cvtsi32_si128(a1), _mm_cvtsi32_si128(v4)).m128i_u64[0];
if ( !v3 )
goto LABEL_8;
goto LABEL_4;
}
v3 = dtoa_CS_init == 2;
freelist[a1] = *result;
if ( v3 )
{
LABEL_4:
v6 = result;
LeaveCriticalSection(&dtoa_CritSec);
result = v6;
}
LABEL_8:
result[2] = 0;
return result;
}
// 14001F390: using guessed type _UNKNOWN *pmem_next;
// 140027C20: using guessed type _QWORD freelist[1];
// 140027C70: using guessed type int dtoa_CS_init;
//----- (0000000140018630) ----------------------------------------------------
void __fastcall _Bfree_D2A(int *a1)
{
__int64 v2; // rdx
bool v3; // zf
__int64 v4; // rcx
if ( a1 )
{
if ( a1[2] <= 9 )
{
dtoa_lock(0);
v2 = a1[2];
v3 = dtoa_CS_init == 2;
v4 = freelist[v2];
freelist[v2] = a1;
*(_QWORD *)a1 = v4;
if ( v3 )
LeaveCriticalSection(&dtoa_CritSec);
}
else
{
free(a1);
}
}
}
// 140027C20: using guessed type _QWORD freelist[1];
// 140027C70: using guessed type int dtoa_CS_init;
//----- (00000001400186A0) ----------------------------------------------------
int *__fastcall _multadd_D2A(int *a1, int a2, int a3)
{
int v3; // edi
unsigned __int64 v5; // rsi
__int64 v6; // rcx
unsigned __int64 v7; // rax
int *v8; // rbp
int *v10; // rax
v3 = a1[5];
v5 = a3;
v6 = 0;
do
{
v7 = v5 + a2 * (unsigned __int64)(unsigned int)a1[v6 + 6];
a1[v6++ + 6] = v7;
v5 = HIDWORD(v7);
}
while ( v3 > (int)v6 );
v8 = a1;
if ( v5 )
{
if ( a1[3] <= v3 )
{
v10 = (int *)_Balloc_D2A(a1[2] + 1);
v8 = v10;
if ( v10 )
{
memcpy_0(v10 + 4, a1 + 4, 4LL * a1[5] + 8);
_Bfree_D2A(a1);
v8[v3 + 6] = v5;
v8[5] = v3 + 1;
}
}
else
{
v8 = a1;
a1[v3 + 6] = HIDWORD(v7);
a1[5] = v3 + 1;
}
}
return v8;
}
//----- (0000000140018760) ----------------------------------------------------
_DWORD *__fastcall _i2b_D2A(int a1)
{
_DWORD *result; // rax
bool v3; // zf
_DWORD *v4; // [rsp+28h] [rbp-10h]
dtoa_lock(0);
result = (_DWORD *)qword_140027C28;
if ( qword_140027C28 )
{
qword_140027C28 = *(_QWORD *)qword_140027C28;
if ( dtoa_CS_init != 2 )
{
LABEL_3:
result[6] = a1;
*((_QWORD *)result + 2) = 0x100000000LL;
return result;
}
LABEL_8:
v4 = result;
LeaveCriticalSection(&dtoa_CritSec);
result = v4;
goto LABEL_3;
}
result = pmem_next;
if ( (unsigned __int64)(((pmem_next - &private_mem) >> 3) + 5) <= 0x120 )
{
pmem_next = (_UNKNOWN *)((char *)pmem_next + 40);
LABEL_7:
v3 = dtoa_CS_init == 2;
*((_QWORD *)result + 1) = 0x200000001LL;
if ( !v3 )
goto LABEL_3;
goto LABEL_8;
}
result = malloc_0(0x28u);
if ( result )
goto LABEL_7;
return result;
}
// 14001F390: using guessed type _UNKNOWN *pmem_next;
// 140027C28: using guessed type __int64 qword_140027C28;
// 140027C70: using guessed type int dtoa_CS_init;
//----- (0000000140018820) ----------------------------------------------------
_QWORD *__fastcall _mult_D2A(_DWORD *a1, _DWORD *a2)
{
__int64 v2; // r13
__int64 v3; // rbp
_DWORD *v4; // r12
_DWORD *v5; // r15
int v6; // ebx
signed int v7; // ecx
_QWORD *v8; // rax
_QWORD *v9; // rdi
char *v10; // r11
unsigned __int64 v11; // rsi
unsigned int *v12; // r9
unsigned __int64 v13; // r12
unsigned __int64 v14; // rbp
unsigned __int64 v15; // r13
__int64 v16; // r10
char *v17; // rcx
unsigned int *v18; // rdx
unsigned __int64 v19; // r8
__int64 v20; // rax
unsigned __int64 v21; // rax
int v22; // eax
v2 = (int)a1[5];
v3 = (int)a2[5];
v4 = a1;
v5 = a2;
if ( (int)v2 >= (int)v3 )
{
v5 = a1;
v3 = (int)v2;
v4 = a2;
v2 = (int)a2[5];
}
v6 = v3 + v2;
v7 = v5[2];
if ( v5[3] < (int)v3 + (int)v2 )
++v7;
v8 = _Balloc_D2A(v7);
v9 = v8;
if ( v8 )
{
v10 = (char *)(v8 + 3);
v11 = (unsigned __int64)v8 + 4 * v6 + 24;
if ( (unsigned __int64)(v8 + 3) < v11 )
v10 = (char *)memset(v10, 0, 4 * ((unsigned __int64)(4LL * v6 - 1) >> 2) + 4);
v12 = v4 + 6;
v13 = (unsigned __int64)&v4[v2 + 6];
v14 = (unsigned __int64)&v5[v3 + 6];
if ( (unsigned __int64)v12 < v13 )
{
v15 = 4 * ((v14 - (unsigned __int64)v5 - 25) >> 2) + 4;
if ( v14 < (unsigned __int64)v5 + 25 )
v15 = 4;
do
{
while ( 1 )
{
v16 = *v12++;
if ( (_DWORD)v16 )
break;
v10 += 4;
if ( (unsigned __int64)v12 >= v13 )
goto LABEL_17;
}
v17 = v10;
v18 = v5 + 6;
v19 = 0;
do
{
v20 = *v18++;
v17 += 4;
v21 = v19 + *((unsigned int *)v17 - 1) + v16 * v20;
*((_DWORD *)v17 - 1) = v21;
v19 = HIDWORD(v21);
}
while ( (unsigned __int64)v18 < v14 );
*(_DWORD *)&v10[v15] = HIDWORD(v21);
v10 += 4;
}
while ( (unsigned __int64)v12 < v13 );
}
LABEL_17:
if ( v6 > 0 )
{
do
{
v22 = *(_DWORD *)(v11 - 4);
v11 -= 4LL;
if ( v22 )
break;
--v6;
}
while ( v6 );
}
*((_DWORD *)v9 + 5) = v6;
}
return v9;
}
//----- (0000000140018980) ----------------------------------------------------
int *__fastcall _pow5mult_D2A(int *a1, int a2)
{
int *v2; // rsi
int v4; // ebx
int *v5; // rbp
_QWORD *v6; // rdi
_QWORD *v7; // rsi
int *v8; // rax
int *v9; // rcx
_QWORD *v11; // rax
v2 = a1;
if ( (a2 & 3) != 0 )
{
v2 = _multadd_D2A(a1, p05_0[(a2 & 3) - 1], 0);
if ( !v2 )
return 0;
}
v4 = a2 >> 2;
v5 = v2;
if ( v4 )
{
v6 = (_QWORD *)p5s;
if ( !p5s )
{
dtoa_lock(1);
v6 = (_QWORD *)p5s;
if ( !p5s )
{
v6 = _Balloc_D2A(1);
if ( !v6 )
{
p5s = 0;
return 0;
}
p5s = (__int64)v6;
*(_QWORD *)((char *)v6 + 20) = 0x27100000001LL;
*v6 = 0;
}
if ( dtoa_CS_init == 2 )
LeaveCriticalSection(&CriticalSection);
}
v5 = v2;
while ( 1 )
{
if ( (v4 & 1) != 0 )
{
v8 = (int *)_mult_D2A(v5, v6);
if ( !v8 )
return 0;
v9 = v5;
v5 = v8;
_Bfree_D2A(v9);
v4 >>= 1;
if ( !v4 )
return v5;
}
else
{
v4 >>= 1;
if ( !v4 )
return v5;
}
v7 = (_QWORD *)*v6;
if ( !*v6 )
{
dtoa_lock(1);
v7 = (_QWORD *)*v6;
if ( !*v6 )
{
v11 = _mult_D2A(v6, v6);
v7 = v11;
*v6 = v11;
if ( !v11 )
return 0;
*v11 = 0;
}
if ( dtoa_CS_init == 2 )
LeaveCriticalSection(&CriticalSection);
}
v6 = v7;
}
}
return v5;
}
// 140022180: using guessed type _DWORD p05_0[8];
// 140027300: using guessed type __int64 p5s;
// 140027C70: using guessed type int dtoa_CS_init;
//----- (0000000140018B10) ----------------------------------------------------
_QWORD *__fastcall _lshift_D2A(int *a1, int a2)
{
signed int v3; // ecx
char v4; // bp
__int64 v5; // rsi
int v6; // eax
int v7; // ebx
int i; // r13d
_QWORD *v9; // rax
_QWORD *v10; // r14
int *v11; // rdi
int *v12; // rsi
int v13; // ebp
unsigned __int64 v14; // r9
int *v15; // r8
unsigned int v16; // edx
int v17; // eax
unsigned __int64 v18; // rax
_DWORD *v20; // rdi
_DWORD *v21; // rsi
v3 = a1[2];
v4 = a2;
v5 = (unsigned int)(a2 >> 5);
v6 = a1[3];
v7 = v5 + a1[5];
for ( i = v7 + 1; i > v6; ++v3 )
v6 *= 2;
v9 = _Balloc_D2A(v3);
v10 = v9;
if ( v9 )
{
v11 = (int *)(v9 + 3);
if ( (int)v5 > 0 )
{
v11 += v5;
memset(v9 + 3, 0, 4 * v5);
}
v12 = a1 + 6;
v13 = v4 & 0x1F;
v14 = (unsigned __int64)&a1[a1[5] + 6];
if ( v13 )
{
v15 = v11;
v16 = 0;
do
{
v17 = *v12;
++v15;
++v12;
*(v15 - 1) = v16 | (v17 << v13);
v16 = (unsigned int)*(v12 - 1) >> (32 - v13);
}
while ( (unsigned __int64)v12 < v14 );
v18 = 4 * ((v14 - (unsigned __int64)a1 - 25) >> 2) + 4;
if ( v14 < (unsigned __int64)a1 + 25 )
v18 = 4;
*(int *)((char *)v11 + v18) = v16;
if ( v16 )
goto LABEL_13;
}
else
{
do
{
*v11 = *v12;
v21 = v12 + 1;
v20 = v11 + 1;
if ( (unsigned __int64)v21 >= v14 )
break;
*v20 = *v21;
v12 = v21 + 1;
v11 = v20 + 1;
}
while ( (unsigned __int64)v12 < v14 );
}
i = v7;
LABEL_13:
*((_DWORD *)v10 + 5) = i;
_Bfree_D2A(a1);
}
return v10;
}
//----- (0000000140018C20) ----------------------------------------------------
__int64 __fastcall _cmp_D2A(__int64 a1, __int64 a2)
{
__int64 v2; // rax
unsigned int v3; // r9d
__int64 v4; // r8
unsigned __int64 v5; // rcx
_DWORD *v6; // rax
_DWORD *v7; // rdx
v2 = *(int *)(a2 + 20);
v3 = *(_DWORD *)(a1 + 20) - v2;
if ( !v3 )
{
v4 = 4 * v2;
v5 = a1 + 24;
v6 = (_DWORD *)(v5 + 4 * v2);
v7 = (_DWORD *)(a2 + v4 + 24);
while ( *--v6 == *--v7 )
{
if ( v5 >= (unsigned __int64)v6 )
return v3;
}
return *v6 < *v7 ? -1 : 1;
}
return v3;
}
//----- (0000000140018C70) ----------------------------------------------------
_QWORD *__fastcall _diff_D2A(__int64 a1, __int64 a2)
{
__int64 v2; // rax
__int64 v3; // rsi
__int64 v4; // rbx
int v5; // edi
__int64 v6; // rdx
unsigned __int64 v7; // rcx
_DWORD *v8; // rax
_DWORD *v9; // rdx
_QWORD *v10; // rax
_QWORD *v11; // r9
__int64 v12; // r13
__int64 v13; // rcx
_QWORD *v14; // r12
__int64 v15; // rdx
unsigned __int64 v16; // rdi
int v17; // r10d
unsigned __int64 v18; // rbp
__int64 v19; // rdx
int v20; // r11d
unsigned __int64 v21; // rsi
unsigned __int64 v22; // r14
__int64 v23; // rax
char *v24; // r8
unsigned int *v25; // r13
char *v26; // rbx
unsigned int *v27; // rcx
__int64 v28; // rax
__int64 v29; // rax
char *v30; // rax
int v31; // edx
__int64 v33; // rax
_QWORD *v34; // rax
__int64 v35; // r14
v2 = *(int *)(a2 + 20);
v3 = a1;
v4 = a2;
v5 = *(_DWORD *)(a1 + 20) - v2;
if ( v5 )
{
v5 = 0;
if ( *(_DWORD *)(a1 + 20) - (int)v2 < 0 )
{
LABEL_19:
v33 = v3;
v5 = 1;
v3 = v4;
v4 = v33;
}
}
else
{
v6 = 4 * v2;
v7 = a1 + 24;
v8 = (_DWORD *)(v7 + 4 * v2);
v9 = (_DWORD *)(v4 + v6 + 24);
while ( *--v8 == *--v9 )
{
if ( v7 >= (unsigned __int64)v8 )
{
v34 = _Balloc_D2A(0);
v11 = v34;
if ( v34 )
*(_QWORD *)((char *)v34 + 20) = 1;
return v11;
}
}
if ( *v8 < *v9 )
goto LABEL_19;
}
v10 = _Balloc_D2A(*(_DWORD *)(v3 + 8));
v11 = v10;
if ( v10 )
{
*((_DWORD *)v10 + 4) = v5;
v12 = v3 + 24;
v13 = 24;
v14 = v10 + 3;
v15 = 0;
v16 = v3 + 24 + 4LL * *(int *)(v3 + 20);
v17 = *(_DWORD *)(v3 + 20);
v18 = v4 + 4LL * *(int *)(v4 + 20) + 24;
do
{
v19 = *(unsigned int *)(v3 + v13) - (unsigned __int64)*(unsigned int *)(v4 + v13) - v15;
*(_DWORD *)((char *)v10 + v13) = v19;
v13 += 4;
v20 = v19;
v15 = BYTE4(v19) & 1;
}
while ( v13 + v4 < v18 );
v21 = v4 + 25;
v22 = (v18 - v4 - 25) >> 2;
v23 = 4 * v22 + 4;
if ( v18 < v4 + 25 )
v23 = 4;
v24 = (char *)v14 + v23;
v25 = (unsigned int *)(v23 + v12);
v26 = (char *)v14 + v23;
v27 = v25;
if ( (unsigned __int64)v25 >= v16 )
{
v35 = 4 * v22;
if ( v18 < v21 )
v35 = 0;
v30 = (char *)v14 + v35;
}
else
{
do
{
v28 = *v27++;
v26 += 4;
v29 = v28 - v15;
v20 = v29;
*((_DWORD *)v26 - 1) = v29;
v15 = BYTE4(v29) & 1;
}
while ( (unsigned __int64)v27 < v16 );
v30 = &v24[(v16 - 1 - (_QWORD)v25) & 0xFFFFFFFFFFFFFFFCuLL];
}
if ( !v20 )
{
do
{
v31 = *((_DWORD *)v30 - 1);
v30 -= 4;
--v17;
}
while ( !v31 );
}
*((_DWORD *)v11 + 5) = v17;
}
return v11;
}
//----- (0000000140018E50) ----------------------------------------------------
double __fastcall _b2d_D2A(__int64 a1, _DWORD *a2)
{
unsigned __int64 v2; // r10
__int64 v3; // rbx
unsigned int v4; // r11d
unsigned __int64 v5; // rsi
unsigned int v6; // ecx
unsigned int v7; // edi
char v8; // r9
__int64 v9; // rdx
unsigned int v10; // esi
unsigned __int64 v11; // rax
double result; // xmm0_8
int v13; // r8d
v2 = a1 + 24;
v3 = a1 + 24 + 4LL * *(int *)(a1 + 20);
v4 = *(_DWORD *)(v3 - 4);
v5 = v3 - 4;
_BitScanReverse(&v6, v4);
v7 = v6 ^ 0x1F;
*a2 = 32 - (v6 ^ 0x1F);
if ( (int)(v6 ^ 0x1F) <= 10 )
{
v13 = 0;
if ( v2 < v5 )
v13 = *(_DWORD *)(v3 - 8) >> (11 - v7);
*(_QWORD *)&result = v13 | (v4 << (v7 + 21)) | ((unsigned __int64)((v4 >> (11 - v7)) | 0x3FF00000) << 32);
}
else
{
v8 = v7 - 11;
if ( v2 < v5 )
{
v9 = *(unsigned int *)(v3 - 8);
if ( v7 != 11 )
{
v10 = (unsigned int)v9 >> (32 - v8);
v9 = (unsigned int)((_DWORD)v9 << v8);
v11 = (unsigned __int64)(v10 | (v4 << v8) | 0x3FF00000) << 32;
if ( v2 < v3 - 8 )
{
*(_QWORD *)&result = (*(_DWORD *)(v3 - 12) >> (32 - v8)) | (unsigned int)v9 | v11;
return result;
}
goto LABEL_8;
}
LABEL_7:
v11 = (unsigned __int64)(v4 | 0x3FF00000) << 32;
LABEL_8:
*(_QWORD *)&result = v9 | v11;
return result;
}
v9 = 0;
if ( v7 == 11 )
goto LABEL_7;
*(_QWORD *)&result = (unsigned __int64)((v4 << v8) | 0x3FF00000) << 32;
}
return result;
}
//----- (0000000140018F60) ----------------------------------------------------
_QWORD *__fastcall _d2b_D2A(double a1, _DWORD *a2, _DWORD *a3)
{
_QWORD *v5; // rdx
unsigned int v6; // r9d
int v7; // ecx
int v8; // r10d
int v9; // r8d
unsigned int v10; // eax
__m128i v11; // xmm0
int v12; // eax
unsigned int v13; // ecx
unsigned int v15; // ecx
v5 = _Balloc_D2A(1);
if ( v5 )
{
v6 = HIDWORD(a1) & 0xFFFFF;
v7 = (HIDWORD(a1) >> 20) & 0x7FF;
if ( v7 )
v6 = HIDWORD(a1) & 0xFFFFF | 0x100000;
v8 = (HIDWORD(a1) >> 20) & 0x7FF;
if ( LODWORD(a1) )
{
_BitScanForward((unsigned int *)&v9, LODWORD(a1));
v10 = LODWORD(a1) >> v9;
if ( v9 )
{
v10 |= v6 << (32 - v9);
v6 >>= v9;
}
v11 = _mm_cvtsi32_si128(v10);
v12 = 1 - ((v6 == 0) - 1);
*((_DWORD *)v5 + 5) = v12;
v5[3] = _mm_unpacklo_epi32(v11, _mm_cvtsi32_si128(v6)).m128i_u64[0];
if ( !v7 )
goto LABEL_8;
}
else
{
_BitScanForward(&v15, v6);
v12 = 1;
v9 = v15 + 32;
*((_DWORD *)v5 + 5) = 1;
*((_DWORD *)v5 + 6) = v6 >> v15;
if ( !v8 )
{
LABEL_8:
_BitScanReverse(&v13, *((_DWORD *)v5 + v12 + 5));
*a2 = v9 - 1074;
*a3 = 32 * v12 - (v13 ^ 0x1F);
return v5;
}
}
*a2 = v8 + v9 - 1075;
*a3 = 53 - v9;
}
return v5;
}
//----- (0000000140019070) ----------------------------------------------------
_BYTE *__fastcall _strcp_D2A(_BYTE *a1, char *a2)
{
_BYTE *result; // rax
char *v3; // rcx
char v4; // dl
char v5; // dl
result = a1;
v3 = a2 + 1;
v4 = *a2;
*result = v4;
if ( v4 )
{
do
{
v5 = *v3;
++result;
++v3;
*result = v5;
}
while ( v5 );
}
return result;
}
//----- (00000001400190A0) ----------------------------------------------------
size_t __cdecl strnlen(const char *String, size_t MaxCount)
{
size_t v2; // r8
const char *v3; // rax
v2 = 0;
v3 = String;
if ( MaxCount )
{
do
{
if ( !*v3 )
break;
v2 = ++v3 - String;
}
while ( v3 - String < MaxCount );
}
return v2;
}
//----- (00000001400190D0) ----------------------------------------------------
size_t __cdecl wcsnlen(const wchar_t *Source, size_t MaxCount)
{
size_t v2; // r8
size_t result; // rax
v2 = 0;
result = MaxCount;
if ( MaxCount )
{
while ( Source[v2] )
{
if ( MaxCount == ++v2 )
return result;
}
return v2;
}
return result;
}
//----- (0000000140019100) ----------------------------------------------------
int __cdecl vfprintf(FILE *const Stream, const char *const Format, va_list ArgList)
{
return _stdio_common_vfprintf(0, Stream, Format, 0, ArgList);
}
//----- (0000000140019120) ----------------------------------------------------
int fprintf_0(FILE *const Stream, const char *const Format, ...)
{
va_list va; // [rsp+60h] [rbp+18h] BYREF
va_start(va, Format);
return _stdio_common_vfprintf(0, Stream, Format, 0, va);
}
//----- (0000000140019160) ----------------------------------------------------
__int64 get_output_format()
{
return 0;
}
// 140019160: using guessed type __int64 get_output_format();
//----- (0000000140019170) ----------------------------------------------------
__int64 __fastcall _getmainargs(int *a1, char ***a2, char ***a3, int a4, int *a5)
{
initialize_narrow_environment();
configure_narrow_argv_0((_crt_argv_mode)(1 - ((a4 == 0) - 1)));
*a1 = *_p___argc();
*a2 = *_p___argv();
*a3 = *_p__environ();
if ( a5 )
set_new_mode_0(*a5);
return 0;
}
//----- (00000001400191E0) ----------------------------------------------------
__int64 __fastcall _wgetmainargs(int *a1, wchar_t ***a2, wchar_t ***a3, int a4, int *a5)
{
initialize_wide_environment();
configure_wide_argv((_crt_argv_mode)(1 - ((a4 == 0) - 1)));
*a1 = *_p___argc();
*a2 = *_p___wargv();
*a3 = *_p__wenviron_0();
if ( a5 )
set_new_mode_0(*a5);
return 0;
}
//----- (0000000140019250) ----------------------------------------------------
_onexit_t __cdecl onexit(_onexit_t Func)
{
bool v2; // zf
_onexit_t result; // rax
v2 = crt_atexit((_PVFV)Func) == 0;
result = 0;
if ( v2 )
return Func;
return result;
}
//----- (0000000140019270) ----------------------------------------------------
int __cdecl at_quick_exit(void (__cdecl *a1)())
{
if ( *(_BYTE *)refptr___mingw_module_is_dll )
return 0;
else
return crt_at_quick_exit_0(a1);
}
// 140022600: using guessed type _UNKNOWN *refptr___mingw_module_is_dll;
//----- (0000000140019290) ----------------------------------------------------
void __fastcall amsg_exit(int a1)
{
FILE *v2; // rax
v2 = _acrt_iob_func_0(2u);
fprintf_0(v2, "runtime error %d\n", a1);
(*(void (__fastcall **)(__int64))refptr___imp__exit)(255);
JUMPOUT(0x1400192C2LL);
}
// 1400192C1: control flows out of bounds to 1400192C2
// 140022590: using guessed type _UNKNOWN *refptr___imp__exit;
//----- (00000001400192D0) ----------------------------------------------------
int _ms_fwprintf(FILE *Stream, wchar_t *Format, ...)
{
va_list va; // [rsp+60h] [rbp+18h] BYREF
va_start(va, Format);
return _stdio_common_vfwprintf_0(4u, Stream, Format, 0, va);
}
//----- (0000000140019310) ----------------------------------------------------
void __cdecl tzset()
{
(*(void (**)(void))refptr___imp__tzset)();
tzname[0] = (char *)_tzname_0();
*(_QWORD *)&timezone = _timezone();
*(_QWORD *)&daylight = _daylight_0();
}
// 1400225A0: using guessed type _UNKNOWN *refptr___imp__tzset;
//----- (0000000140019350) ----------------------------------------------------
void __cdecl tzset_0()
{
(*(void (**)(void))refptr___imp__tzset)();
tzname[0] = (char *)_tzname_0();
*(_QWORD *)&timezone = _timezone();
*(_QWORD *)&daylight = _daylight_0();
}
// 1400225A0: using guessed type _UNKNOWN *refptr___imp__tzset;
//----- (00000001400195B0) ----------------------------------------------------
signed __int64 __fastcall mutex_impl_init(volatile signed __int64 *a1, signed __int64 a2)
{
_DWORD *v4; // rax
signed __int64 v5; // rcx
int v6; // eax
v4 = malloc_0(0x18u);
v5 = (signed __int64)v4;
if ( v4 )
{
*v4 = 0;
v6 = 2;
if ( a2 != -3 )
v6 = a2 == -2;
*(_DWORD *)(v5 + 4) = v6;
*(_QWORD *)(v5 + 8) = 0;
*(_DWORD *)(v5 + 16) = 0;
*(_DWORD *)(v5 + 20) = -1;
if ( a2 != _InterlockedCompareExchange64(a1, v5, a2) )
{
free((void *)v5);
return *a1;
}
}
return v5;
}
//----- (0000000140019620) ----------------------------------------------------
__int64 __fastcall pthread_mutex_lock(volatile signed __int64 *a1)
{
signed __int64 v1; // rbx
signed __int32 v2; // edi
__int64 result; // rax
DWORD v4; // eax
bool v5; // zf
int v6; // ebp
HANDLE EventA; // rax
DWORD LastError; // edx
v1 = *a1;
if ( *a1 >= 0xFFFFFFFFFFFFFFFDuLL || *a1 == 0 )
{
v1 = mutex_impl_init(a1, *a1);
if ( !v1 )
return 12;
}
else if ( !v1 )
{
return 12;
}
v2 = _InterlockedExchange((volatile __int32 *)v1, 1);
if ( !v2 )
{
LABEL_4:
if ( *(_DWORD *)(v1 + 4) )
*(_DWORD *)(v1 + 20) = GetCurrentThreadId();
return 0;
}
if ( !*(_DWORD *)(v1 + 4) || (v6 = *(_DWORD *)(v1 + 20), v6 != GetCurrentThreadId()) )
{
if ( *(_QWORD *)(v1 + 8) )
goto LABEL_12;
EventA = CreateEventA(0, 0, 0, 0);
if ( EventA )
{
if ( _InterlockedCompareExchange64((volatile signed __int64 *)(v1 + 8), (signed __int64)EventA, 0) )
CloseHandle(EventA);
LABEL_12:
while ( _InterlockedExchange((volatile __int32 *)v1, 2) )
{
v4 = pthread_wait_for_single_object(*(HANDLE *)(v1 + 8), 0xFFFFFFFF);
if ( v4 )
{
v5 = v4 == 258;
result = 138;
if ( !v5 )
return 22;
return result;
}
}
goto LABEL_4;
}
LastError = GetLastError();
result = 1;
if ( LastError == 5 )
return result;
return 12;
}
_InterlockedCompareExchange((volatile signed __int32 *)v1, v2, 1);
result = 36;
if ( *(_DWORD *)(v1 + 4) == 2 )
{
++*(_DWORD *)(v1 + 16);
return 0;
}
return result;
}
//----- (0000000140019770) ----------------------------------------------------
__int64 __fastcall pthread_mutex_timedlock(volatile signed __int64 *a1, __int64 a2)
{
DWORD v2; // ebp
unsigned __int64 v4; // rbx
unsigned __int64 v5; // rax
signed __int64 v6; // rbx
signed __int32 v7; // edi
__int64 result; // rax
unsigned __int64 v9; // rbx
int v10; // eax
DWORD v11; // eax
bool v12; // zf
int v13; // r12d
HANDLE EventA; // rax
DWORD LastError; // edx
v2 = -1;
if ( !a2 || (v2 = 0, v4 = pthread_time_in_ms_from_timespec(a2), v5 = pthread_time_in_ms(), v5 >= v4) )
{
v6 = *a1;
if ( *a1 < 0xFFFFFFFFFFFFFFFDuLL && *a1 != 0 )
goto LABEL_4;
LABEL_13:
v6 = mutex_impl_init(a1, v6);
if ( !v6 )
return 12;
goto LABEL_5;
}
v9 = v4 - v5;
v10 = -1;
if ( v9 <= 0xFFFFFFFF )
v10 = v9;
v6 = *a1;
v2 = v10;
if ( *a1 >= 0xFFFFFFFFFFFFFFFDuLL || *a1 == 0 )
goto LABEL_13;
LABEL_4:
if ( !v6 )
return 12;
LABEL_5:
v7 = _InterlockedExchange((volatile __int32 *)v6, 1);
if ( !v7 )
{
LABEL_6:
if ( *(_DWORD *)(v6 + 4) )
*(_DWORD *)(v6 + 20) = GetCurrentThreadId();
return 0;
}
if ( !*(_DWORD *)(v6 + 4) || (v13 = *(_DWORD *)(v6 + 20), v13 != GetCurrentThreadId()) )
{
if ( *(_QWORD *)(v6 + 8) )
goto LABEL_17;
EventA = CreateEventA(0, 0, 0, 0);
if ( EventA )
{
if ( _InterlockedCompareExchange64((volatile signed __int64 *)(v6 + 8), (signed __int64)EventA, 0) )
CloseHandle(EventA);
LABEL_17:
while ( _InterlockedExchange((volatile __int32 *)v6, 2) )
{
v11 = pthread_wait_for_single_object(*(HANDLE *)(v6 + 8), v2);
if ( v11 )
{
v12 = v11 == 258;
result = 138;
if ( !v12 )
return 22;
return result;
}
}
goto LABEL_6;
}
LastError = GetLastError();
result = 1;
if ( LastError == 5 )
return result;
return 12;
}
_InterlockedCompareExchange((volatile signed __int32 *)v6, v7, 1);
result = 36;
if ( *(_DWORD *)(v6 + 4) == 2 )
{
++*(_DWORD *)(v6 + 16);
return 0;
}
return result;
}
//----- (0000000140019910) ----------------------------------------------------
__int64 __fastcall pthread_mutex_unlock(volatile signed __int64 *a1)
{
volatile signed __int64 v1; // rdx
__int64 result; // rax
int v3; // ebx
DWORD CurrentThreadId; // ecx
int v5; // eax
volatile signed __int64 v6; // [rsp+28h] [rbp-10h]
v1 = *a1;
if ( *a1 < 0xFFFFFFFFFFFFFFFDuLL && *a1 != 0 )
{
if ( v1 )
goto LABEL_3;
return 12;
}
v1 = mutex_impl_init(a1, v1);
if ( !v1 )
return 12;
LABEL_3:
if ( !*(_DWORD *)(v1 + 4) )
return _InterlockedExchange((volatile __int32 *)v1, 0) == 2 && !SetEvent(*(HANDLE *)(v1 + 8));
result = 22;
if ( *(_DWORD *)v1 )
{
v3 = *(_DWORD *)(v1 + 20);
v6 = v1;
CurrentThreadId = GetCurrentThreadId();
result = 1;
if ( v3 == CurrentThreadId )
{
v1 = v6;
v5 = *(_DWORD *)(v6 + 16);
if ( v5 )
{
*(_DWORD *)(v6 + 16) = v5 - 1;
return 0;
}
*(_DWORD *)(v6 + 20) = -1;
return _InterlockedExchange((volatile __int32 *)v1, 0) == 2 && !SetEvent(*(HANDLE *)(v1 + 8));
}
}
return result;
}
//----- (00000001400199D0) ----------------------------------------------------
__int64 __fastcall pthread_mutex_trylock(volatile signed __int64 *a1)
{
signed __int64 v1; // rbx
int v3; // esi
v1 = *a1;
if ( *a1 < 0xFFFFFFFFFFFFFFFDuLL && *a1 != 0 )
{
if ( v1 )
goto LABEL_3;
return 12;
}
v1 = mutex_impl_init(a1, *a1);
if ( !v1 )
return 12;
LABEL_3:
if ( _InterlockedCompareExchange((volatile signed __int32 *)v1, 1, 0) )
{
if ( *(_DWORD *)(v1 + 4) == 2 && (v3 = *(_DWORD *)(v1 + 20), v3 == GetCurrentThreadId()) )
{
++*(_DWORD *)(v1 + 16);
return 0;
}
else
{
return 16;
}
}
else
{
if ( *(_DWORD *)(v1 + 4) )
*(_DWORD *)(v1 + 20) = GetCurrentThreadId();
return 0;
}
}
//----- (0000000140019A50) ----------------------------------------------------
__int64 __fastcall pthread_mutex_init(__int64 *a1, _DWORD *a2)
{
int v2; // eax
__int64 v3; // rdx
if ( !a2 )
{
v3 = -1;
LABEL_5:
*a1 = v3;
return 0;
}
if ( (*a2 & 4) == 0 )
{
v2 = *a2 & 3;
v3 = -2;
if ( v2 != 1 )
v3 = 2LL * (v2 != 2) - 3;
goto LABEL_5;
}
return 40;
}
//----- (0000000140019AA0) ----------------------------------------------------
__int64 __fastcall pthread_mutex_destroy(_QWORD **a1)
{
_QWORD *v1; // rsi
void *v3; // rcx
v1 = *a1;
if ( (unsigned __int64)*a1 < 0xFFFFFFFFFFFFFFFDuLL && (_QWORD *)((char *)*a1 + 3) != (_QWORD *)3 )
{
v3 = (void *)v1[1];
if ( v3 )
CloseHandle(v3);
free(v1);
*a1 = 0;
}
return 0;
}
//----- (0000000140019AE0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_init(_DWORD *a1)
{
*a1 = 0;
return 0;
}
//----- (0000000140019AF0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_destroy(__int64 a1)
{
return a1 == 0 ? 0x16 : 0;
}
//----- (0000000140019B00) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_gettype(_DWORD *a1, int *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = *a1 & 3;
return 0;
}
//----- (0000000140019B20) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_settype(unsigned int *a1, unsigned int a2)
{
if ( !a1 || a2 > 2 )
return 22;
*a1 = a2 | *a1 & 0xFFFFFFFC;
return 0;
}
//----- (0000000140019B50) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_getpshared(_DWORD *a1, int *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = (*a1 >> 2) & 1;
return 0;
}
//----- (0000000140019B80) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_setpshared(_DWORD *a1, unsigned int a2)
{
__int64 result; // rax
if ( !a1 || a2 > 1 )
return 22;
result = 40;
if ( a2 != 1 )
result = 0;
*a1 &= ~4u;
return result;
}
//----- (0000000140019BB0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_getprotocol(_DWORD *a1, int *a2)
{
*a2 = *a1 & 0x18;
return 0;
}
//----- (0000000140019BC0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_setprotocol(unsigned int *a1, int a2)
{
__int64 result; // rax
result = 22;
if ( (a2 & 0x18) == 0x18 )
{
*a1 = a2 | *a1 & 0xFFFFFFE7;
return 0;
}
return result;
}
//----- (0000000140019BE0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_getprioceiling(_DWORD *a1, _DWORD *a2)
{
*a2 = *a1 >> 5;
return 0;
}
//----- (0000000140019BF0) ----------------------------------------------------
__int64 __fastcall pthread_mutexattr_setprioceiling(_DWORD *a1, int a2)
{
*a1 = 32 * a2 + (*a1 & 0x1F);
return 0;
}
//----- (0000000140019C00) ----------------------------------------------------
__int64 __fastcall SetThreadName_VEH(_DWORD **a1)
{
__int64 result; // rax
result = 0;
if ( *a1 )
return (unsigned int)-(**a1 == 1080890248);
return result;
}
//----- (0000000140019C20) ----------------------------------------------------
__int64 __fastcall _pthread_get_pointer(unsigned __int64 a1)
{
unsigned __int64 v1; // r10
unsigned __int64 v2; // r8
unsigned __int64 v3; // rax
_QWORD *v4; // rdx
unsigned __int64 v5; // r9
__int64 result; // rax
if ( !idListCnt )
return 0;
v1 = idListCnt - 1;
v2 = 0;
if ( idListCnt == 1 )
{
result = 0;
if ( *((_QWORD *)idList + 1) == a1 )
return *(_QWORD *)idList;
}
else
{
while ( 1 )
{
v3 = (v2 + v1) >> 1;
v4 = (char *)idList + 16 * v3;
v5 = v4[1];
if ( v5 == a1 )
break;
if ( a1 < v5 )
{
if ( v3 == v2 )
return 0;
v1 = v3 - 1;
if ( v3 - 1 < v2 )
return 0;
}
else
{
v2 = v3 + 1;
if ( v1 < v3 + 1 )
return 0;
}
}
return *v4;
}
return result;
}
// 140027D28: using guessed type __int64 idListCnt;
//----- (0000000140019CA0) ----------------------------------------------------
void *__fastcall enterOnceObject(__int64 a1)
{
void *v2; // rbx
_DWORD *v4; // rax
pthread_spin_lock(&data);
v2 = (void *)once_obj;
if ( once_obj )
{
while ( 1 )
{
if ( *(_QWORD *)v2 == a1 )
{
++*((_DWORD *)v2 + 4);
goto LABEL_7;
}
if ( !*((_QWORD *)v2 + 3) )
break;
v2 = (void *)*((_QWORD *)v2 + 3);
}
v4 = calloc(1u, 0x20u);
*(_QWORD *)v4 = a1;
v4[4] = 1;
*((_QWORD *)v2 + 3) = v4;
v2 = v4;
}
else
{
v2 = calloc(1u, 0x20u);
*(_QWORD *)v2 = a1;
*((_DWORD *)v2 + 4) = 1;
once_obj = (__int64)v2;
}
pthread_mutex_init((__int64 *)v2 + 1, 0);
LABEL_7:
pthread_spin_unlock(&data);
return v2;
}
// 14001F450: using guessed type __int64 data;
// 140027D00: using guessed type __int64 once_obj;
//----- (0000000140019D60) ----------------------------------------------------
unsigned __int64 __fastcall _pthread_register_pointer(__int64 a1)
{
__int64 v2; // rdi
_QWORD *v3; // r12
unsigned __int64 v4; // rbx
__int64 v5; // rax
__int64 v6; // rdx
_QWORD *v7; // rsi
_QWORD *v9; // rax
__int64 v10; // rbx
_QWORD *v11; // rax
if ( !a1 )
return 0;
v2 = idListCnt;
v3 = idList;
if ( idListCnt >= (unsigned __int64)idListMax )
{
if ( idListCnt )
{
v10 = idListMax + 16;
v11 = realloc_0(idList, 16 * (idListMax + 16));
v3 = v11;
if ( v11 )
{
idListMax = v10;
idList = v11;
goto LABEL_3;
}
}
else
{
v9 = malloc_0(0x100u);
v3 = v9;
if ( v9 )
{
idListMax = 16;
idList = v9;
goto LABEL_3;
}
}
return 0;
}
LABEL_3:
v4 = idListNextId;
LABEL_4:
idListNextId = ++v4;
if ( (v4 & 0x4000000000000000LL) != 0 )
{
LABEL_5:
idListNextId = 1;
v4 = 1;
goto LABEL_6;
}
while ( 1 )
{
if ( !v4 )
goto LABEL_4;
LABEL_6:
if ( !_pthread_get_pointer(v4) )
break;
v4 = ++idListNextId;
if ( (idListNextId & 0x4000000000000000LL) != 0 )
goto LABEL_5;
}
if ( v2 )
{
v5 = v2;
v6 = 2 * v2;
while ( v4 < v3[v6 - 1] )
{
v6 -= 2;
if ( !--v5 )
{
v7 = v3;
goto LABEL_23;
}
}
v7 = &v3[v6];
if ( v2 == v5 )
goto LABEL_15;
LABEL_23:
memmove_0(&v3[2 * v5 + 2], v7, 16 * (v2 - v5));
LABEL_15:
v3 = v7;
}
v3[1] = v4;
*v3 = a1;
idListCnt = v2 + 1;
return v4;
}
// 140027D18: using guessed type __int64 idListNextId;
// 140027D20: using guessed type __int64 idListMax;
// 140027D28: using guessed type __int64 idListCnt;
//----- (0000000140019F00) ----------------------------------------------------
DWORD pthread_tls_init()
{
DWORD result; // eax
result = TlsAlloc();
pthread_tls = result;
if ( result == -1 )
pthread_tls_init_cold();
return result;
}
// 14001EDB0: using guessed type void __noreturn pthread_tls_init_cold(void);
//----- (0000000140019F20) ----------------------------------------------------
void __noreturn replace_spin_keys_part_0()
{
DWORD CurrentThreadId; // eax
__int64 v1; // rax
__int64 v2; // rdx
int v3; // eax
CHAR OutputString[40]; // [rsp+20h] [rbp-78h] BYREF
__int64 v5; // [rsp+48h] [rbp-50h]
__int64 v6; // [rsp+50h] [rbp-48h]
__int64 v7; // [rsp+58h] [rbp-40h]
__int64 v8; // [rsp+60h] [rbp-38h]
__int64 v9; // [rsp+68h] [rbp-30h]
__int64 v10; // [rsp+70h] [rbp-28h]
__int64 v11; // [rsp+78h] [rbp-20h]
_QWORD v12[3]; // [rsp+80h] [rbp-18h]
strcpy(OutputString, "Error cleaning up spin_keys for thread ");
v12[0] = 0;
v5 = 0;
v6 = 0;
v7 = 0;
v8 = 0;
v9 = 0;
v10 = 0;
v11 = 0;
*(_DWORD *)((char *)v12 + 7) = 0;
CurrentThreadId = GetCurrentThreadId();
_ultoa(CurrentThreadId, &OutputString[39], 10);
if ( OutputString[39] )
{
v1 = 40;
while ( OutputString[v1] )
{
if ( ++v1 == 107 )
goto LABEL_8;
}
v2 = (int)v1;
if ( (_DWORD)v1 == 106 )
{
LABEL_8:
OutputDebugStringA(OutputString);
abort();
}
v3 = v1 + 1;
}
else
{
v3 = 40;
v2 = 39;
}
OutputString[v2] = 10;
OutputString[v3] = 0;
goto LABEL_8;
}
//----- (000000014001A040) ----------------------------------------------------
__int64 __fastcall leaveOnceObject_part_0(_DWORD *Block)
{
_QWORD *v2; // rax
_QWORD *v3; // rsi
FILE *v6; // rax
pthread_spin_lock(&data);
v2 = (_QWORD *)once_obj;
if ( once_obj && (_DWORD *)once_obj != Block )
{
while ( 1 )
{
v3 = v2;
v2 = (_QWORD *)v2[3];
if ( !v2 )
break;
if ( v2 == (_QWORD *)Block )
goto LABEL_5;
}
LABEL_12:
v6 = __acrt_iob_func(2u);
fprintf_0(v6, "%p not found?!?!\n", Block);
return pthread_spin_unlock(&data);
}
v3 = 0;
LABEL_5:
if ( !v2 )
goto LABEL_12;
if ( Block[4]-- != 1 )
return pthread_spin_unlock(&data);
pthread_mutex_destroy((_QWORD **)Block + 1);
if ( v3 )
v3[3] = *((_QWORD *)Block + 3);
else
once_obj = *((_QWORD *)Block + 3);
free(Block);
return pthread_spin_unlock(&data);
}
// 14001F450: using guessed type __int64 data;
// 140027D00: using guessed type __int64 once_obj;
//----- (000000014001A120) ----------------------------------------------------
__int64 __fastcall pthread_once_cleanup(volatile signed __int64 *Block)
{
__int64 result; // rax
result = pthread_mutex_unlock(Block + 1);
if ( Block )
return leaveOnceObject_part_0(Block);
return result;
}
//----- (000000014001A150) ----------------------------------------------------
__int64 pop_pthread_mem()
{
__int64 v0; // rbx
unsigned __int64 v1; // rax
_QWORD *v3; // rax
_QWORD *v4; // rdi
unsigned __int64 v5; // rax
pthread_mutex_lock(&mtx_pthr_locked);
v0 = pthr_root;
if ( pthr_root )
{
v1 = _pthread_register_pointer(pthr_root);
*(_QWORD *)(v0 + 472) = v1;
if ( v1 )
{
pthr_root = *(_QWORD *)(v0 + 464);
if ( !pthr_root )
pthr_last = 0;
*(_QWORD *)(v0 + 464) = 0;
}
else
{
v0 = 0;
}
}
else
{
v3 = calloc(1u, 0x1E0u);
v4 = v3;
if ( v3 )
{
v5 = _pthread_register_pointer((__int64)v3);
if ( v5 )
{
v4[59] = v5;
v0 = (__int64)v4;
}
else
{
free(v4);
}
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return v0;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 140027D38: using guessed type __int64 pthr_last;
// 140027D40: using guessed type __int64 pthr_root;
//----- (000000014001A220) ----------------------------------------------------
__int64 __fastcall push_pthread_mem_part_0(_QWORD *a1)
{
unsigned __int64 v2; // r11
void *v3; // rcx
void *v4; // rcx
void *v5; // rcx
__int64 v7; // r8
__int64 v8; // rdi
unsigned __int64 v9; // rdx
unsigned __int64 v10; // rcx
unsigned __int64 v11; // rax
__int64 v12; // r10
unsigned __int64 v13; // rax
pthread_mutex_lock(&mtx_pthr_locked);
v2 = a1[59];
if ( v2 )
{
v7 = idListCnt;
if ( idListCnt )
{
v8 = idListCnt - 1;
v9 = 0;
v10 = idListCnt - 1;
while ( 1 )
{
v11 = (v10 + v9) >> 1;
v12 = 16 * v11;
if ( v2 == *((_QWORD *)idList + 2 * v11 + 1) )
break;
if ( v2 < *(_QWORD *)((char *)idList + v12 + 8) )
{
if ( v11 == v9 )
goto LABEL_2;
v10 = v11 - 1;
}
else
{
v9 = v11 + 1;
}
if ( v10 < v9 )
goto LABEL_2;
}
v13 = v11 + 1;
if ( v13 < idListCnt )
{
memmove_0((char *)idList + v12, (char *)idList + v12 + 16, 16 * (idListCnt - v13));
idListCnt = v8;
}
else
{
--idListCnt;
if ( v7 == 1 )
{
free(idList);
idListMax = 0;
idListCnt = 0;
}
}
}
}
LABEL_2:
v3 = (void *)a1[10];
if ( v3 )
free(v3);
v4 = (void *)a1[11];
if ( v4 )
free(v4);
v5 = (void *)a1[12];
if ( v5 )
free(v5);
memset(a1, 0, 0x1E0u);
if ( pthr_last )
*(_QWORD *)(pthr_last + 464) = a1;
else
pthr_root = (__int64)a1;
pthr_last = (__int64)a1;
return pthread_mutex_unlock(&mtx_pthr_locked);
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 140027D20: using guessed type __int64 idListMax;
// 140027D28: using guessed type __int64 idListCnt;
// 140027D38: using guessed type __int64 pthr_last;
// 140027D40: using guessed type __int64 pthr_root;
//----- (000000014001A380) ----------------------------------------------------
__int64 __fastcall push_pthread_mem(_QWORD *a1)
{
__int64 result; // rax
if ( a1 )
{
if ( !a1[58] )
return push_pthread_mem_part_0(a1);
}
return result;
}
//----- (000000014001A3A0) ----------------------------------------------------
void pthread_once_raw_constprop_0_isra_0()
{
char *v0; // rax
volatile signed __int64 *v1; // rbp
_DWORD *v2; // rbx
int v3; // esi
FILE *v4; // rax
if ( pthread_tls_once != 1 )
{
v0 = (char *)enterOnceObject((__int64)&pthread_tls_once);
v1 = (volatile signed __int64 *)(v0 + 8);
v2 = v0;
pthread_mutex_lock((volatile signed __int64 *)v0 + 1);
v3 = pthread_tls_once;
if ( pthread_tls_once )
{
if ( pthread_tls_once != 1 )
{
v4 = __acrt_iob_func(2u);
fprintf_0(v4, " once %p is %d\n", &pthread_tls_once, v3);
}
}
else
{
pthread_tls = TlsAlloc();
if ( pthread_tls == -1 )
pthread_once_raw_constprop_0_isra_0_cold();
pthread_tls_once = 1;
}
pthread_mutex_unlock(v1);
if ( v2 )
leaveOnceObject_part_0(v2);
}
}
// 14001EDB6: using guessed type void __noreturn pthread_once_raw_constprop_0_isra_0_cold(void);
// 140027D50: using guessed type int pthread_tls_once;
//----- (000000014001A450) ----------------------------------------------------
__int64 _pthread_self_lite_part_0()
{
__int64 v0; // rax
__int64 v1; // rbx
HANDLE EventA; // rax
HANDLE CurrentProcess; // rdi
HANDLE CurrentThread; // rsi
HANDLE v5; // rax
int ThreadPriority; // eax
DWORD v7; // ecx
v0 = pop_pthread_mem();
v1 = v0;
if ( !_xl_f || !v0 )
return 0;
*(_DWORD *)(v0 + 68) = 1;
*(_DWORD *)(v0 + 112) = GetCurrentThreadId();
EventA = CreateEventA(0, 1, 0, 0);
*(_QWORD *)(v1 + 56) = -1;
*(_QWORD *)(v1 + 48) = EventA;
if ( (unsigned int)pthread_spin_destroy() == 1 )
replace_spin_keys_part_0();
*(_QWORD *)(v1 + 104) = -1;
*(_DWORD *)(v1 + 184) = 0;
*(_QWORD *)(v1 + 40) = 0;
CurrentProcess = GetCurrentProcess();
CurrentThread = GetCurrentThread();
v5 = GetCurrentProcess();
if ( !DuplicateHandle(v5, CurrentThread, CurrentProcess, (LPHANDLE)(v1 + 40), 0, 0, 2u)
|| (ThreadPriority = GetThreadPriority(*(HANDLE *)(v1 + 40)),
v7 = pthread_tls,
*(_DWORD *)(v1 + 188) = 0,
*(_DWORD *)(v1 + 192) = ThreadPriority,
*(_BYTE *)(v1 + 64) = *(_BYTE *)(v1 + 64) & 0xCF | 0x10,
!TlsSetValue(v7, (LPVOID)v1)) )
{
_pthread_self_lite_part_0_cold();
}
return v1;
}
// 14001EDBC: using guessed type void __noreturn _pthread_self_lite_part_0_cold(void);
// 14002A048: using guessed type __int64 (__fastcall *_xl_f)();
//----- (000000014001A590) ----------------------------------------------------
LPVOID _pthread_self_lite()
{
LPVOID result; // rax
pthread_once_raw_constprop_0_isra_0();
result = TlsGetValue(pthread_tls);
if ( !result )
return (LPVOID)_pthread_self_lite_part_0();
return result;
}
//----- (000000014001A5C0) ----------------------------------------------------
void __fastcall pthread_cleanup_dest_part_0(unsigned __int64 a1)
{
__int64 pointer; // rdi
int v3; // r13d
int v4; // r14d
unsigned int v5; // ebx
__int64 v6; // r15
bool v7; // cc
if ( a1 )
{
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
if ( pointer )
{
v3 = 256;
while ( 1 )
{
pthread_spin_lock((volatile __int64 *)(pointer + 104));
if ( !*(_DWORD *)(pointer + 72) )
break;
v4 = 0;
v5 = 0;
do
{
while ( !*(_BYTE *)(*(_QWORD *)(pointer + 88) + v5) )
{
if ( ++v5 >= *(_DWORD *)(pointer + 72) )
goto LABEL_11;
}
v6 = *(_QWORD *)(*(_QWORD *)(pointer + 80) + 8LL * v5);
pthread_rwlock_rdlock(&pthread_key_lock);
v7 = *((_QWORD *)pthread_key_dest + v5) <= 1u;
*(_QWORD *)(*(_QWORD *)(pointer + 80) + 8LL * v5) = 0;
*(_BYTE *)(*(_QWORD *)(pointer + 88) + v5) = 0;
if ( !v7 )
{
v4 = 1;
pthread_spin_unlock((_QWORD *)(pointer + 104));
(*((void (__fastcall **)(__int64))pthread_key_dest + v5))(v6);
pthread_spin_lock((volatile __int64 *)(pointer + 104));
}
++v5;
pthread_rwlock_unlock((_DWORD **)&pthread_key_lock);
}
while ( v5 < *(_DWORD *)(pointer + 72) );
LABEL_11:
pthread_spin_unlock((_QWORD *)(pointer + 104));
if ( v4 )
{
if ( --v3 )
continue;
}
return;
}
pthread_spin_unlock((_QWORD *)(pointer + 104));
}
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 14001F460: using guessed type __int64 *pthread_key_lock;
//----- (000000014001A700) ----------------------------------------------------
void __fastcall __noreturn pthread_create_wrapper(volatile signed __int64 *a1)
{
__int64 (__fastcall *v1)(_QWORD); // rax
__int64 v2; // rbx
unsigned __int64 v3; // rcx
volatile signed __int64 *v4; // rbx
void *v5; // rcx
__int64 v6; // rsi
bool v7; // zf
__int64 savedregs; // [rsp+30h] [rbp+0h] BYREF
fpreset();
pthread_mutex_lock(&mtx_pthr_locked);
pthread_mutex_lock(a1 + 7);
pthread_once_raw_constprop_0_isra_0();
TlsSetValue(pthread_tls, (LPVOID)a1);
*((_DWORD *)a1 + 28) = GetCurrentThreadId();
pthread_mutex_unlock(a1 + 7);
if ( (unsigned int)_intrinsic_setjmpex(a1 + 26, &savedregs) )
{
pthread_mutex_lock(&mtx_pthr_locked);
}
else
{
pthread_mutex_unlock(&mtx_pthr_locked);
v1 = (__int64 (__fastcall *)(_QWORD))*((_QWORD *)a1 + 2);
if ( v1 )
v2 = v1(*((_QWORD *)a1 + 1));
else
v2 = 128;
pthread_mutex_lock(&mtx_pthr_locked);
v3 = *((_QWORD *)a1 + 59);
*((_QWORD *)a1 + 1) = v2;
if ( v3 )
pthread_cleanup_dest_part_0(v3);
}
v4 = a1 + 7;
pthread_mutex_lock(a1 + 7);
v5 = (void *)*((_QWORD *)a1 + 6);
v6 = *((_QWORD *)a1 + 1);
if ( v5 )
CloseHandle(v5);
v7 = *((_QWORD *)a1 + 5) == 0;
*((_QWORD *)a1 + 6) = 0;
if ( v7 )
goto LABEL_16;
pthread_mutex_unlock(v4);
pthread_mutex_destroy((_QWORD **)v4);
*((_QWORD *)a1 + 7) = -1;
*((_DWORD *)a1 + 47) = 1;
while ( 1 )
{
v4 = &mtx_pthr_locked;
while ( !(unsigned int)pthread_mutex_unlock(&mtx_pthr_locked) )
Sleep(0);
_endthreadex(v6);
LABEL_16:
*(_DWORD *)a1 = -559038737;
pthread_mutex_unlock(v4);
pthread_mutex_destroy((_QWORD **)v4);
push_pthread_mem(a1);
TlsSetValue(pthread_tls, 0);
}
}
// 14001ED88: using guessed type __int64 __fastcall _intrinsic_setjmpex(_QWORD, _QWORD);
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001A8A0) ----------------------------------------------------
// Alternative name is 'TlsCallback_2'
__int64 __fastcall _dyn_tls_pthread(__int64 a1, int a2, __int64 a3)
{
char *Value; // rax
char *v5; // rbx
_QWORD **v6; // rsi
unsigned __int64 v7; // rcx
void *v8; // rcx
void *v9; // rcx
bool v10; // zf
void *v11; // rcx
unsigned __int64 v12; // rcx
void *v13; // rcx
if ( !a2 )
{
if ( !a3 )
{
if ( SetThreadName_VEH_handle )
{
RemoveVectoredExceptionHandler(SetThreadName_VEH_handle);
SetThreadName_VEH_handle = 0;
}
}
return 1;
}
if ( a2 != 1 )
{
if ( a2 != 3 )
return 1;
if ( pthread_tls == -1 )
return 1;
Value = (char *)TlsGetValue(pthread_tls);
v5 = Value;
if ( !Value )
return 1;
v6 = (_QWORD **)(Value + 56);
if ( (Value[64] & 0x30) != 0 )
{
v7 = *((_QWORD *)Value + 59);
if ( v7 )
pthread_cleanup_dest_part_0(v7);
v8 = (void *)*((_QWORD *)v5 + 5);
if ( v8 )
{
CloseHandle(v8);
v9 = (void *)*((_QWORD *)v5 + 6);
if ( v9 )
CloseHandle(v9);
*(_OWORD *)(v5 + 40) = 0;
}
goto LABEL_15;
}
v11 = (void *)*((_QWORD *)Value + 6);
if ( *((_DWORD *)Value + 47) )
{
if ( v11 )
{
CloseHandle(v11);
*((_QWORD *)v5 + 6) = 0;
pthread_mutex_destroy(v6);
LABEL_33:
if ( (unsigned int)pthread_spin_destroy() == 1 )
goto LABEL_36;
*((_QWORD *)v5 + 13) = -1;
return 1;
}
}
else
{
if ( v11 )
CloseHandle(v11);
v12 = *((_QWORD *)v5 + 59);
*((_QWORD *)v5 + 6) = 0;
*((_DWORD *)v5 + 47) = 1;
if ( v12 )
pthread_cleanup_dest_part_0(v12);
if ( (v5[68] & 4) != 0 )
{
v13 = (void *)*((_QWORD *)v5 + 5);
*(_DWORD *)v5 = -559038737;
if ( v13 )
{
CloseHandle(v13);
*((_QWORD *)v5 + 5) = 0;
pthread_mutex_destroy(v6);
LABEL_16:
if ( (unsigned int)pthread_spin_destroy() != 1 )
{
v10 = *((_QWORD *)v5 + 58) == 0;
*((_QWORD *)v5 + 13) = -1;
if ( v10 )
push_pthread_mem_part_0(v5);
TlsSetValue(pthread_tls, 0);
return 1;
}
LABEL_36:
replace_spin_keys_part_0();
}
LABEL_15:
pthread_mutex_destroy(v6);
goto LABEL_16;
}
}
pthread_mutex_destroy(v6);
goto LABEL_33;
}
SetThreadName_VEH_handle = (PVOID)_IAT_start__(1, SetThreadName_VEH);
return 1;
}
// 1400284BC: using guessed type __int64 __fastcall _IAT_start__(_QWORD, _QWORD);
//----- (000000014001AAB0) ----------------------------------------------------
__int64 __fastcall _pth_gpointer_locked(unsigned __int64 a1)
{
__int64 pointer; // rsi
pointer = 0;
if ( a1 )
{
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
}
return pointer;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001AAF0) ----------------------------------------------------
void __fastcall thread_print_set(int a1)
{
print_state = a1;
}
// 140027D08: using guessed type int print_state;
//----- (000000014001AB00) ----------------------------------------------------
int __fastcall thread_print(unsigned __int64 a1, const char *a2)
{
int result; // eax
__int64 pointer; // rdi
const void *v5; // r12
int *v6; // rdi
int v7; // r13d
DWORD CurrentThreadId; // ebp
const void *v9; // rdi
DWORD v10; // eax
result = print_state;
if ( print_state )
{
if ( a1 )
{
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
v5 = *(const void **)(pointer + 40);
pthread_mutex_lock(&mtx_pthr_locked);
v6 = (int *)_pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
v7 = *v6;
CurrentThreadId = GetCurrentThreadId();
pthread_mutex_lock(&mtx_pthr_locked);
v9 = (const void *)_pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
return printf_0("T%p %d V=%0X H=%p %s\n", v9, CurrentThreadId, v7, v5, a2);
}
else
{
v10 = GetCurrentThreadId();
return printf_0("T%p %d %s\n", 0, v10, a2);
}
}
return result;
}
// 14001AB6E: control flows out of bounds to 14001EDCC
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 140027D08: using guessed type int print_state;
//----- (000000014001AC20) ----------------------------------------------------
__int64 pthread_timechange_handler_np()
{
return 0;
}
// 14001AC20: using guessed type __int64 pthread_timechange_handler_np();
//----- (000000014001AC30) ----------------------------------------------------
__int64 pthread_num_processors_np()
{
HANDLE CurrentProcess; // rax
BOOL v1; // eax
unsigned int v2; // edx
ULONG_PTR v3; // rax
ULONG_PTR ProcessAffinityMask; // [rsp+20h] [rbp-18h] BYREF
ULONG_PTR SystemAffinityMask[2]; // [rsp+28h] [rbp-10h] BYREF
CurrentProcess = GetCurrentProcess();
v1 = GetProcessAffinityMask(CurrentProcess, &ProcessAffinityMask, SystemAffinityMask);
v2 = 1;
if ( v1 )
{
v3 = ProcessAffinityMask;
if ( ProcessAffinityMask )
{
v2 = 0;
do
{
v2 += v3 & 1;
v3 >>= 1;
}
while ( v3 );
if ( !v2 )
return 1;
}
}
return v2;
}
// 14001AC30: using guessed type __int64 pthread_num_processors_np();
//----- (000000014001AC90) ----------------------------------------------------
__int64 __fastcall pthread_set_num_processors_np(int a1)
{
int v1; // edi
HANDLE CurrentProcess; // rax
int v3; // ebx
ULONG_PTR v4; // rax
DWORD_PTR v5; // rsi
HANDLE v6; // rax
ULONG_PTR ProcessAffinityMask; // [rsp+20h] [rbp-38h] BYREF
ULONG_PTR SystemAffinityMask[6]; // [rsp+28h] [rbp-30h] BYREF
v1 = a1;
if ( !a1 )
v1 = 1;
CurrentProcess = GetCurrentProcess();
v3 = GetProcessAffinityMask(CurrentProcess, &ProcessAffinityMask, SystemAffinityMask);
if ( v3 )
{
v4 = ProcessAffinityMask;
if ( ProcessAffinityMask )
{
v3 = 0;
v5 = 0;
do
{
v5 *= 2LL;
if ( v1 > v3 && (v4 & 1) != 0 )
{
v5 |= 1uLL;
++v3;
}
v4 >>= 1;
}
while ( v4 );
ProcessAffinityMask = 0;
}
else
{
v5 = 0;
v3 = 0;
}
v6 = GetCurrentProcess();
SetProcessAffinityMask(v6, v5);
}
return (unsigned int)v3;
}
//----- (000000014001AD20) ----------------------------------------------------
__int64 __fastcall pthread_once(
int *a1,
void (__fastcall *a2)(__int64, _QWORD *),
__int64 a3,
__int64 a4,
int a5,
__int64 a6)
{
char *v8; // rax
volatile signed __int64 *v9; // rbp
_DWORD *v10; // rdi
int v11; // r12d
__int64 Value; // rax
__int64 v14; // rax
__int64 v15; // rcx
__int64 v16; // rax
FILE *v17; // rax
__int64 v18; // rdx
__int64 v19; // rcx
__int64 v20; // r8
__int64 v21; // r9
signed __int64 v22[4]; // [rsp+0h] [rbp-68h] BYREF
_QWORD v23[2]; // [rsp+20h] [rbp-48h] BYREF
__int64 v24; // [rsp+30h] [rbp-38h]
if ( !a2 )
return 22;
if ( *a1 != 1 )
{
v8 = (char *)enterOnceObject((__int64)a1);
v9 = (volatile signed __int64 *)(v8 + 8);
v10 = v8;
pthread_mutex_lock((volatile signed __int64 *)v8 + 1);
v11 = *a1;
if ( *a1 )
{
if ( v11 != 1 )
{
v17 = __acrt_iob_func(2u);
fprintf_0(v17, " once %p is %d\n", a1, v11);
}
}
else
{
v23[1] = v10;
v23[0] = pthread_once_cleanup;
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
{
Value = _pthread_self_lite_part_0();
if ( !Value )
JUMPOUT(0x14001EDE4LL);
}
v24 = *(_QWORD *)(Value + 24);
_InterlockedOr64(v22, 0);
pthread_once_raw_constprop_0_isra_0();
v14 = (__int64)TlsGetValue(pthread_tls);
if ( !v14 )
{
v14 = _pthread_self_lite_part_0();
if ( !v14 )
JUMPOUT(0x14001EDEELL);
}
*(_QWORD *)(v14 + 24) = v23;
_InterlockedOr64(v22, 0);
a2(v15, v23);
pthread_once_raw_constprop_0_isra_0();
v16 = (__int64)TlsGetValue(pthread_tls);
if ( !v16 )
{
v16 = _pthread_self_lite_part_0();
if ( !v16 )
pthread_once_cold(v19, v18, v20, v21, a5, a6);
}
*(_QWORD *)(v16 + 24) = v24;
*a1 = 1;
}
pthread_mutex_unlock(v9);
if ( v10 )
leaveOnceObject_part_0(v10);
}
return 0;
}
// 14001AE7E: control flows out of bounds to 14001EDEE
// 14001AE96: control flows out of bounds to 14001EDE4
// 14001ADF4: variable 'v15' is possibly undefined
// 14001AE6A: variable 'v19' is possibly undefined
// 14001AE6A: variable 'v18' is possibly undefined
// 14001AE6A: variable 'v20' is possibly undefined
// 14001AE6A: variable 'v21' is possibly undefined
//----- (000000014001AEA0) ----------------------------------------------------
__int64 __fastcall pthread_key_create(_DWORD *a1, __int64 a2)
{
unsigned int v4; // ebx
__int64 *v5; // rax
int v6; // edx
int v8; // edx
int v9; // eax
int v10; // r14d
char *v11; // r12
_QWORD *v12; // rax
if ( !a1 )
return 22;
pthread_rwlock_wrlock(&pthread_key_lock);
v4 = pthread_key_max;
if ( pthread_key_sch < (unsigned int)pthread_key_max )
{
v5 = (__int64 *)((char *)pthread_key_dest + 8 * (unsigned int)pthread_key_sch);
v6 = pthread_key_sch;
while ( *v5 )
{
++v6;
++v5;
if ( pthread_key_max == v6 )
goto LABEL_10;
}
goto LABEL_6;
}
LABEL_10:
if ( pthread_key_sch )
{
v5 = (__int64 *)pthread_key_dest;
v6 = 0;
while ( *v5 )
{
++v6;
++v5;
if ( pthread_key_sch == v6 )
goto LABEL_15;
}
LABEL_6:
*a1 = v6;
if ( !a2 )
a2 = 1;
*v5 = a2;
pthread_rwlock_unlock((_DWORD **)&pthread_key_lock);
return 0;
}
LABEL_15:
if ( pthread_key_max != 0x100000 )
{
v8 = 0x100000;
v9 = 2 * pthread_key_max;
if ( !(2 * pthread_key_max) )
v9 = pthread_key_max + 1;
if ( v9 <= 0x100000 )
v8 = v9;
v10 = v8;
v11 = (char *)realloc_0(pthread_key_dest, 8LL * v8);
if ( v11 )
{
v12 = memset(&v11[8 * v4], 0, 8LL * (v10 - v4));
pthread_key_dest = v11;
*a1 = v4;
if ( !a2 )
a2 = 1;
pthread_key_sch = v4 + 1;
pthread_key_max = v10;
*v12 = a2;
pthread_rwlock_unlock((_DWORD **)&pthread_key_lock);
return 0;
}
}
pthread_rwlock_unlock((_DWORD **)&pthread_key_lock);
return 12;
}
// 14001F460: using guessed type __int64 *pthread_key_lock;
// 140027D48: using guessed type int pthread_key_sch;
// 140027D4C: using guessed type int pthread_key_max;
//----- (000000014001B020) ----------------------------------------------------
__int64 __fastcall pthread_key_delete(unsigned int a1)
{
__int64 result; // rax
bool v3; // cf
char *v4; // rax
char *v5; // rcx
__int64 v6; // rdx
__int64 v7; // r8
result = 22;
if ( a1 < pthread_key_max && pthread_key_dest )
{
pthread_rwlock_wrlock(&pthread_key_lock);
v3 = a1 < pthread_key_sch;
*((_QWORD *)pthread_key_dest + a1) = 0;
if ( v3 )
pthread_key_sch = a1;
pthread_mutex_lock(&mtx_pthr_locked);
if ( idListCnt )
{
v4 = (char *)idList;
v5 = (char *)idList + 16 * idListCnt;
do
{
v6 = *(_QWORD *)v4;
if ( *(_QWORD *)v4 )
{
v7 = *(_QWORD *)(v6 + 80);
if ( v7 )
{
if ( a1 < *(_DWORD *)(v6 + 72) )
{
*(_QWORD *)(v7 + 8LL * a1) = 0;
*(_BYTE *)(*(_QWORD *)(*(_QWORD *)v4 + 88LL) + a1) = 0;
}
}
}
v4 += 16;
}
while ( v5 != v4 );
}
pthread_mutex_unlock(&mtx_pthr_locked);
pthread_rwlock_unlock((_DWORD **)&pthread_key_lock);
return 0;
}
return result;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 14001F460: using guessed type __int64 *pthread_key_lock;
// 140027D28: using guessed type __int64 idListCnt;
// 140027D48: using guessed type int pthread_key_sch;
// 140027D4C: using guessed type int pthread_key_max;
//----- (000000014001B110) ----------------------------------------------------
__int64 __fastcall pthread_getspecific(unsigned int a1)
{
__int64 v1; // rsi
DWORD LastError; // edi
__int64 Value; // rbx
__int64 v4; // r12
v1 = a1;
LastError = GetLastError();
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
v4 = 0;
pthread_spin_lock((volatile __int64 *)(Value + 104));
if ( (unsigned int)v1 < *(_DWORD *)(Value + 72) && *(_BYTE *)(*(_QWORD *)(Value + 88) + v1) )
v4 = *(_QWORD *)(*(_QWORD *)(Value + 80) + 8 * v1);
pthread_spin_unlock((_QWORD *)(Value + 104));
SetLastError(LastError);
return v4;
}
//----- (000000014001B1A0) ----------------------------------------------------
__int64 __fastcall pthread_setspecific(unsigned int a1, __int64 a2)
{
__int64 v2; // rsi
DWORD LastError; // ebp
__int64 Value; // rbx
_QWORD *v6; // rdi
int v8; // r15d
char *v9; // r13
__m128i v10; // xmm6
v2 = a1;
LastError = GetLastError();
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
pthread_spin_lock((volatile __int64 *)(Value + 104));
if ( (unsigned int)v2 < *(_DWORD *)(Value + 72) )
{
v6 = *(_QWORD **)(Value + 80);
LABEL_5:
v6[v2] = a2;
*(_BYTE *)(*(_QWORD *)(Value + 88) + v2) = 1;
pthread_spin_unlock((_QWORD *)(Value + 104));
SetLastError(LastError);
return 0;
}
v8 = v2 + 1;
v6 = realloc_0(*(void **)(Value + 80), 8LL * ((int)v2 + 1));
if ( v6 )
{
v9 = (char *)realloc_0(*(void **)(Value + 88), v8);
v10 = _mm_unpacklo_epi64((__m128i)(unsigned __int64)v6, (__m128i)(unsigned __int64)v9);
if ( v9 )
{
memset(&v6[*(unsigned int *)(Value + 72)], 0, 8LL * (unsigned int)(v8 - *(_DWORD *)(Value + 72)));
memset(&v9[*(unsigned int *)(Value + 72)], 0, (unsigned int)(v8 - *(_DWORD *)(Value + 72)));
*(__m128i *)(Value + 80) = v10;
*(_DWORD *)(Value + 72) = v8;
goto LABEL_5;
}
}
pthread_spin_unlock((_QWORD *)(Value + 104));
return 12;
}
//----- (000000014001B2D0) ----------------------------------------------------
_BOOL8 __fastcall pthread_equal(__int64 a1, __int64 a2)
{
return a1 == a2;
}
//----- (000000014001B2E0) ----------------------------------------------------
void __fastcall pthread_cleanup_dest(unsigned __int64 a1)
{
if ( a1 )
pthread_cleanup_dest_part_0(a1);
}
//----- (000000014001B2F0) ----------------------------------------------------
__int64 pthread_self()
{
__int64 Value; // rax
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( Value )
return *(_QWORD *)(Value + 472);
Value = _pthread_self_lite_part_0();
if ( Value )
return *(_QWORD *)(Value + 472);
else
return 0;
}
// 14001B2F0: using guessed type __int64 pthread_self();
//----- (000000014001B340) ----------------------------------------------------
_QWORD *pthread_getevent()
{
_QWORD *result; // rax
pthread_once_raw_constprop_0_isra_0();
result = TlsGetValue(pthread_tls);
if ( result )
return (_QWORD *)result[6];
result = (_QWORD *)_pthread_self_lite_part_0();
if ( result )
return (_QWORD *)result[6];
return result;
}
//----- (000000014001B380) ----------------------------------------------------
__int64 __fastcall pthread_gethandle(unsigned __int64 a1)
{
__int64 pointer; // rbx
if ( a1
&& (pthread_mutex_lock(&mtx_pthr_locked),
pointer = _pthread_get_pointer(a1),
pthread_mutex_unlock(&mtx_pthr_locked),
pointer) )
{
return *(_QWORD *)(pointer + 40);
}
else
{
return 0;
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001B3D0) ----------------------------------------------------
__int64 pthread_getclean()
{
__int64 result; // rax
pthread_once_raw_constprop_0_isra_0();
result = (__int64)TlsGetValue(pthread_tls);
if ( result || (result = _pthread_self_lite_part_0()) != 0 )
result += 24;
return result;
}
//----- (000000014001B410) ----------------------------------------------------
__int64 __fastcall pthread_get_concurrency(_DWORD *a1)
{
*a1 = pthread_concur;
return 0;
}
// 140027D54: using guessed type int pthread_concur;
//----- (000000014001B420) ----------------------------------------------------
__int64 __fastcall pthread_set_concurrency(int a1)
{
pthread_concur = a1;
return 0;
}
// 140027D54: using guessed type int pthread_concur;
//----- (000000014001B430) ----------------------------------------------------
void __fastcall __noreturn pthread_exit(unsigned __int64 ReturnCode)
{
_JBTYPE *v2; // rax
unsigned __int64 v3; // rcx
_JBTYPE *v4; // rbx
_QWORD *Value; // rax
_QWORD *v6; // rbx
void *v7; // rcx
bool v8; // zf
void *v9; // rcx
v2 = (_JBTYPE *)_pthread_self_lite();
v3 = v2[29].Part[1];
v4 = v2;
v2->Part[1] = ReturnCode;
if ( v3 )
pthread_cleanup_dest_part_0(v3);
if ( (v4[4].Part[0] & 0x30) == 0 )
longjmp(v4 + 13, 1);
Value = TlsGetValue(pthread_tls);
v6 = Value;
if ( Value )
{
v7 = (void *)Value[6];
if ( !Value[5] )
{
*(_DWORD *)Value = -559038737;
if ( v7 )
CloseHandle(v7);
LODWORD(ReturnCode) = *((_DWORD *)v6 + 2);
v6[6] = 0;
goto LABEL_12;
}
ReturnCode = Value[1];
*((_DWORD *)Value + 47) = 1;
if ( v7 )
CloseHandle(v7);
v8 = (*((_BYTE *)v6 + 68) & 4) == 0;
v6[6] = 0;
if ( !v8 )
goto LABEL_11;
}
while ( 1 )
{
_endthreadex(ReturnCode);
LABEL_11:
v9 = (void *)v6[5];
*(_DWORD *)v6 = -559038737;
CloseHandle(v9);
v6[5] = 0;
LABEL_12:
push_pthread_mem(v6);
TlsSetValue(pthread_tls, 0);
}
}
//----- (000000014001B510) ----------------------------------------------------
__int64 _pthread_shallcancel()
{
__int64 Value; // rax
if ( pthread_cancelling
&& ((pthread_once_raw_constprop_0_isra_0(), (Value = (__int64)TlsGetValue(pthread_tls)) != 0)
|| (Value = _pthread_self_lite_part_0()) != 0)
&& *(int *)(Value + 32) <= 0
&& (*(_BYTE *)(Value + 64) & 3) != 0 )
{
return *(_DWORD *)(Value + 68) & 1;
}
else
{
return 0;
}
}
// 140027D58: using guessed type int pthread_cancelling;
//----- (000000014001B570) ----------------------------------------------------
__int64 __fastcall pthread_setnobreak(int a1)
{
__int64 result; // rax
pthread_once_raw_constprop_0_isra_0();
result = (__int64)TlsGetValue(pthread_tls);
if ( result || (result = _pthread_self_lite_part_0()) != 0 )
{
if ( a1 <= 0 )
_InterlockedSub((volatile signed __int32 *)(result + 32), 1u);
else
_InterlockedAdd((volatile signed __int32 *)(result + 32), 1u);
}
return result;
}
//----- (000000014001B5C0) ----------------------------------------------------
void __noreturn pthread_invoke_cancel()
{
_BYTE *v0; // rbx
__int64 i; // rbx
v0 = _pthread_self_lite();
v0[64] = v0[64] & 0xF3 | 4;
pthread_setnobreak(1);
_InterlockedSub(&pthread_cancelling, 1u);
for ( i = *((_QWORD *)v0 + 3); i; i = *(_QWORD *)(i + 16) )
(*(void (__fastcall **)(_QWORD))i)(*(_QWORD *)(i + 8));
pthread_setnobreak(0);
pthread_exit(0xDEADBEEF);
}
// 140027D58: using guessed type int pthread_cancelling;
//----- (000000014001B620) ----------------------------------------------------
void __fastcall test_cancel_locked(unsigned __int64 a1)
{
__int64 pointer; // rbx
if ( a1 )
{
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
if ( pointer )
{
if ( (*(_BYTE *)(pointer + 64) & 0xC) == 0
&& !*(_DWORD *)(pointer + 188)
&& (*(_DWORD *)(pointer + 68) & 3) == 3
&& !WaitForSingleObject(*(HANDLE *)(pointer + 48), 0) )
{
pthread_mutex_unlock((volatile signed __int64 *)(pointer + 56));
pthread_invoke_cancel();
}
}
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001B6A0) ----------------------------------------------------
__int64 pthread_testcancel()
{
__int64 result; // rax
__int64 v1; // rbx
char v2; // al
int v3; // edx
void *v4; // rcx
pthread_once_raw_constprop_0_isra_0();
result = (__int64)TlsGetValue(pthread_tls);
v1 = result;
if ( result || (result = _pthread_self_lite_part_0(), (v1 = result) != 0) )
{
if ( (*(_BYTE *)(v1 + 64) & 0xC) == 0 )
{
result = (unsigned int)pthread_cancelling;
if ( pthread_cancelling )
{
pthread_mutex_lock((volatile signed __int64 *)(v1 + 56));
v2 = *(_BYTE *)(v1 + 64);
if ( (v2 & 3) != 0 )
{
v3 = *(_DWORD *)(v1 + 68);
if ( (v3 & 1) != 0 && *(int *)(v1 + 32) <= 0 )
{
v4 = *(void **)(v1 + 48);
*(_DWORD *)(v1 + 68) = v3 & 0xFFFFFFFE;
*(_BYTE *)(v1 + 64) = v2 & 0xF3 | 4;
if ( v4 )
ResetEvent(v4);
pthread_mutex_unlock((volatile signed __int64 *)(v1 + 56));
pthread_invoke_cancel();
}
}
return pthread_mutex_unlock((volatile signed __int64 *)(v1 + 56));
}
}
}
return result;
}
// 140027D58: using guessed type int pthread_cancelling;
//----- (000000014001B760) ----------------------------------------------------
__int64 __fastcall pthread_delay_np(__int64 a1)
{
unsigned __int64 v1; // rsi
DWORD v2; // edi
__int64 Value; // rbx
void *v4; // rcx
if ( !a1 )
{
pthread_once_raw_constprop_0_isra_0();
if ( !TlsGetValue(pthread_tls) )
_pthread_self_lite_part_0();
goto LABEL_11;
}
v1 = pthread_time_in_ms_from_timespec(a1);
if ( v1 > 0xFFFFFFFE )
{
pthread_once_raw_constprop_0_isra_0();
v2 = -1;
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
goto LABEL_6;
}
pthread_once_raw_constprop_0_isra_0();
v2 = v1;
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
if ( !(_DWORD)v1 )
{
LABEL_11:
pthread_testcancel();
Sleep(0);
pthread_testcancel();
return 0;
}
LABEL_6:
pthread_testcancel();
v4 = *(void **)(Value + 48);
if ( v4 )
pthread_wait_for_single_object(v4, v2);
else
Sleep(v2);
pthread_testcancel();
return 0;
}
//----- (000000014001B870) ----------------------------------------------------
__int64 __fastcall pthread_delay_np_ms(DWORD dwMilliseconds)
{
__int64 Value; // rbx
void *v3; // rcx
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
if ( dwMilliseconds )
{
pthread_testcancel();
v3 = *(void **)(Value + 48);
if ( v3 )
pthread_wait_for_single_object(v3, dwMilliseconds);
else
Sleep(dwMilliseconds);
pthread_testcancel();
return 0;
}
else
{
pthread_testcancel();
Sleep(0);
pthread_testcancel();
return 0;
}
}
//----- (000000014001B900) ----------------------------------------------------
__int64 __fastcall pthread_cancel(unsigned __int64 a1)
{
__int64 pointer; // rbx
char *v3; // rcx
__int64 Value; // rax
char v5; // dl
void *v6; // rcx
void *v8; // rcx
void *v9; // rcx
void *v10; // rcx
char v11; // al
void *v12; // rcx
struct _CONTEXT dwFlags; // [rsp+20h] [rbp-4F8h] BYREF
if ( !a1 )
return 3;
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
if ( !pointer )
return 3;
v3 = *(char **)(pointer + 40);
if ( (unsigned __int64)(v3 - 1) > 0xFFFFFFFFFFFFFFFDuLL || !GetHandleInformation(v3, (LPDWORD)&dwFlags) )
return 3;
pthread_mutex_lock((volatile signed __int64 *)(pointer + 56));
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( Value || (Value = _pthread_self_lite_part_0()) != 0 )
{
v5 = *(_BYTE *)(pointer + 64);
if ( a1 == *(_QWORD *)(Value + 472) )
{
if ( (v5 & 3) == 0 )
{
*(_BYTE *)(pointer + 64) = v5 & 0xFC | 1;
_InterlockedAdd(&pthread_cancelling, 1u);
v8 = *(void **)(pointer + 48);
if ( v8 )
SetEvent(v8);
if ( (*(_DWORD *)(pointer + 68) & 3) == 3 )
{
*(_DWORD *)(pointer + 68) &= ~1u;
*(_BYTE *)(pointer + 64) = *(_BYTE *)(pointer + 64) & 0xF3 | 4;
pthread_mutex_unlock((volatile signed __int64 *)(pointer + 56));
pthread_invoke_cancel();
}
goto LABEL_11;
}
goto LABEL_13;
}
}
else
{
v5 = *(_BYTE *)(pointer + 64);
}
if ( (*(_DWORD *)(pointer + 68) & 3) != 3 )
{
if ( (v5 & 3) == 0 )
{
*(_BYTE *)(pointer + 64) = v5 & 0xFC | 1;
_InterlockedAdd(&pthread_cancelling, 1u);
v6 = *(void **)(pointer + 48);
if ( v6 )
SetEvent(v6);
LABEL_11:
pthread_mutex_unlock((volatile signed __int64 *)(pointer + 56));
return 0;
}
goto LABEL_13;
}
if ( (v5 & 0xC) != 0 )
{
LABEL_13:
pthread_mutex_unlock((volatile signed __int64 *)(pointer + 56));
if ( (*(_BYTE *)(pointer + 64) & 0xC) == 0 )
return 0;
return 3;
}
if ( (v5 & 0xF) == 0 )
{
v9 = *(void **)(pointer + 40);
dwFlags.ContextFlags = 1048577;
SuspendThread(v9);
if ( WaitForSingleObject(*(HANDLE *)(pointer + 40), 0) == 258 )
{
GetThreadContext(*(HANDLE *)(pointer + 40), &dwFlags);
v10 = *(void **)(pointer + 40);
dwFlags.Rip = (DWORD64)pthread_invoke_cancel;
SetThreadContext(v10, &dwFlags);
v11 = *(_BYTE *)(pointer + 64);
*(_DWORD *)(pointer + 68) &= ~1u;
*(_BYTE *)(pointer + 64) = v11 & 0xF0 | 5;
_InterlockedAdd(&pthread_cancelling, 1u);
v12 = *(void **)(pointer + 48);
if ( v12 )
SetEvent(v12);
pthread_mutex_unlock((volatile signed __int64 *)(pointer + 56));
ResumeThread(*(HANDLE *)(pointer + 40));
}
goto LABEL_11;
}
return 3;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
// 140027D58: using guessed type int pthread_cancelling;
//----- (000000014001BB20) ----------------------------------------------------
__int64 __fastcall pthread_kill(unsigned __int64 a1, int a2)
{
__int64 pointer; // rax
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
if ( !pointer
|| *(_QWORD *)(pointer + 472) != a1
|| (*(_BYTE *)(pointer + 64) & 0xC) != 0
|| *(_DWORD *)(pointer + 188)
|| (unsigned __int64)(*(_QWORD *)(pointer + 40) - 1LL) > 0xFFFFFFFFFFFFFFFDuLL )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
else
{
pthread_mutex_unlock(&mtx_pthr_locked);
if ( a2 )
{
if ( (unsigned int)(a2 - 2) > 0x15 )
return 22;
else
return pthread_cancel(a1);
}
else
{
return 0;
}
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001BBC0) ----------------------------------------------------
__int64 __fastcall pthread_get_state(_DWORD *a1, unsigned int a2)
{
return a2 & *a1;
}
//----- (000000014001BBD0) ----------------------------------------------------
__int64 __fastcall pthread_set_state(int *a1, int a2, int a3)
{
__int64 result; // rax
int v4; // edx
result = 22;
v4 = ~a2;
if ( (a3 & v4) == 0 )
{
*a1 = a3 | *a1 & v4;
return 0;
}
return result;
}
//----- (000000014001BBF0) ----------------------------------------------------
__int64 __fastcall pthread_attr_init(__int64 a1)
{
*(_QWORD *)(a1 + 4) = 0;
*(_QWORD *)(a1 + 12) = 0;
*(_QWORD *)(a1 + 20) = 0;
*(_DWORD *)(a1 + 28) = 0;
*(_DWORD *)a1 = 1;
return 0;
}
//----- (000000014001BC20) ----------------------------------------------------
__int64 __fastcall pthread_attr_destroy(_QWORD *a1)
{
*a1 = 0;
a1[1] = 0;
a1[2] = 0;
a1[3] = 0;
return 0;
}
//----- (000000014001BC50) ----------------------------------------------------
__int64 __fastcall pthread_attr_setdetachstate(unsigned int *a1, int a2)
{
if ( (a2 & 0xFFFFFFFB) != 0 )
return 22;
*a1 = a2 | *a1 & 0xFFFFFFFB;
return 0;
}
//----- (000000014001BC80) ----------------------------------------------------
__int64 __fastcall pthread_attr_getdetachstate(_DWORD *a1, int *a2)
{
*a2 = *a1 & 4;
return 0;
}
//----- (000000014001BC90) ----------------------------------------------------
__int64 __fastcall pthread_attr_setinheritsched(unsigned int *a1, int a2)
{
if ( !a1 || (a2 & 0xFFFFFFF7) != 0 )
return 22;
*a1 = a2 | *a1 & 0xFFFFFFF7;
return 0;
}
//----- (000000014001BCC0) ----------------------------------------------------
__int64 __fastcall pthread_attr_getinheritsched(_DWORD *a1, int *a2)
{
*a2 = *a1 & 8;
return 0;
}
//----- (000000014001BCD0) ----------------------------------------------------
__int64 __fastcall pthread_attr_setscope(unsigned int *a1, int a2)
{
if ( (a2 & 0xFFFFFFEF) != 0 )
return 22;
*a1 = a2 | *a1 & 0xFFFFFFEF;
return 0;
}
//----- (000000014001BD00) ----------------------------------------------------
__int64 __fastcall pthread_attr_getscope(_DWORD *a1, int *a2)
{
*a2 = *a1 & 0x10;
return 0;
}
//----- (000000014001BD10) ----------------------------------------------------
__int64 __fastcall pthread_attr_getstack(__int64 a1, _QWORD *a2, _QWORD *a3)
{
__int64 v4; // rdx
v4 = *(_QWORD *)(a1 + 16);
*a2 = *(_QWORD *)(a1 + 8) - v4;
*a3 = v4;
return 0;
}
//----- (000000014001BD30) ----------------------------------------------------
__int64 __fastcall pthread_attr_setstack(__int64 a1, __int64 a2, __int64 a3)
{
*(_QWORD *)(a1 + 16) = a3;
*(_QWORD *)(a1 + 8) = a3 + a2;
return 0;
}
//----- (000000014001BD40) ----------------------------------------------------
__int64 __fastcall pthread_attr_getstackaddr(__int64 a1, _QWORD *a2)
{
*a2 = *(_QWORD *)(a1 + 8);
return 0;
}
//----- (000000014001BD50) ----------------------------------------------------
__int64 __fastcall pthread_attr_setstackaddr(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 8) = a2;
return 0;
}
//----- (000000014001BD60) ----------------------------------------------------
__int64 __fastcall pthread_attr_getstacksize(__int64 a1, _QWORD *a2)
{
*a2 = *(_QWORD *)(a1 + 16);
return 0;
}
//----- (000000014001BD70) ----------------------------------------------------
__int64 __fastcall pthread_attr_setstacksize(__int64 a1, __int64 a2)
{
*(_QWORD *)(a1 + 16) = a2;
return 0;
}
//----- (000000014001BD80) ----------------------------------------------------
__int64 __fastcall pthread_setcancelstate(unsigned int a1, int *a2)
{
__int64 Value; // rbx
unsigned __int64 v5; // rcx
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
{
Value = _pthread_self_lite_part_0();
if ( !Value )
return 22;
}
if ( a1 > 1 )
return 22;
pthread_mutex_lock((volatile signed __int64 *)(Value + 56));
if ( a2 )
*a2 = *(_DWORD *)(Value + 68) & 1;
v5 = *(_QWORD *)(Value + 472);
*(_DWORD *)(Value + 68) = a1 | *(_DWORD *)(Value + 68) & 0xFFFFFFFE;
test_cancel_locked(v5);
pthread_mutex_unlock((volatile signed __int64 *)(Value + 56));
return 0;
}
//----- (000000014001BE10) ----------------------------------------------------
__int64 __fastcall pthread_setcanceltype(int a1, int *a2)
{
__int64 Value; // rbx
unsigned __int64 v5; // rcx
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
{
Value = _pthread_self_lite_part_0();
if ( !Value )
return 22;
}
if ( (a1 & 0xFFFFFFFD) != 0 )
return 22;
pthread_mutex_lock((volatile signed __int64 *)(Value + 56));
if ( a2 )
*a2 = *(_DWORD *)(Value + 68) & 2;
v5 = *(_QWORD *)(Value + 472);
*(_DWORD *)(Value + 68) = a1 | *(_DWORD *)(Value + 68) & 0xFFFFFFFD;
test_cancel_locked(v5);
pthread_mutex_unlock((volatile signed __int64 *)(Value + 56));
return 0;
}
//----- (000000014001BEB0) ----------------------------------------------------
__int64 __fastcall pthread_create(_QWORD *a1, int *a2, __int64 a3, __int64 a4)
{
__int64 v8; // rax
__int64 v9; // rbx
int v10; // esi
HANDLE EventA; // rax
bool v12; // zf
unsigned int v13; // edx
int v14; // eax
__int64 v15; // rsi
int v16; // eax
char *v17; // rsi
int v18; // eax
int v19; // edx
void *v21; // rcx
__int64 Value; // rax
v8 = pop_pthread_mem();
v9 = v8;
if ( !v8 )
return 11;
if ( a1 )
*a1 = *(_QWORD *)(v8 + 472);
*(_QWORD *)(v8 + 8) = a4;
*(_QWORD *)(v8 + 16) = a3;
v10 = 0;
*(_DWORD *)(v8 + 188) = 0;
*(_DWORD *)(v8 + 68) = 1;
*(_QWORD *)(v8 + 40) = -1;
while ( 1 )
{
EventA = CreateEventA(0, 1, 0, 0);
*(_QWORD *)(v9 + 48) = EventA;
if ( EventA )
break;
if ( v10 )
{
++v10;
Sleep(0x14u);
if ( v10 == 5 )
break;
}
else
{
v10 = 1;
Sleep(0);
}
}
*(_QWORD *)(v9 + 56) = -1;
if ( (unsigned int)pthread_spin_destroy() == 1 )
goto LABEL_39;
v12 = *(_QWORD *)(v9 + 48) == 0;
*(_DWORD *)v9 = -1162743795;
*(_QWORD *)(v9 + 104) = -1;
*(_DWORD *)(v9 + 192) = 0;
*(_DWORD *)(v9 + 184) = 0;
if ( v12 )
{
LABEL_31:
if ( a1 )
*a1 = 0;
if ( !*(_QWORD *)(v9 + 464) )
push_pthread_mem_part_0((_QWORD *)v9);
return 11;
}
v13 = 0;
if ( a2 )
{
v14 = *a2;
v15 = *((_QWORD *)a2 + 2);
*(_DWORD *)(v9 + 68) = *a2;
if ( (v14 & 8) != 0 )
{
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( !Value )
Value = _pthread_self_lite_part_0();
v16 = *(_DWORD *)(Value + 192);
}
else
{
v16 = a2[6];
}
v13 = v15;
*(_DWORD *)(v9 + 192) = v16;
}
v17 = (char *)_beginthreadex(0, v13, (_beginthreadex_proc_type)pthread_create_wrapper, (void *)v9, 4u, 0);
if ( (unsigned __int64)(v17 - 1) > 0xFFFFFFFFFFFFFFFDuLL )
{
v21 = *(void **)(v9 + 48);
if ( v21 )
CloseHandle(v21);
pthread_mutex_destroy((_QWORD **)(v9 + 56));
if ( (unsigned int)pthread_spin_destroy() != 1 )
{
*(_QWORD *)(v9 + 104) = -1;
*(_OWORD *)(v9 + 40) = 0;
goto LABEL_31;
}
LABEL_39:
replace_spin_keys_part_0();
}
v18 = *(_DWORD *)(v9 + 192);
v19 = -15;
if ( v18 >= -14 )
{
v19 = -2;
if ( v18 >= -1 )
{
v19 = 2;
if ( v18 <= 2 )
v19 = *(_DWORD *)(v9 + 192);
if ( v18 >= 15 )
v19 = 15;
}
}
SetThreadPriority(v17, v19);
ResetEvent(*(HANDLE *)(v9 + 48));
if ( (*(_BYTE *)(v9 + 68) & 4) != 0 )
{
*(_QWORD *)(v9 + 40) = 0;
ResumeThread(v17);
CloseHandle(v17);
}
else
{
*(_QWORD *)(v9 + 40) = v17;
ResumeThread(v17);
}
Sleep(0);
return 0;
}
//----- (000000014001C140) ----------------------------------------------------
__int64 __fastcall pthread_join(unsigned __int64 a1, _QWORD *a2)
{
__int64 pointer; // rbx
void *v5; // rcx
__int64 Value; // rax
char *v7; // rcx
void *v8; // rcx
bool v9; // zf
DWORD dwFlags[11]; // [rsp+2Ch] [rbp-2Ch] BYREF
if ( !a1 )
return 3;
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
if ( !pointer )
return 3;
v5 = *(void **)(pointer + 40);
if ( !v5 || !GetHandleInformation(v5, dwFlags) )
return 3;
if ( (*(_BYTE *)(pointer + 68) & 4) != 0 )
return 22;
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( (Value || (Value = _pthread_self_lite_part_0()) != 0) && a1 == *(_QWORD *)(Value + 472) )
return 36;
v7 = *(char **)(pointer + 40);
if ( !*(_DWORD *)(pointer + 188) || (unsigned __int64)(v7 - 1) <= 0xFFFFFFFFFFFFFFFDuLL )
{
WaitForSingleObject(v7, 0xFFFFFFFF);
v7 = *(char **)(pointer + 40);
}
CloseHandle(v7);
v8 = *(void **)(pointer + 48);
if ( v8 )
CloseHandle(v8);
*(_QWORD *)(pointer + 48) = 0;
if ( a2 )
*a2 = *(_QWORD *)(pointer + 8);
pthread_mutex_destroy((_QWORD **)(pointer + 56));
if ( (unsigned int)pthread_spin_destroy() == 1 )
replace_spin_keys_part_0();
v9 = *(_QWORD *)(pointer + 464) == 0;
*(_QWORD *)(pointer + 104) = -1;
if ( v9 )
push_pthread_mem_part_0((_QWORD *)pointer);
return 0;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001C2D0) ----------------------------------------------------
__int64 __fastcall pthread_tryjoin(unsigned __int64 a1, _QWORD *a2)
{
__int64 pointer; // rax
__int64 v5; // rbx
void *v6; // rcx
__int64 Value; // rax
__int64 v8; // rdx
void *v9; // rcx
void *v10; // rcx
bool v11; // zf
DWORD dwFlags[11]; // [rsp+2Ch] [rbp-2Ch] BYREF
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
v5 = pointer;
if ( !pointer || (v6 = *(void **)(pointer + 40)) == 0 || !GetHandleInformation(v6, dwFlags) )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
if ( (*(_BYTE *)(v5 + 68) & 4) != 0 )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 22;
}
pthread_once_raw_constprop_0_isra_0();
Value = (__int64)TlsGetValue(pthread_tls);
if ( Value || (Value = _pthread_self_lite_part_0(), v8 = 0, Value) )
v8 = *(_QWORD *)(Value + 472);
if ( a1 == v8 )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 36;
}
else
{
v9 = *(void **)(v5 + 40);
if ( !*(_DWORD *)(v5 + 188) )
{
if ( WaitForSingleObject(v9, 0) && !*(_DWORD *)(v5 + 188) )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 16;
}
v9 = *(void **)(v5 + 40);
}
CloseHandle(v9);
v10 = *(void **)(v5 + 48);
if ( v10 )
CloseHandle(v10);
*(_QWORD *)(v5 + 48) = 0;
if ( a2 )
*a2 = *(_QWORD *)(v5 + 8);
pthread_mutex_destroy((_QWORD **)(v5 + 56));
if ( (unsigned int)pthread_spin_destroy() == 1 )
replace_spin_keys_part_0();
v11 = *(_QWORD *)(v5 + 464) == 0;
*(_QWORD *)(v5 + 104) = -1;
if ( v11 )
push_pthread_mem_part_0((_QWORD *)v5);
pthread_mutex_unlock(&mtx_pthr_locked);
return 0;
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001C4A0) ----------------------------------------------------
__int64 __fastcall pthread_detach(unsigned __int64 a1)
{
__int64 pointer; // rbx
void *v3; // rcx
int v4; // eax
void *v5; // rcx
void *v6; // rcx
bool v7; // zf
DWORD dwFlags[11]; // [rsp+2Ch] [rbp-2Ch] BYREF
if ( !a1 )
{
pthread_mutex_lock(&mtx_pthr_locked);
LABEL_15:
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
pthread_mutex_lock(&mtx_pthr_locked);
if ( !pointer )
goto LABEL_15;
v3 = *(void **)(pointer + 40);
if ( !v3 || !GetHandleInformation(v3, dwFlags) )
goto LABEL_15;
v4 = *(_DWORD *)(pointer + 68);
if ( (v4 & 4) != 0 )
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 22;
}
else
{
v5 = *(void **)(pointer + 40);
*(_QWORD *)(pointer + 40) = 0;
*(_DWORD *)(pointer + 68) = v4 | 4;
if ( v5 )
{
CloseHandle(v5);
if ( *(_DWORD *)(pointer + 188) )
{
v6 = *(void **)(pointer + 48);
if ( v6 )
{
CloseHandle(v6);
*(_QWORD *)(pointer + 48) = 0;
}
pthread_mutex_destroy((_QWORD **)(pointer + 56));
if ( (unsigned int)pthread_spin_destroy() == 1 )
replace_spin_keys_part_0();
v7 = *(_QWORD *)(pointer + 464) == 0;
*(_QWORD *)(pointer + 104) = -1;
if ( v7 )
push_pthread_mem_part_0((_QWORD *)pointer);
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return 0;
}
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001C5F0) ----------------------------------------------------
__int64 pthread_getconcurrency()
{
return (unsigned int)dummy_concurrency_level;
}
// 14001C5F0: using guessed type __int64 pthread_getconcurrency();
// 140027CF8: using guessed type int dummy_concurrency_level;
//----- (000000014001C600) ----------------------------------------------------
__int64 __fastcall pthread_setconcurrency(int a1)
{
dummy_concurrency_level = a1;
return 0;
}
// 140027CF8: using guessed type int dummy_concurrency_level;
//----- (000000014001C610) ----------------------------------------------------
__int64 __fastcall pthread_setname_np(unsigned __int64 a1, const char *a2)
{
__int64 pointer; // rsi
unsigned int v5; // ebx
char *v6; // rbp
void *v7; // rcx
int v8; // eax
ULONG_PTR Arguments[2]; // [rsp+20h] [rbp-48h] BYREF
int v11; // [rsp+30h] [rbp-38h]
int v12; // [rsp+34h] [rbp-34h]
if ( !a2 )
return 22;
if ( a1
&& (pthread_mutex_lock(&mtx_pthr_locked),
pointer = _pthread_get_pointer(a1),
pthread_mutex_unlock(&mtx_pthr_locked),
pointer)
&& *(_QWORD *)(pointer + 472) == a1
&& (*(_BYTE *)(pointer + 64) & 0xC) == 0
&& (v5 = *(_DWORD *)(pointer + 188)) == 0
&& (unsigned __int64)(*(_QWORD *)(pointer + 40) - 1LL) <= 0xFFFFFFFFFFFFFFFDuLL )
{
v6 = strdup(a2);
if ( v6 )
{
v7 = *(void **)(pointer + 96);
if ( v7 )
free(v7);
v8 = *(_DWORD *)(pointer + 112);
*(_QWORD *)(pointer + 96) = v6;
LODWORD(Arguments[0]) = 4096;
Arguments[1] = (ULONG_PTR)a2;
v12 = 0;
v11 = v8;
if ( IsDebuggerPresent() || SetThreadName_VEH_handle )
{
RaiseException(0x406D1388u, 0, 3u, Arguments);
return 0;
}
}
else
{
return 12;
}
}
else
{
return 3;
}
return v5;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001C740) ----------------------------------------------------
__int64 __fastcall pthread_getname_np(unsigned __int64 a1, _BYTE *a2, size_t a3)
{
_BYTE *v4; // rbx
__int64 pointer; // rbp
unsigned int v7; // r12d
char *v8; // rdi
char v9; // al
v4 = a2;
if ( !a2 )
return 22;
if ( !a1 )
return 3;
pthread_mutex_lock(&mtx_pthr_locked);
pointer = _pthread_get_pointer(a1);
pthread_mutex_unlock(&mtx_pthr_locked);
if ( !pointer )
return 3;
if ( *(_QWORD *)(pointer + 472) != a1 )
return 3;
if ( (*(_BYTE *)(pointer + 64) & 0xC) != 0 )
return 3;
v7 = *(_DWORD *)(pointer + 188);
if ( v7 || (unsigned __int64)(*(_QWORD *)(pointer + 40) - 1LL) > 0xFFFFFFFFFFFFFFFDuLL )
return 3;
if ( a3 )
{
v8 = *(char **)(pointer + 96);
if ( !v8 )
{
LABEL_16:
*v4 = 0;
return v7;
}
if ( strlen(*(const char **)(pointer + 96)) < a3 && a3 - 1 <= 0x7FFFFFFE )
{
if ( a3 != 1 )
{
do
{
v9 = *v8;
if ( !*v8 )
break;
--a3;
++v4;
++v8;
*(v4 - 1) = v9;
}
while ( a3 > 1 );
}
goto LABEL_16;
}
}
return 34;
}
// 14001F458: using guessed type signed __int64 mtx_pthr_locked;
//----- (000000014001C860) ----------------------------------------------------
unsigned __int64 pthread_time_in_ms()
{
struct _FILETIME SystemTimeAsFileTime; // [rsp+28h] [rbp-10h] BYREF
GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
return (SystemTimeAsFileTime.dwLowDateTime
- 116444736000000000LL
+ ((unsigned __int64)SystemTimeAsFileTime.dwHighDateTime << 32))
/ 0x2710;
}
//----- (000000014001C8B0) ----------------------------------------------------
unsigned __int64 __fastcall pthread_time_in_ms_from_timespec(__int64 a1)
{
return (*(_DWORD *)(a1 + 8) + 999999) / 0xF4240uLL + 1000LL * *(_QWORD *)a1;
}
//----- (000000014001C8E0) ----------------------------------------------------
unsigned __int64 __fastcall pthread_rel_time_in_ms(__int64 a1)
{
unsigned __int64 v1; // rbx
unsigned __int64 v2; // rdx
unsigned __int64 result; // rax
struct _FILETIME SystemTimeAsFileTime; // [rsp+28h] [rbp-10h] BYREF
v1 = (*(_DWORD *)(a1 + 8) + 999999) / 0xF4240uLL + 1000LL * *(_QWORD *)a1;
GetSystemTimeAsFileTime(&SystemTimeAsFileTime);
v2 = (((unsigned __int64)SystemTimeAsFileTime.dwHighDateTime << 32)
+ SystemTimeAsFileTime.dwLowDateTime
- 116444736000000000LL)
/ 0x2710;
result = v1 - v2;
if ( v1 < v2 )
return 0;
return result;
}
//----- (000000014001C960) ----------------------------------------------------
DWORD __fastcall pthread_wait_for_single_object(HANDLE hHandle, DWORD a2)
{
ULONGLONG TickCount64; // rax
DWORD v4; // edx
ULONGLONG i; // rsi
ULONGLONG v6; // rax
DWORD v7; // ebx
if ( a2 - 1 > 0xFFFFFFFD )
return WaitForSingleObject(hHandle, a2);
TickCount64 = GetTickCount64();
v4 = a2;
for ( i = TickCount64 + a2; ; v4 = i - v6 )
{
v7 = WaitForSingleObject(hHandle, v4);
if ( v7 != 258 )
break;
v6 = GetTickCount64();
if ( v6 >= i )
break;
}
return v7;
}
//----- (000000014001C9E0) ----------------------------------------------------
DWORD __fastcall pthread_wait_for_multiple_objects(DWORD nCount, HANDLE *lpHandles, BOOL bWaitAll, DWORD a4)
{
ULONGLONG TickCount64; // rax
DWORD v8; // r9d
ULONGLONG i; // rsi
ULONGLONG v10; // rax
DWORD v11; // ebx
if ( a4 - 1 > 0xFFFFFFFD )
return WaitForMultipleObjects(nCount, lpHandles, bWaitAll, a4);
TickCount64 = GetTickCount64();
v8 = a4;
for ( i = TickCount64 + a4; ; v8 = i - v10 )
{
v11 = WaitForMultipleObjects(nCount, lpHandles, bWaitAll, v8);
if ( v11 != 258 )
break;
v10 = GetTickCount64();
if ( v10 >= i )
break;
}
return v11;
}
//----- (000000014001CA80) ----------------------------------------------------
__int64 __fastcall rwl_ref_destroy(_DWORD **a1, _QWORD *a2)
{
_DWORD *v4; // rax
unsigned int v5; // ebp
*a2 = 0;
pthread_spin_lock(&rwl_global);
if ( !a1 )
{
v5 = 22;
goto LABEL_5;
}
v4 = *a1;
v5 = 22;
if ( *a1 )
{
if ( v4 == (_DWORD *)-1LL )
{
LABEL_8:
*a1 = 0;
v5 = 0;
goto LABEL_5;
}
if ( *v4 == -1162743571 )
{
v5 = 16;
if ( !v4[1] )
{
*a2 = v4;
goto LABEL_8;
}
}
}
LABEL_5:
pthread_spin_unlock(&rwl_global);
return v5;
}
// 14001F478: using guessed type __int64 rwl_global;
//----- (000000014001CB10) ----------------------------------------------------
__int64 __fastcall rwl_ref_unlock(_DWORD **a1)
{
_DWORD *v2; // rax
unsigned int v3; // ebx
pthread_spin_lock(&rwl_global);
if ( a1 )
{
v2 = *a1;
v3 = 22;
if ( v2 )
{
if ( *v2 == -1162743571 )
{
v3 = 1;
if ( v2 != (_DWORD *)-1LL )
{
++v2[1];
v3 = 0;
}
}
}
}
else
{
v3 = 22;
}
pthread_spin_unlock(&rwl_global);
return v3;
}
// 14001F478: using guessed type __int64 rwl_global;
//----- (000000014001CB80) ----------------------------------------------------
__int64 __fastcall rwl_unref(__int64 a1, unsigned int a2)
{
FILE *v5; // rax
pthread_spin_lock(&rwl_global);
if ( **(_DWORD **)a1 != -1162743571 || *(int *)(*(_QWORD *)a1 + 4LL) <= 0 )
{
v5 = __acrt_iob_func(2u);
fprintf_0(
v5,
"Assertion failed: (%s), file %s, line %d\n",
"(((rwlock_t *)*rwl)->valid == LIFE_RWLOCK) && (((rwlock_t *)*rwl)->busy > 0)",
"../../src/mingw-w64/mingw-w64-libraries/winpthreads/src/rwlock.c",
40);
exit_0(1);
}
--*(_DWORD *)(*(_QWORD *)a1 + 4LL);
pthread_spin_unlock(&rwl_global);
return a2;
}
// 14001F478: using guessed type __int64 rwl_global;
//----- (000000014001CC10) ----------------------------------------------------
__int64 __fastcall st_cancelwrite(__int64 a1)
{
*(_QWORD *)(a1 + 12) = (unsigned int)-*(_DWORD *)(a1 + 16);
pthread_mutex_unlock((volatile signed __int64 *)(a1 + 32));
return pthread_mutex_unlock((volatile signed __int64 *)(a1 + 24));
}
//----- (000000014001CC40) ----------------------------------------------------
void __fastcall rwl_print_set(int a1)
{
print_state_0 = a1;
}
// 140027D60: using guessed type int print_state_0;
//----- (000000014001CC50) ----------------------------------------------------
int __fastcall rwl_print(const void **a1, const char *a2)
{
int result; // eax
int *v5; // rax
DWORD v6; // eax
int v7; // ebp
int v8; // edi
DWORD CurrentThreadId; // eax
result = print_state_0;
if ( print_state_0 )
{
v5 = (int *)*a1;
if ( *a1 )
{
v7 = v5[1];
v8 = *v5;
CurrentThreadId = GetCurrentThreadId();
return printf_0("RWL%p %d V=%0X B=%d r=%ld w=%ld L=%p %s\n", *a1, CurrentThreadId, v8, v7, 0, 0, 0, a2);
}
else
{
v6 = GetCurrentThreadId();
return printf_0("RWL%p %d %s\n", *a1, v6, a2);
}
}
return result;
}
// 140027D60: using guessed type int print_state_0;
//----- (000000014001CCF0) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_init(__int64 **a1)
{
char *v2; // rax
__int64 *v3; // rbx
_QWORD **v4; // rbp
unsigned int v5; // esi
unsigned int v6; // esi
if ( !a1 )
return 22;
*a1 = 0;
v2 = (char *)calloc(1u, 0x30u);
v3 = (__int64 *)v2;
if ( !v2 )
return 12;
v4 = (_QWORD **)(v2 + 24);
*(_DWORD *)v2 = -559042321;
*((_DWORD *)v2 + 4) = 0;
*((_QWORD *)v2 + 1) = 0;
v5 = pthread_mutex_init((__int64 *)v2 + 3, 0);
if ( !v5 )
{
v5 = pthread_mutex_init(v3 + 4, 0);
if ( !v5 )
{
v6 = pthread_cond_init(v3 + 5, 0);
if ( v6 )
{
pthread_mutex_destroy(v4);
pthread_mutex_destroy((_QWORD **)v3 + 4);
free(v3);
}
else
{
*(_DWORD *)v3 = -1162743571;
*a1 = v3;
}
return v6;
}
pthread_mutex_destroy(v4);
}
free(v3);
return v5;
}
//----- (000000014001CDF0) ----------------------------------------------------
__int64 __fastcall rwlock_static_init(__int64 **a1)
{
unsigned int v2; // ebx
pthread_spin_lock(&cond_locked);
if ( *a1 == (__int64 *)-1LL )
{
v2 = pthread_rwlock_init(a1);
pthread_spin_unlock(&cond_locked);
return v2;
}
else
{
pthread_spin_unlock(&cond_locked);
return 22;
}
}
// 14001F470: using guessed type __int64 cond_locked;
//----- (000000014001CE50) ----------------------------------------------------
__int64 __fastcall rwl_ref_constprop_0(__int64 **a1)
{
unsigned int v2; // esi
__int64 *v3; // rax
if ( *a1 != (__int64 *)-1LL || (v2 = rwlock_static_init(a1), (v2 & 0xFFFFFFEF) == 0) )
{
v2 = 22;
pthread_spin_lock(&rwl_global);
v3 = *a1;
if ( *a1 && *(_DWORD *)v3 == -1162743571 )
{
++*((_DWORD *)v3 + 1);
v2 = 0;
}
pthread_spin_unlock(&rwl_global);
}
return v2;
}
// 14001F478: using guessed type __int64 rwl_global;
//----- (000000014001CEB0) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_destroy(_DWORD **a1)
{
unsigned int v2; // ebx
char *v3; // rsi
unsigned int v5; // edi
unsigned int v6; // eax
volatile signed __int64 *v7; // rcx
unsigned int v8; // esi
unsigned int v9; // eax
void *Block; // [rsp+28h] [rbp-40h] BYREF
pthread_spin_lock(&cond_locked);
v2 = rwl_ref_destroy(a1, &Block);
pthread_spin_unlock(&cond_locked);
if ( v2 )
return v2;
v3 = (char *)Block;
if ( !Block )
return v2;
v5 = pthread_mutex_lock((volatile signed __int64 *)Block + 3);
if ( !v5 )
{
v5 = pthread_mutex_lock((volatile signed __int64 *)v3 + 4);
if ( v5 )
{
pthread_mutex_unlock((volatile signed __int64 *)v3 + 3);
}
else
{
if ( *((_DWORD *)v3 + 3) > *((_DWORD *)v3 + 4) || *((int *)v3 + 2) > 0 )
{
*a1 = v3;
v6 = pthread_mutex_unlock((volatile signed __int64 *)v3 + 4);
v7 = (volatile signed __int64 *)(v3 + 24);
v8 = v6;
v2 = pthread_mutex_unlock(v7);
if ( !v2 )
{
v2 = 16;
if ( v8 )
return v8;
}
return v2;
}
*(_DWORD *)v3 = -559042321;
v5 = pthread_mutex_unlock((volatile signed __int64 *)v3 + 4);
v9 = pthread_mutex_unlock((volatile signed __int64 *)v3 + 3);
if ( !v5 )
{
if ( !v9 )
{
pthread_cond_destroy((__int64 *)v3 + 5);
pthread_mutex_destroy((_QWORD **)v3 + 3);
pthread_mutex_destroy((_QWORD **)v3 + 4);
free(v3);
return v2;
}
v5 = v9;
}
}
}
*a1 = v3;
return v5;
}
// 14001F470: using guessed type __int64 cond_locked;
//----- (000000014001CFF0) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_rdlock(__int64 **a1)
{
__int64 result; // rax
__int64 *v3; // rsi
volatile signed __int64 *v4; // rdi
unsigned int v5; // eax
unsigned int v6; // edx
unsigned int v7; // ebp
int v8; // eax
unsigned int v9; // esi
unsigned int v10; // eax
result = rwl_ref_constprop_0(a1);
if ( !(_DWORD)result )
{
v3 = *a1;
v4 = *a1 + 3;
v5 = pthread_mutex_lock(v4);
if ( !v5 )
{
_InterlockedAdd((volatile signed __int32 *)v3 + 3, 1u);
if ( *((_DWORD *)v3 + 3) == 0x7FFFFFFF )
{
v7 = pthread_mutex_lock(v3 + 4);
if ( v7 )
{
pthread_mutex_unlock(v4);
v6 = v7;
}
else
{
v8 = *((_DWORD *)v3 + 4);
*((_DWORD *)v3 + 4) = 0;
*((_DWORD *)v3 + 3) -= v8;
v9 = pthread_mutex_unlock(v3 + 4);
v10 = pthread_mutex_unlock(v4);
if ( !v9 )
v9 = v10;
v6 = v9;
}
return rwl_unref((__int64)a1, v6);
}
v5 = pthread_mutex_unlock(v4);
}
v6 = v5;
return rwl_unref((__int64)a1, v6);
}
return result;
}
//----- (000000014001D0B0) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_timedrdlock(__int64 **a1, __int64 a2)
{
__int64 result; // rax
__int64 *v5; // rsi
volatile signed __int64 *v6; // rbp
unsigned int v7; // eax
unsigned int v8; // edx
unsigned int v9; // eax
unsigned int v10; // edi
int v11; // eax
unsigned int v12; // esi
unsigned int v13; // eax
result = rwl_ref_constprop_0(a1);
if ( !(_DWORD)result )
{
v5 = *a1;
v6 = *a1 + 3;
v7 = pthread_mutex_timedlock(v6, a2);
if ( !v7 )
{
_InterlockedAdd((volatile signed __int32 *)v5 + 3, 1u);
if ( *((_DWORD *)v5 + 3) == 0x7FFFFFFF )
{
v9 = pthread_mutex_timedlock(v5 + 4, a2);
v10 = v9;
if ( v9 )
{
if ( v9 == 138 )
_InterlockedAdd((volatile signed __int32 *)v5 + 4, 1u);
pthread_mutex_unlock(v6);
v8 = v10;
}
else
{
v11 = *((_DWORD *)v5 + 4);
*((_DWORD *)v5 + 4) = 0;
*((_DWORD *)v5 + 3) -= v11;
v12 = pthread_mutex_unlock(v5 + 4);
v13 = pthread_mutex_unlock(v6);
if ( !v12 )
v12 = v13;
v8 = v12;
}
return rwl_unref((__int64)a1, v8);
}
v7 = pthread_mutex_unlock(v6);
}
v8 = v7;
return rwl_unref((__int64)a1, v8);
}
return result;
}
//----- (000000014001D190) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_tryrdlock(__int64 **a1)
{
__int64 result; // rax
__int64 *v3; // rsi
volatile signed __int64 *v4; // rdi
unsigned int v5; // eax
unsigned int v6; // edx
unsigned int v7; // ebp
int v8; // eax
unsigned int v9; // esi
unsigned int v10; // eax
result = rwl_ref_constprop_0(a1);
if ( !(_DWORD)result )
{
v3 = *a1;
v4 = *a1 + 3;
v5 = pthread_mutex_trylock(v4);
if ( !v5 )
{
_InterlockedAdd((volatile signed __int32 *)v3 + 3, 1u);
if ( *((_DWORD *)v3 + 3) == 0x7FFFFFFF )
{
v7 = pthread_mutex_lock(v3 + 4);
if ( v7 )
{
pthread_mutex_unlock(v4);
v6 = v7;
}
else
{
v8 = *((_DWORD *)v3 + 4);
*((_DWORD *)v3 + 4) = 0;
*((_DWORD *)v3 + 3) -= v8;
v9 = pthread_mutex_unlock(v3 + 4);
v10 = pthread_mutex_unlock(v4);
if ( !v9 )
v9 = v10;
v6 = v9;
}
return rwl_unref((__int64)a1, v6);
}
v5 = pthread_mutex_unlock(v4);
}
v6 = v5;
return rwl_unref((__int64)a1, v6);
}
return result;
}
//----- (000000014001D250) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_trywrlock(__int64 **a1)
{
__int64 result; // rax
__int64 *v3; // rsi
volatile signed __int64 *v4; // rbp
unsigned int v5; // edx
unsigned int v6; // edi
int v7; // edx
int v8; // eax
int v9; // esi
int v10; // eax
unsigned int v11; // eax
result = rwl_ref_constprop_0(a1);
if ( !(_DWORD)result )
{
v3 = *a1;
v4 = *a1 + 3;
v5 = pthread_mutex_trylock(v4);
if ( !v5 )
{
v6 = pthread_mutex_trylock(v3 + 4);
if ( v6 )
{
v11 = pthread_mutex_unlock(v4);
if ( v11 )
v6 = v11;
v5 = v6;
}
else
{
v5 = 16;
if ( !*((_DWORD *)v3 + 2) )
{
v7 = *((_DWORD *)v3 + 4);
v8 = *((_DWORD *)v3 + 3);
if ( v7 > 0 )
{
v8 -= v7;
*(__int64 *)((char *)v3 + 12) = (unsigned int)v8;
}
if ( v8 > 0 )
{
v9 = pthread_mutex_unlock(v3 + 4);
v10 = pthread_mutex_unlock(v4);
if ( !v9 )
{
v9 = 16;
if ( v10 )
v9 = v10;
}
v5 = v9;
}
else
{
*((_DWORD *)v3 + 2) = 1;
v5 = 0;
}
}
}
}
return rwl_unref((__int64)a1, v5);
}
return result;
}
//----- (000000014001D320) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_unlock(_DWORD **a1)
{
__int64 result; // rax
_DWORD *v3; // rdi
volatile signed __int64 *v4; // rbp
unsigned int v5; // esi
unsigned int v6; // eax
unsigned int v7; // eax
result = rwl_ref_unlock(a1);
if ( !(_DWORD)result )
{
v3 = *a1;
v4 = (volatile signed __int64 *)(*a1 + 8);
if ( (*a1)[2] )
{
_InterlockedSub(v3 + 2, 1u);
v5 = pthread_mutex_unlock(v4);
v6 = pthread_mutex_unlock((volatile signed __int64 *)v3 + 3);
if ( !v5 )
v5 = v6;
}
else
{
v5 = pthread_mutex_lock((volatile signed __int64 *)*a1 + 4);
if ( !v5 )
{
_InterlockedAdd(v3 + 4, 1u);
if ( v3[4] )
{
v5 = pthread_mutex_unlock(v4);
}
else
{
v5 = pthread_cond_signal((__int64 *)v3 + 5);
v7 = pthread_mutex_unlock(v4);
if ( !v5 )
v5 = v7;
}
}
}
return rwl_unref((__int64)a1, v5);
}
return result;
}
//----- (000000014001D3D0) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_wrlock(__int64 **a1)
{
__int64 result; // rax
__int64 *v3; // rsi
volatile signed __int64 *v4; // rdi
unsigned int v5; // ebp
int v6; // edx
int v7; // eax
unsigned int v8; // edi
signed __int64 v9[4]; // [rsp+0h] [rbp-78h] BYREF
__int64 (__fastcall *v10)(__int64); // [rsp+20h] [rbp-58h] BYREF
__int64 *v11; // [rsp+28h] [rbp-50h]
__int64 v12; // [rsp+30h] [rbp-48h]
result = rwl_ref_constprop_0(a1);
if ( !(_DWORD)result )
{
v3 = *a1;
v4 = *a1 + 3;
v5 = pthread_mutex_lock(v4);
if ( !v5 )
{
v5 = pthread_mutex_lock(v3 + 4);
if ( v5 )
{
pthread_mutex_unlock(v4);
}
else
{
if ( !*((_DWORD *)v3 + 2) )
{
v6 = *((_DWORD *)v3 + 4);
v7 = *((_DWORD *)v3 + 3);
if ( v6 > 0 )
{
v7 -= v6;
*(__int64 *)((char *)v3 + 12) = (unsigned int)v7;
}
if ( v7 > 0 )
{
v11 = v3;
*((_DWORD *)v3 + 4) = -v7;
v10 = st_cancelwrite;
v12 = *(_QWORD *)pthread_getclean();
_InterlockedOr64(v9, 0);
*(_QWORD *)pthread_getclean() = &v10;
_InterlockedOr64(v9, 0);
do
{
v8 = pthread_cond_wait((unsigned __int64 *)v3 + 5, v3 + 4);
if ( v8 )
{
v5 = v8;
*(_QWORD *)pthread_getclean() = v12;
v10((__int64)v11);
return rwl_unref((__int64)a1, v5);
}
}
while ( *((int *)v3 + 4) < 0 );
*(_QWORD *)pthread_getclean() = v12;
*((_DWORD *)v3 + 3) = 0;
}
}
_InterlockedAdd((volatile signed __int32 *)v3 + 2, 1u);
}
}
return rwl_unref((__int64)a1, v5);
}
return result;
}
//----- (000000014001D510) ----------------------------------------------------
__int64 __fastcall pthread_rwlock_timedwrlock(__int64 **a1, __int64 a2)
{
__int64 result; // rax
__int64 *v5; // rdi
volatile signed __int64 *v6; // rbp
unsigned int v7; // edx
unsigned int v8; // r12d
int v9; // edx
int v10; // eax
unsigned int v11; // ebp
signed __int64 v12[4]; // [rsp+0h] [rbp-78h] BYREF
__int64 (__fastcall *v13)(__int64); // [rsp+20h] [rbp-58h] BYREF
__int64 *v14; // [rsp+28h] [rbp-50h]
__int64 v15; // [rsp+30h] [rbp-48h]
if ( a1 && a2 )
{
result = rwl_ref_constprop_0(a1);
if ( (_DWORD)result )
return result;
v5 = *a1;
v6 = *a1 + 3;
v7 = pthread_mutex_timedlock(v6, a2);
if ( v7 )
return rwl_unref((__int64)a1, v7);
v8 = pthread_mutex_timedlock(v5 + 4, a2);
if ( v8 )
{
pthread_mutex_unlock(v6);
}
else
{
if ( !*((_DWORD *)v5 + 2) )
{
v9 = *((_DWORD *)v5 + 4);
v10 = *((_DWORD *)v5 + 3);
if ( v9 > 0 )
{
v10 -= v9;
*(__int64 *)((char *)v5 + 12) = (unsigned int)v10;
}
if ( v10 > 0 )
{
v14 = v5;
*((_DWORD *)v5 + 4) = -v10;
v13 = st_cancelwrite;
v15 = *(_QWORD *)pthread_getclean();
_InterlockedOr64(v12, 0);
*(_QWORD *)pthread_getclean() = &v13;
_InterlockedOr64(v12, 0);
do
v11 = pthread_cond_timedwait((unsigned __int64 *)v5 + 5, v5 + 4, a2);
while ( *((int *)v5 + 4) < 0 && !v11 );
*(_QWORD *)pthread_getclean() = v15;
if ( v11 )
{
v8 = v11;
v13((__int64)v14);
goto LABEL_11;
}
*((_DWORD *)v5 + 3) = 0;
}
}
_InterlockedAdd((volatile signed __int32 *)v5 + 2, 1u);
}
LABEL_11:
v7 = v8;
return rwl_unref((__int64)a1, v7);
}
return 22;
}
//----- (000000014001D690) ----------------------------------------------------
__int64 __fastcall pthread_rwlockattr_destroy(__int64 a1)
{
return a1 == 0 ? 0x16 : 0;
}
//----- (000000014001D6A0) ----------------------------------------------------
__int64 __fastcall pthread_rwlockattr_init(_DWORD *a1)
{
if ( !a1 )
return 22;
*a1 = 0;
return 0;
}
//----- (000000014001D6C0) ----------------------------------------------------
__int64 __fastcall pthread_rwlockattr_getpshared(_DWORD *a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = *a1;
return 0;
}
//----- (000000014001D6E0) ----------------------------------------------------
__int64 __fastcall pthread_rwlockattr_setpshared(unsigned int *a1, unsigned int a2)
{
if ( !a1 || a2 > 1 )
return 22;
*a1 = a2;
return 0;
}
//----- (000000014001D700) ----------------------------------------------------
__int64 __fastcall pthread_spin_init(_QWORD *a1)
{
*a1 = -1;
return 0;
}
//----- (000000014001D710) ----------------------------------------------------
__int64 pthread_spin_destroy()
{
return 0;
}
//----- (000000014001D720) ----------------------------------------------------
__int64 __fastcall pthread_spin_lock(volatile __int64 *a1)
{
while ( !_InterlockedExchange64(a1, 0) )
{
do
_mm_pause();
while ( !*a1 );
}
return 0;
}
//----- (000000014001D740) ----------------------------------------------------
__int64 __fastcall pthread_spin_trylock(volatile __int64 *a1)
{
return 16 * (unsigned int)(_InterlockedExchange64(a1, 0) == 0);
}
//----- (000000014001D760) ----------------------------------------------------
__int64 __fastcall pthread_spin_unlock(_QWORD *a1)
{
*a1 = -1;
return 0;
}
//----- (000000014001D770) ----------------------------------------------------
__int64 __fastcall do_sema_b_release(
HANDLE hSemaphore,
LONG lReleaseCount,
LPCRITICAL_SECTION lpCriticalSection,
volatile signed __int32 *a4)
{
__int64 v8; // rdx
LONG v9; // edx
EnterCriticalSection(lpCriticalSection);
v8 = *(int *)a4;
if ( lReleaseCount + v8 > 0x7FFFFFFF )
{
LeaveCriticalSection(lpCriticalSection);
return 34;
}
else
{
_InterlockedAdd(a4, lReleaseCount);
if ( (int)v8 >= 0 )
goto LABEL_6;
v9 = -(int)v8;
if ( v9 > lReleaseCount )
v9 = lReleaseCount;
if ( ReleaseSemaphore(hSemaphore, v9, 0) )
{
LABEL_6:
LeaveCriticalSection(lpCriticalSection);
return 0;
}
else
{
_InterlockedAdd(a4, -lReleaseCount);
LeaveCriticalSection(lpCriticalSection);
return 22;
}
}
}
//----- (000000014001D810) ----------------------------------------------------
void __fastcall cond_print_set(int a1, FILE *a2)
{
FILE *v3; // rax
if ( a2 )
{
fo = a2;
LABEL_3:
print_state_1 = a1;
return;
}
if ( fo )
goto LABEL_3;
v3 = __acrt_iob_func(1u);
print_state_1 = a1;
fo = v3;
}
// 140027D78: using guessed type int print_state_1;
//----- (000000014001D860) ----------------------------------------------------
int __fastcall cond_print(const void **a1, const char *a2)
{
int result; // eax
int *v5; // rax
DWORD v6; // eax
int v7; // ebp
int v8; // edi
DWORD CurrentThreadId; // eax
result = print_state_1;
if ( print_state_1 )
{
v5 = (int *)*a1;
if ( *a1 )
{
v7 = v5[2];
v8 = *v5;
CurrentThreadId = GetCurrentThreadId();
return fprintf_0(fo, "C%p %d V=%0X w=%ld %s\n", *a1, CurrentThreadId, v8, v7, a2);
}
else
{
v6 = GetCurrentThreadId();
return fprintf_0(fo, "C%p %d %s\n", *a1, v6, a2);
}
}
return result;
}
// 140027D78: using guessed type int print_state_1;
//----- (000000014001D8F0) ----------------------------------------------------
__int64 __fastcall pthread_condattr_destroy(_DWORD *a1)
{
if ( !a1 )
return 22;
*a1 = 0;
return 0;
}
//----- (000000014001D910) ----------------------------------------------------
__int64 __fastcall pthread_condattr_init(_DWORD *a1)
{
if ( !a1 )
return 22;
*a1 = 0;
return 0;
}
//----- (000000014001D930) ----------------------------------------------------
__int64 __fastcall pthread_condattr_getpshared(_DWORD *a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = *a1;
return 0;
}
//----- (000000014001D950) ----------------------------------------------------
__int64 __fastcall pthread_condattr_getclock(__int64 a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = 0;
return 0;
}
//----- (000000014001D970) ----------------------------------------------------
__int64 __fastcall pthread_condattr_setclock(__int64 a1, int a2)
{
if ( !a1 || a2 )
return 22;
else
return 0;
}
//----- (000000014001D990) ----------------------------------------------------
__int64 __fastcall _pthread_clock_nanosleep(unsigned int a1, char a2, __int64 a3, _QWORD *a4)
{
__int64 result; // rax
unsigned __int64 v6; // rsi
unsigned __int64 v7; // rax
DWORD v8; // ecx
unsigned __int64 v9; // rbx
unsigned __int64 v10; // rax
result = 22;
if ( a1 <= 2 )
{
if ( (a2 & 1) != 0 )
v6 = pthread_rel_time_in_ms(a3);
else
v6 = pthread_time_in_ms_from_timespec(a3);
do
{
v7 = pthread_time_in_ms();
v8 = 99999;
v9 = v7;
if ( v6 <= 0x1869F )
v8 = v6;
pthread_delay_np_ms(v8);
v10 = pthread_time_in_ms();
if ( v10 - v9 >= v6 )
break;
v6 += v9 - v10;
}
while ( v6 );
if ( a4 )
{
*a4 = 0;
a4[1] = 0;
}
return 0;
}
return result;
}
//----- (000000014001DA30) ----------------------------------------------------
__int64 __fastcall pthread_condattr_setpshared(_DWORD *a1, unsigned int a2)
{
__int64 result; // rax
if ( !a1 || a2 > 1 )
return 22;
*a1 = 0;
result = 40;
if ( a2 != 1 )
return 0;
return result;
}
//----- (000000014001DA60) ----------------------------------------------------
__int64 __fastcall pthread_cond_init(_QWORD *a1, _DWORD *a2)
{
char *v3; // rax
char *v4; // rbx
HANDLE SemaphoreA; // rcx
if ( !a1 )
return 22;
if ( a2 && *a2 == 1 )
return 40;
v3 = (char *)calloc(1u, 0xB0u);
v4 = v3;
if ( !v3 )
return 12;
*(_OWORD *)(v3 + 4) = 0;
*(_DWORD *)v3 = -1059148353;
*((_QWORD *)v3 + 20) = CreateSemaphoreA(0, 0, 0x7FFFFFFF, 0);
SemaphoreA = CreateSemaphoreA(0, 0, 0x7FFFFFFF, 0);
*((_QWORD *)v4 + 21) = SemaphoreA;
if ( *((_QWORD *)v4 + 20) )
{
if ( SemaphoreA )
{
InitializeCriticalSection((LPCRITICAL_SECTION)(v4 + 24));
InitializeCriticalSection((LPCRITICAL_SECTION)(v4 + 112));
InitializeCriticalSection((LPCRITICAL_SECTION)(v4 + 64));
*((_DWORD *)v4 + 26) = 0;
*((_DWORD *)v4 + 38) = 1;
*(_DWORD *)v4 = -1061506563;
*a1 = v4;
return 0;
}
CloseHandle(*((HANDLE *)v4 + 20));
SemaphoreA = (HANDLE)*((_QWORD *)v4 + 21);
}
if ( SemaphoreA )
CloseHandle(SemaphoreA);
free(v4);
*a1 = 0;
return 11;
}
//----- (000000014001DB90) ----------------------------------------------------
__int64 __fastcall do_sema_b_wait_intern(HANDLE hHandle, int a2, DWORD a3)
{
int v4; // ebp
DWORD v5; // ebx
DWORD v6; // eax
unsigned int v7; // esi
unsigned int v9; // edi
DWORD v10; // r12d
DWORD v11; // eax
DWORD v12; // eax
DWORD v13; // eax
HANDLE v14; // rcx
HANDLE hHandlea; // [rsp+20h] [rbp-38h] BYREF
HANDLE hEvent; // [rsp+28h] [rbp-30h]
v4 = a2;
v5 = a3;
if ( a2 == 1 )
{
v13 = pthread_wait_for_single_object(hHandle, a3);
if ( v13 != 128 )
{
if ( v13 != 258 )
{
if ( v13 )
return 22;
return 0;
}
v4 = 138;
}
v14 = hHandle;
v7 = v4;
if ( !WaitForSingleObject(v14, 0) )
return 0;
return v7;
}
hHandlea = hHandle;
hEvent = pthread_getevent();
if ( hEvent )
{
while ( 1 )
{
v6 = pthread_wait_for_multiple_objects(2u, &hHandlea, 0, v5);
if ( v6 == 128 )
{
v7 = 1;
goto LABEL_10;
}
if ( v6 > 0x80 )
break;
if ( !v6 )
return 0;
if ( v6 != 1 )
goto LABEL_13;
ResetEvent(hEvent);
if ( v4 != 2 )
goto LABEL_32;
pthread_testcancel();
}
v7 = 138;
if ( v6 != 258 )
{
LABEL_13:
v7 = 22;
goto LABEL_14;
}
LABEL_10:
if ( !WaitForSingleObject(hHandlea, 0) )
return 0;
LABEL_14:
if ( v4 == 2 || !(unsigned int)_pthread_shallcancel() )
return v7;
return 22;
}
v9 = 20;
if ( v5 == -1 )
{
while ( 1 )
{
v12 = pthread_wait_for_single_object(hHandle, 0x28u);
if ( v12 == 128 )
{
if ( !(unsigned int)_pthread_shallcancel() )
return WaitForSingleObject(hHandle, 0) != 0;
LABEL_31:
if ( v4 != 2 )
LABEL_32:
pthread_testcancel();
return 22;
}
if ( v12 != 258 )
break;
if ( (unsigned int)_pthread_shallcancel() )
goto LABEL_31;
}
if ( v12 )
{
if ( (unsigned int)_pthread_shallcancel() )
goto LABEL_31;
return 22;
}
return 0;
}
while ( 1 )
{
v10 = v9;
if ( v5 <= v9 )
v10 = v5;
v11 = pthread_wait_for_single_object(hHandle, v10);
if ( v11 == 128 )
{
v7 = 1;
if ( v9 >= v5 )
goto LABEL_24;
LABEL_34:
if ( (unsigned int)_pthread_shallcancel() )
return 22;
goto LABEL_24;
}
if ( v11 != 258 )
{
v7 = 0;
if ( !v11 )
return v7;
v7 = 22;
if ( v9 >= v5 )
goto LABEL_24;
goto LABEL_34;
}
v5 -= v10;
if ( !v5 )
break;
if ( (unsigned int)_pthread_shallcancel() )
return 22;
v9 = v10;
}
if ( !WaitForSingleObject(hHandle, 0) )
return 0;
v7 = 138;
LABEL_24:
if ( v4 != 2 )
pthread_testcancel();
return v7;
}
//----- (000000014001DE00) ----------------------------------------------------
__int64 __fastcall do_sema_b_wait(
HANDLE hHandle,
int a2,
DWORD a3,
struct _RTL_CRITICAL_SECTION *a4,
volatile signed __int32 *a5)
{
unsigned int v9; // edi
int v10; // esi
EnterCriticalSection(a4);
_InterlockedSub(a5, 1u);
v9 = 0;
v10 = *a5;
LeaveCriticalSection(a4);
if ( v10 < 0 )
{
v9 = do_sema_b_wait_intern(hHandle, a2, a3);
EnterCriticalSection(a4);
if ( v9 )
_InterlockedAdd(a5, 1u);
LeaveCriticalSection(a4);
}
return v9;
}
//----- (000000014001DEA0) ----------------------------------------------------
__int64 __fastcall pthread_cond_destroy(__int64 *a1)
{
__int64 v2; // rbx
unsigned int v3; // edi
BOOL v5; // eax
void *v6; // rcx
unsigned int v7; // edi
if ( !a1 )
return 22;
v2 = *a1;
v3 = 22;
if ( !*a1 )
return v3;
if ( v2 == -1 )
{
v7 = 16;
pthread_spin_lock((volatile __int64 *)&cond_locked_0);
if ( *a1 == -1 )
{
*a1 = 0;
v7 = 0;
}
pthread_spin_unlock(&cond_locked_0);
return v7;
}
else
{
v3 = do_sema_b_wait(
*(HANDLE *)(v2 + 168),
0,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v2 + 112),
(volatile signed __int32 *)(v2 + 152));
if ( v3 )
return v3;
v5 = TryEnterCriticalSection((LPCRITICAL_SECTION)(v2 + 24));
v6 = *(void **)(v2 + 168);
if ( !v5 )
{
do_sema_b_release(v6, 1, (LPCRITICAL_SECTION)(v2 + 112), (volatile signed __int32 *)(v2 + 152));
return 16;
}
if ( *(_DWORD *)(v2 + 8) > *(_DWORD *)(v2 + 16) )
{
v3 = do_sema_b_release(v6, 1, (LPCRITICAL_SECTION)(v2 + 112), (volatile signed __int32 *)(v2 + 152));
if ( !v3 )
v3 = 16;
LeaveCriticalSection((LPCRITICAL_SECTION)(v2 + 24));
return v3;
}
*a1 = 0;
do_sema_b_release(v6, 1, (LPCRITICAL_SECTION)(v2 + 112), (volatile signed __int32 *)(v2 + 152));
CloseHandle(*(HANDLE *)(v2 + 160));
CloseHandle(*(HANDLE *)(v2 + 168));
LeaveCriticalSection((LPCRITICAL_SECTION)(v2 + 24));
DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 24));
DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 112));
DeleteCriticalSection((LPCRITICAL_SECTION)(v2 + 64));
free((void *)v2);
return 0;
}
}
//----- (000000014001E050) ----------------------------------------------------
__int64 __fastcall pthread_cond_signal(__int64 *a1)
{
__int64 v1; // rbx
__int64 result; // rax
int v3; // eax
unsigned int v4; // eax
int v5; // eax
int v6; // edx
int v7; // edx
int v8; // eax
int v9; // ecx
unsigned int v10; // [rsp+3Ch] [rbp-1Ch]
if ( !a1 )
return 22;
v1 = *a1;
if ( !*a1 )
return 22;
if ( v1 == -1 )
return 0;
result = 22;
if ( *(_DWORD *)v1 != -1061506563 )
return result;
EnterCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
v3 = *(_DWORD *)(v1 + 12);
if ( v3 )
{
v9 = *(_DWORD *)(v1 + 8);
v8 = v3 + 1;
v7 = v9 - 1;
if ( v9 )
{
LABEL_13:
*(_DWORD *)(v1 + 8) = v7;
*(_DWORD *)(v1 + 12) = v8;
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return do_sema_b_release(
*(HANDLE *)(v1 + 160),
1,
(LPCRITICAL_SECTION)(v1 + 64),
(volatile signed __int32 *)(v1 + 104));
}
goto LABEL_14;
}
if ( *(_DWORD *)(v1 + 8) <= *(_DWORD *)(v1 + 16) )
{
LABEL_14:
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return 0;
}
v4 = do_sema_b_wait(
*(HANDLE *)(v1 + 168),
1,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v1 + 112),
(volatile signed __int32 *)(v1 + 152));
if ( !v4 )
{
v5 = *(_DWORD *)(v1 + 16);
v6 = *(_DWORD *)(v1 + 8);
if ( v5 )
{
v6 -= v5;
*(_DWORD *)(v1 + 16) = 0;
}
v7 = v6 - 1;
v8 = 1;
goto LABEL_13;
}
v10 = v4;
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return v10;
}
//----- (000000014001E180) ----------------------------------------------------
__int64 __fastcall pthread_cond_broadcast(__int64 *a1)
{
__int64 v1; // rbx
__int64 result; // rax
int v3; // eax
unsigned int v4; // eax
int v5; // eax
LONG v6; // edi
LONG v7; // eax
unsigned int v8; // [rsp+3Ch] [rbp-1Ch]
if ( !a1 )
return 22;
v1 = *a1;
if ( !*a1 )
return 22;
if ( v1 == -1 )
return 0;
result = 22;
if ( *(_DWORD *)v1 != -1061506563 )
return result;
EnterCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
v3 = *(_DWORD *)(v1 + 12);
if ( v3 )
{
v6 = *(_DWORD *)(v1 + 8);
v7 = v6 + v3;
if ( v6 )
{
LABEL_13:
*(_DWORD *)(v1 + 8) = 0;
*(_DWORD *)(v1 + 12) = v7;
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return do_sema_b_release(
*(HANDLE *)(v1 + 160),
v6,
(LPCRITICAL_SECTION)(v1 + 64),
(volatile signed __int32 *)(v1 + 104));
}
goto LABEL_14;
}
if ( *(_DWORD *)(v1 + 8) <= *(_DWORD *)(v1 + 16) )
{
LABEL_14:
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return 0;
}
v4 = do_sema_b_wait(
*(HANDLE *)(v1 + 168),
1,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v1 + 112),
(volatile signed __int32 *)(v1 + 152));
if ( !v4 )
{
v5 = *(_DWORD *)(v1 + 16);
v6 = *(_DWORD *)(v1 + 8);
if ( v5 )
{
v6 -= v5;
*(_DWORD *)(v1 + 16) = 0;
}
v7 = v6;
goto LABEL_13;
}
v8 = v4;
LeaveCriticalSection((LPCRITICAL_SECTION)(v1 + 24));
return v8;
}
//----- (000000014001E2B0) ----------------------------------------------------
__int64 __fastcall pthread_cond_wait(unsigned __int64 *a1, volatile signed __int64 *a2)
{
unsigned __int64 v4; // rsi
unsigned int v5; // ebx
signed __int64 v7[4]; // [rsp+0h] [rbp-B8h] BYREF
unsigned int v8; // [rsp+3Ch] [rbp-7Ch] BYREF
__m128i v9; // [rsp+40h] [rbp-78h] BYREF
unsigned int *v10; // [rsp+50h] [rbp-68h]
_DWORD *(__fastcall *v11)(__int64 *); // [rsp+60h] [rbp-58h] BYREF
__m128i *v12; // [rsp+68h] [rbp-50h]
__int64 v13; // [rsp+70h] [rbp-48h]
if ( a1 )
{
v4 = *a1;
v5 = 22;
if ( *a1 )
{
if ( v4 == -1 )
{
pthread_spin_lock((volatile __int64 *)&cond_locked_0);
if ( *a1 == -1 )
{
v5 = pthread_cond_init(a1, 0);
pthread_spin_unlock(&cond_locked_0);
v8 = v5;
if ( (v5 & 0xFFFFFFEF) != 0 )
return v5;
}
else
{
pthread_spin_unlock(&cond_locked_0);
v8 = 0;
}
v4 = *a1;
goto LABEL_9;
}
if ( *(_DWORD *)v4 == -1061506563 )
{
LABEL_9:
while ( 1 )
{
v5 = do_sema_b_wait(
*(HANDLE *)(v4 + 168),
0,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v4 + 112),
(volatile signed __int32 *)(v4 + 152));
v8 = v5;
if ( v5 )
break;
if ( TryEnterCriticalSection((LPCRITICAL_SECTION)(v4 + 24)) )
{
++*(_DWORD *)(v4 + 8);
LeaveCriticalSection((LPCRITICAL_SECTION)(v4 + 24));
v5 = do_sema_b_release(
*(HANDLE *)(v4 + 168),
1,
(LPCRITICAL_SECTION)(v4 + 112),
(volatile signed __int32 *)(v4 + 152));
v8 = v5;
if ( !v5 )
{
v10 = &v8;
v11 = cleanup_wait;
v9 = _mm_unpacklo_epi64((__m128i)v4, (__m128i)(unsigned __int64)a2);
v12 = &v9;
v13 = *(_QWORD *)pthread_getclean();
_InterlockedOr64(v7, 0);
*(_QWORD *)pthread_getclean() = &v11;
_InterlockedOr64(v7, 0);
v8 = pthread_mutex_unlock(a2);
if ( !v8 )
v8 = do_sema_b_wait(
*(HANDLE *)(v4 + 160),
0,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v4 + 64),
(volatile signed __int32 *)(v4 + 104));
*(_QWORD *)pthread_getclean() = v13;
v11(v12->m128i_i64);
return v8;
}
return v5;
}
v5 = do_sema_b_release(
*(HANDLE *)(v4 + 168),
1,
(LPCRITICAL_SECTION)(v4 + 112),
(volatile signed __int32 *)(v4 + 152));
v8 = v5;
if ( v5 )
return v5;
sched_yield();
}
}
}
}
else
{
return 22;
}
return v5;
}
//----- (000000014001E4D0) ----------------------------------------------------
_DWORD *__fastcall cleanup_wait(__int64 *a1)
{
__int64 v1; // rbx
struct _RTL_CRITICAL_SECTION *v2; // rbp
int v4; // edi
_DWORD *result; // rax
int v6; // eax
void *v7; // rcx
int v8; // edi
v1 = *a1;
v2 = (struct _RTL_CRITICAL_SECTION *)(*a1 + 24);
EnterCriticalSection(v2);
v4 = *(_DWORD *)(v1 + 12);
if ( v4 )
{
*(_DWORD *)(v1 + 12) = v4 - 1;
LeaveCriticalSection(v2);
if ( v4 != 1 )
goto LABEL_4;
result = (_DWORD *)do_sema_b_release(
*(HANDLE *)(v1 + 168),
1,
(LPCRITICAL_SECTION)(v1 + 112),
(volatile signed __int32 *)(v1 + 152));
if ( !(_DWORD)result )
goto LABEL_4;
goto LABEL_5;
}
v6 = *(_DWORD *)(v1 + 16);
if ( v6 == 1073741822 )
{
v7 = *(void **)(v1 + 168);
*(_DWORD *)(v1 + 16) = 0x3FFFFFFF;
v8 = do_sema_b_wait(
v7,
1,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v1 + 112),
(volatile signed __int32 *)(v1 + 152));
if ( v8
|| (*(_DWORD *)(v1 + 8) -= *(_DWORD *)(v1 + 16),
(v8 = do_sema_b_release(
*(HANDLE *)(v1 + 168),
1,
(LPCRITICAL_SECTION)(v1 + 112),
(volatile signed __int32 *)(v1 + 152))) != 0) )
{
LeaveCriticalSection(v2);
result = (_DWORD *)a1[2];
*result = v8;
return result;
}
*(_DWORD *)(v1 + 16) = 0;
LeaveCriticalSection(v2);
LABEL_4:
result = (_DWORD *)pthread_mutex_lock((volatile signed __int64 *)a1[1]);
if ( !(_DWORD)result )
return result;
goto LABEL_5;
}
*(_DWORD *)(v1 + 16) = v6 + 1;
LeaveCriticalSection(v2);
result = (_DWORD *)pthread_mutex_lock((volatile signed __int64 *)a1[1]);
if ( (_DWORD)result )
LABEL_5:
*(_DWORD *)a1[2] = (_DWORD)result;
return result;
}
//----- (000000014001E610) ----------------------------------------------------
__int64 __fastcall pthread_cond_timedwait_impl(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3, int a4)
{
unsigned __int64 v8; // rsi
unsigned int v9; // ebx
unsigned __int64 v10; // rax
unsigned __int64 v11; // r15
signed __int64 v13[4]; // [rsp+0h] [rbp-C8h] BYREF
unsigned int v14; // [rsp+3Ch] [rbp-8Ch] BYREF
__m128i v15; // [rsp+40h] [rbp-88h] BYREF
unsigned int *v16; // [rsp+50h] [rbp-78h]
_DWORD *(__fastcall *v17)(__int64 *); // [rsp+60h] [rbp-68h] BYREF
__m128i *v18; // [rsp+68h] [rbp-60h]
__int64 v19; // [rsp+70h] [rbp-58h]
if ( !a1 )
return 22;
v8 = *a1;
v9 = 22;
if ( *a1 )
{
if ( v8 == -1 )
{
pthread_spin_lock((volatile __int64 *)&cond_locked_0);
if ( *a1 == -1 )
{
v9 = pthread_cond_init(a1, 0);
pthread_spin_unlock(&cond_locked_0);
v14 = v9;
if ( (v9 & 0xFFFFFFEF) != 0 )
return v9;
}
else
{
pthread_spin_unlock(&cond_locked_0);
v14 = 0;
}
v8 = *a1;
}
else if ( *(_DWORD *)v8 != -1061506563 )
{
return v9;
}
if ( !a4 )
{
v10 = pthread_rel_time_in_ms(a3);
LODWORD(v11) = v10;
if ( v10 <= 0xFFFFFFFE )
goto LABEL_11;
LABEL_14:
LODWORD(v11) = -1;
goto LABEL_11;
}
v11 = pthread_time_in_ms_from_timespec(a3);
if ( v11 > 0xFFFFFFFE )
goto LABEL_14;
LABEL_11:
while ( 1 )
{
v9 = do_sema_b_wait(
*(HANDLE *)(v8 + 168),
0,
0xFFFFFFFF,
(struct _RTL_CRITICAL_SECTION *)(v8 + 112),
(volatile signed __int32 *)(v8 + 152));
v14 = v9;
if ( v9 )
break;
if ( TryEnterCriticalSection((LPCRITICAL_SECTION)(v8 + 24)) )
{
++*(_DWORD *)(v8 + 8);
LeaveCriticalSection((LPCRITICAL_SECTION)(v8 + 24));
v9 = do_sema_b_release(
*(HANDLE *)(v8 + 168),
1,
(LPCRITICAL_SECTION)(v8 + 112),
(volatile signed __int32 *)(v8 + 152));
v14 = v9;
if ( !v9 )
{
v16 = &v14;
v17 = cleanup_wait;
v15 = _mm_unpacklo_epi64((__m128i)v8, (__m128i)(unsigned __int64)a2);
v18 = &v15;
v19 = *(_QWORD *)pthread_getclean();
_InterlockedOr64(v13, 0);
*(_QWORD *)pthread_getclean() = &v17;
_InterlockedOr64(v13, 0);
v14 = pthread_mutex_unlock(a2);
if ( !v14 )
v14 = do_sema_b_wait(
*(HANDLE *)(v8 + 160),
0,
v11,
(struct _RTL_CRITICAL_SECTION *)(v8 + 64),
(volatile signed __int32 *)(v8 + 104));
*(_QWORD *)pthread_getclean() = v19;
v17(v18->m128i_i64);
return v14;
}
return v9;
}
v9 = do_sema_b_release(
*(HANDLE *)(v8 + 168),
1,
(LPCRITICAL_SECTION)(v8 + 112),
(volatile signed __int32 *)(v8 + 152));
v14 = v9;
if ( v9 )
return v9;
sched_yield();
}
}
return v9;
}
//----- (000000014001E880) ----------------------------------------------------
__int64 __fastcall pthread_cond_timedwait(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3)
{
return pthread_cond_timedwait_impl(a1, a2, a3, 0);
}
//----- (000000014001E890) ----------------------------------------------------
__int64 __fastcall pthread_cond_timedwait_relative_np(unsigned __int64 *a1, volatile signed __int64 *a2, __int64 a3)
{
return pthread_cond_timedwait_impl(a1, a2, a3, 1);
}
//----- (000000014001E8A0) ----------------------------------------------------
__int64 __fastcall pthread_check(unsigned __int64 a1)
{
__int64 v1; // rax
char *v2; // rcx
DWORD dwFlags[3]; // [rsp+2Ch] [rbp-Ch] BYREF
if ( a1
&& ((v1 = _pth_gpointer_locked(a1), !*(_DWORD *)(v1 + 188))
|| (v2 = *(char **)(v1 + 40), (unsigned __int64)(v2 - 1) <= 0xFFFFFFFFFFFFFFFDuLL)
&& GetHandleInformation(v2, dwFlags)) )
{
return 0;
}
else
{
return 3;
}
}
//----- (000000014001E8F0) ----------------------------------------------------
__int64 __fastcall sched_get_priority_min(unsigned int a1)
{
__int64 result; // rax
result = 4294967281LL;
if ( a1 > 2 )
{
*_errno() = 22;
return 0xFFFFFFFFLL;
}
return result;
}
//----- (000000014001E920) ----------------------------------------------------
__int64 __fastcall sched_get_priority_max(unsigned int a1)
{
if ( a1 <= 2 )
return 15;
*_errno() = 22;
return 0xFFFFFFFFLL;
}
//----- (000000014001E950) ----------------------------------------------------
__int64 __fastcall pthread_attr_setschedparam(__int64 a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*(_DWORD *)(a1 + 24) = *a2;
return 0;
}
//----- (000000014001E970) ----------------------------------------------------
__int64 __fastcall pthread_attr_getschedparam(__int64 a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = *(_DWORD *)(a1 + 24);
return 0;
}
//----- (000000014001E990) ----------------------------------------------------
__int64 __fastcall pthread_attr_setschedpolicy(__int64 a1, unsigned int a2)
{
if ( a1 && a2 <= 2 )
return a2 != 0 ? 0x81 : 0;
else
return 22;
}
//----- (000000014001E9B0) ----------------------------------------------------
__int64 __fastcall pthread_attr_getschedpolicy(__int64 a1, _DWORD *a2)
{
if ( !a1 || !a2 )
return 22;
*a2 = 0;
return 0;
}
//----- (000000014001E9D0) ----------------------------------------------------
__int64 __fastcall pthread_getschedparam(unsigned __int64 a1, _DWORD *a2, _DWORD *a3)
{
unsigned int v6; // ebx
v6 = pthread_check(a1);
if ( v6 )
return v6;
if ( a3 && a2 )
{
*a2 = *(_DWORD *)(_pth_gpointer_locked(a1) + 184);
*a3 = *(_DWORD *)(_pth_gpointer_locked(a1) + 192);
return v6;
}
return 22;
}
//----- (000000014001EA40) ----------------------------------------------------
__int64 __fastcall pthread_setschedparam(unsigned __int64 a1, unsigned int a2, int *a3)
{
__int64 result; // rax
int v7; // esi
int v8; // eax
__int64 v9; // rbx
result = pthread_check(a1);
if ( !(_DWORD)result )
{
if ( a2 > 2 || !a3 )
return 22;
result = 129;
if ( a2 )
return result;
v7 = *a3;
if ( (unsigned int)(*a3 + 15) > 0x1E )
return 22;
if ( v7 != -15 )
{
if ( v7 < -1 )
{
v7 = -2;
}
else
{
v8 = 2;
if ( v7 <= 2 )
v8 = *a3;
if ( v7 != 15 )
v7 = v8;
}
}
v9 = _pth_gpointer_locked(a1);
if ( !SetThreadPriority(*(HANDLE *)(v9 + 40), v7) )
return 22;
*(_DWORD *)(v9 + 184) = 0;
*(_DWORD *)(v9 + 192) = *a3;
return 0;
}
return result;
}
//----- (000000014001EAF0) ----------------------------------------------------
__int64 __fastcall sched_getscheduler(__int64 dwProcessId)
{
DWORD v1; // ebx
HANDLE v3; // rcx
BOOL v4; // ebx
v1 = dwProcessId;
if ( !dwProcessId || GetCurrentProcessId() == dwProcessId )
return 0;
v3 = OpenProcess(0x400u, 0, v1);
if ( v3 )
{
CloseHandle(v3);
return 0;
}
v4 = GetLastError() != 5;
*_errno() = 2 * v4 + 1;
return 0xFFFFFFFFLL;
}
//----- (000000014001EB60) ----------------------------------------------------
__int64 __fastcall sched_setscheduler(__int64 dwProcessId, unsigned int a2, __int64 a3)
{
DWORD v3; // esi
HANDLE v6; // rcx
BOOL v7; // ebx
v3 = dwProcessId;
if ( !a3 )
{
*_errno() = 22;
return (unsigned int)-1;
}
if ( dwProcessId && GetCurrentProcessId() != dwProcessId )
{
v6 = OpenProcess(0x200u, 0, v3);
if ( !v6 )
{
v7 = GetLastError() != 5;
*_errno() = 2 * v7 + 1;
return (unsigned int)-1;
}
CloseHandle(v6);
}
if ( a2 )
{
*_errno() = 40;
return (unsigned int)-1;
}
return a2;
}
//----- (000000014001EBF0) ----------------------------------------------------
__int64 sched_yield()
{
Sleep(0);
return 0;
}
//----- (000000014001ED20) ----------------------------------------------------
int printf_0(const char *const Format, ...)
{
FILE *v2; // rax
va_list va; // [rsp+68h] [rbp+10h] BYREF
va_start(va, Format);
v2 = _acrt_iob_func_0(1u);
return _stdio_common_vfprintf(0, v2, Format, 0, va);
}
//----- (000000014001EDC2) ----------------------------------------------------
void __noreturn thread_print_cold()
{
BUG();
}
//----- (000000014001EDD5) ----------------------------------------------------
void __fastcall __noreturn pthread_once_cold(__int64 a1, __int64 a2, __int64 a3, __int64 a4, int a5, __int64 a6)
{
MEMORY[0] = a6;
BUG();
}
// nfuncs=644 queued=533 decompiled=533 lumina nreq=0 worse=0 better=0
// ALL OK, 533 function(s) have been successfully decompiled
Binary Ninja dump
int64_t __mingw_invalidParameterHandler() __pure
{
return;
}
int64_t pre_c_init()
{
__mingw_initltsdrot_force = 1;
__mingw_initltsdyn_force = 1;
_.bss = 1;
int32_t rcx;
rcx = false;
managedapp = rcx;
if (!_.bss)
_set_app_type(_crt_console_app);
else
_set_app_type(_crt_gui_app);
int32_t* rax_1 = __p__fmode();
*rax_1 = _.bss;
int32_t* rax_2 = __p__commode();
*rax_2 = _.bss;
if (_.data != 1)
return 0;
__mingw_setusermatherr(_matherr);
return 0;
}
int64_t pre_cpp_init()
{
startinfo = _.bss;
__getmainargs(&argc, &argv, &envp, _.data, &startinfo);
return 0;
}
uint64_t __tmainCRTStartup()
{
TEB* gsbase;
void* StackBase = gsbase->NtTib.Self->NtTib.StackBase;
int32_t rdi;
while (true)
{
int64_t _.bss_1 = 0;
if (0 == _.bss)
_.bss = StackBase;
else
_.bss_1 = _.bss;
if (!_.bss_1)
{
rdi = 0;
if (__native_startup_state != 1)
break;
}
else if (StackBase == _.bss_1)
{
rdi = 1;
if (__native_startup_state != 1)
break;
}
else
{
Sleep(0x3e8);
continue;
}
_amsg_exit(0x1f);
/* no return */
}
if (!__native_startup_state)
{
__native_startup_state = 1;
_initterm(&_.CRT$XIA, &_.CRT$XIZ);
}
else
has_cctor = 1;
if (__native_startup_state == 1)
{
_initterm(&_.CRT$XCA, &_.CRT$XCZ);
__native_startup_state = 2;
if (!rdi)
{
_.bss;
_.bss = 0;
}
}
else if (!rdi)
{
_.bss;
_.bss = 0;
}
_TLS_Entry_0(0, 2);
_pei386_runtime_relocator();
_.bss = SetUnhandledExceptionFilter(_gnu_exception_handler);
_set_invalid_parameter_handler(__mingw_invalidParameterHandler);
int32_t argc_2 = argc;
int64_t _Size_1 = (argc_2 + 1) << 3;
void* rax_5 = malloc(_Size_1);
int64_t* argv_1 = argv;
int64_t* r12 = rax_5;
void* rdi_4;
if (argc_2 <= 0)
rdi_4 = rax_5;
else
{
int64_t i = 0;
do
{
uint64_t _Size = strlen(*(argv_1 + i)) + 1;
int64_t rax_7 = malloc(_Size);
*(r12 + i) = rax_7;
int64_t rdx_1 = *(argv_1 + i);
i += 8;
memcpy(rax_7, rdx_1, _Size);
} while (_Size_1 - 8 != i);
rdi_4 = _Size_1 - 8 + r12;
}
*rdi_4 = 0;
argv = r12;
__main();
int64_t envp_1 = envp;
int32_t argc_1 = argc;
**&__imp___initenv = envp_1;
int32_t result = main(argc_1, argv, envp_1);
int32_t managedapp_1 = managedapp;
mainret = result;
if (!managedapp_1)
{
exit(result);
/* no return */
}
if (has_cctor)
return result;
_cexit();
return mainret;
}
uint64_t WinMainCRTStartup()
{
_.bss = 1;
return __tmainCRTStartup();
}
uint64_t _start()
{
_.bss = 0;
return __tmainCRTStartup();
}
uint64_t atexit(_PVFV arg1)
{
_PVFV rax = _onexit(arg1);
return rax - rax;
}
int64_t __gcc_register_frame()
{
/* tailcall */
return atexit(__gcc_deregister_frame);
}
int64_t __gcc_deregister_frame() __pure
{
return;
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t minuspercent___system_u813(int64_t arg1, int64_t arg2)
{
void* const var_40 = &data_140020080;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x16c;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38_2 = 0x170;
popFrame();
return arg1 - arg2;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
uint64_t nimDecRefIsLastCyclicDyn(void** arg1)
{
char const* const var_50 = "nimDecRefIsLastCyclicDyn";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* var_18 = nimErrorFlag();
int64_t var_48_1 = 0x200;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
char var_9 = 0;
int64_t var_48_2 = 0x201;
if (arg1)
{
int64_t var_48_3 = 0x202;
int64_t var_48_4 = 0x3a;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_20_1 = 0;
int64_t* rax_2 = minuspercent___system_u813(arg1, 0x10);
int64_t var_48_5 = 0x203;
char const* const var_40_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_8;
if (*rax_2 > 0xf)
{
int64_t var_48_7 = 0x207;
int64_t rax_7 = *rax_2;
char rdx_1 = 0;
if (rax_7 - 0x10)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
*rax_2 = rax_7 - 0x10;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
else
raiseOverflow();
}
else
{
int64_t var_48_6 = 0x204;
var_9 = 1;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
}
popFrame();
return var_9;
}
int64_t eqdestroy___system_u5217(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u56(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u5217(arg1);
return *rax;
}
int64_t* add__system_u2978(int64_t* arg1, int64_t arg2, int64_t arg3)
{
void* const var_50 = &data_14002014a;
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x1c;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
if (arg1[1] <= *arg1)
{
int64_t var_48_2 = 0x1d;
resize__system_u2986(arg1);
}
int64_t var_48_3 = 0x1e;
*((*arg1 << 4) + arg1[2]) = arg2;
*((*arg1 << 4) + arg1[2] + 8) = arg3;
int64_t var_48_4 = 0x1f;
int64_t rax_17 = *arg1;
char rdx_5 = 0;
if (rax_17 + 1)
rdx_5 = 1;
if (!(rdx_5 & 1))
*arg1 = rax_17 + 1;
else
raiseOverflow();
return popFrame();
}
int64_t* nimTraceRefDyn(int64_t* arg1, int64_t* arg2)
{
char const* const var_40 = "nimTraceRefDyn";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x88;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_38_2 = 0x89;
if (*arg1)
{
int64_t var_38_3 = 0x8a;
int64_t var_38_4 = 0x8b;
add__system_u2978(arg2, arg1, **arg1);
}
return popFrame();
}
int64_t* eqtrace___system_u5229(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t eqdestroy___system_u4744(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u60(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u4744(arg1);
return *rax;
}
int64_t* eqtrace___system_u4756(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t eqdestroy___system_u4813(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u62(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u4813(arg1);
return *rax;
}
int64_t* eqtrace___system_u4825(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t eqdestroy___system_u4903(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u64(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u4903(arg1);
return *rax;
}
int64_t* eqtrace___system_u4915(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t eqdestroy___system_u5283(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u66(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u5283(arg1);
return *rax;
}
int64_t* eqtrace___system_u5295(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t eqdestroy___system_u9056(void* arg1)
{
char var_9 = 0;
if (nimDecRefIsLastCyclicDyn(*(arg1 + 8)) == 1)
nimDestroyAndDispose(*(arg1 + 8));
if (*(arg1 + 0x20) && !(0x4000000000000000 & **(arg1 + 0x20)))
deallocShared(*(arg1 + 0x20));
int64_t rdx_2 = *(arg1 + 0x30);
int64_t var_28 = *(arg1 + 0x28);
int64_t var_20 = rdx_2;
eqdestroy___stdZassertions_u74(&var_28);
char var_a = 0;
char result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x38)) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(*(arg1 + 0x38));
}
uint64_t rttiDestroy__systemZexceptions_u68(void* arg1)
{
char* rax = nimErrorFlag();
eqdestroy___system_u9056(arg1);
return *rax;
}
int64_t* eqtrace___system_u9068(void* arg1, int64_t* arg2)
{
nimTraceRefDyn(arg1 + 8, arg2);
return nimTraceRefDyn(arg1 + 0x38, arg2);
}
int64_t* nimAddCharV1(int64_t* arg1, char arg2)
{
prepareAdd(arg1, 1);
*(arg1[1] + *arg1 + 8) = arg2;
int64_t rax_6 = *arg1;
char rdx_1 = 0;
if (rax_6 + 1)
rdx_1 = 1;
if (rdx_1 & 1)
return raiseOverflow();
*arg1 = rax_6 + 1;
int64_t* result = *arg1;
*(arg1[1] + result + 8) = 0;
return result;
}
int64_t nimCopyMem(int64_t arg1, int64_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memcpy(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
int64_t copyMem__system_u1731(int64_t arg1, int64_t arg2, uint64_t arg3)
{
return nimCopyMem(arg1, arg2, arg3);
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t* addChars__stdZprivateZdigitsutils_u104(int64_t* arg1, int64_t arg2, int64_t arg3, uint64_t arg4)
{
char const* const var_40 = "addChars";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x2c;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t rax_1 = *arg1;
int64_t var_38_2 = 0x2d;
char rcx_1 = 0;
uint64_t rax_3 = arg4 + rax_1;
if (arg4 + rax_1)
rcx_1 = 1;
if (rcx_1 & 1)
raiseOverflow();
else if (rax_3 >= 0)
{
setLengthStrV2(arg1, rax_3);
int64_t var_38_3 = 0x35;
if (rax_1 < 0 || rax_1 >= *arg1)
raiseIndexError2(rax_1, *arg1 - 1);
else if (arg3 > 0x17)
raiseIndexError2(arg3, 0x17);
else if (arg4 >= 0)
copyMem__system_u1731(rax_1 + arg1[1] + 8, arg3 + arg2, arg4);
else
raiseRangeErrorI(arg4, 0, 0x7fffffffffffffff);
}
else
raiseRangeErrorI(rax_3, 0, 0x7fffffffffffffff);
return popFrame();
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
int64_t* addIntImpl__stdZprivateZdigitsutils_u61(int64_t* arg1, uint64_t arg2)
{
char const* const var_90 = "addIntImpl";
char const* const var_80 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_88 = 0;
int16_t var_78 = 0;
void* var_98;
nimFrame(&var_98);
char* var_20 = nimErrorFlag();
int64_t var_88_1 = 0x3c;
uint64_t var_10 = arg2;
int64_t var_88_2 = 0x3d;
int64_t var_18 = 0x17;
int64_t var_88_3 = 0x40;
while (true)
{
char var_58[0x20];
if (var_10 <= 0x63)
{
int64_t var_88_10 = 0x49;
if (var_10 > 9)
{
int64_t var_88_12 = 0x4c;
uint64_t rax_50 = var_10 * 2;
int64_t var_88_13 = 0x4d;
if (var_18 > 0x17)
raiseIndexError2(var_18, 0x17);
else if (rax_50 + 1 <= 0xc7)
{
var_58[var_18] = _.rdata[1][rax_50];
int64_t var_88_14 = 0x4e;
char rdx_13 = 0;
if (var_18 - 1)
rdx_13 = 1;
if (rdx_13 & 1)
raiseOverflow();
else if (var_18 - 1 > 0x17)
raiseIndexError2(var_18 - 1, 0x17);
else if (rax_50 <= 0xc7)
{
var_58[var_18 - 1] = _.rdata[rax_50];
int64_t var_88_15 = 0x4f;
char rdx_15 = 0;
if (var_18 - 1)
rdx_15 = 1;
if (!(rdx_15 & 1))
{
var_18 -= 1;
goto label_14000289f;
}
raiseOverflow();
}
else
raiseIndexError2(rax_50, 0xc7);
}
else
raiseIndexError2(rax_50 + 1, 0xc7);
}
else
{
int64_t var_88_11 = 0x4a;
if (var_18 <= 0x17)
{
var_58[var_18] = var_10 + 0x30;
label_14000289f:
int64_t var_88_16 = 0x50;
char rdx_16 = 0;
if (0x18 + -(var_18))
rdx_16 = 1;
if (!(rdx_16 & 1))
addChars__stdZprivateZdigitsutils_u104(arg1, &var_58, var_18,
0x18 - var_18);
else
raiseOverflow();
}
else
raiseIndexError2(var_18, 0x17);
}
break;
}
int64_t var_88_4 = 0x41;
uint64_t var_28_1 = var_10;
int64_t var_88_5 = 0x42;
var_10 u/= 0x64;
int64_t var_88_6 = 0x43;
if ((var_28_1 - var_10 * 0x64) * 2 > 0x7fff)
{
raiseRangeErrorNoArgs();
break;
}
int16_t rax_14 = (var_28_1 - var_10 * 0x64) * 2;
int64_t var_88_7 = 0x44;
if (var_18 > 0x17)
{
raiseIndexError2(var_18, 0x17);
break;
}
if (rax_14 + 1 < -0x8000 || rax_14 + 1 > 0x7fff)
{
raiseOverflow();
break;
}
if (rax_14 + 1 > 0xc7)
{
raiseIndexError2(rax_14 + 1, 0xc7);
break;
}
var_58[var_18] = _.rdata[rax_14 + 1];
int64_t var_88_8 = 0x45;
char rdx_7 = 0;
if (var_18 - 1)
rdx_7 = 1;
if (rdx_7 & 1)
{
raiseOverflow();
break;
}
if (var_18 - 1 > 0x17)
{
raiseIndexError2(var_18 - 1, 0x17);
break;
}
if (rax_14 > 0xc7)
{
raiseIndexError2(rax_14, 0xc7);
break;
}
var_58[var_18 - 1] = _.rdata[rax_14];
int64_t var_88_9 = 0x46;
char rdx_9 = 0;
if (var_18 - 2)
rdx_9 = 1;
if (rdx_9 & 1)
{
raiseOverflow();
break;
}
var_18 -= 2;
continue;
}
return popFrame();
}
int64_t* addInt__stdZprivateZdigitsutils_u184(int64_t* arg1, uint64_t arg2)
{
char const* const var_40 = "addInt";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
char* var_10 = nimErrorFlag();
int64_t var_38_1 = 0x58;
addIntImpl__stdZprivateZdigitsutils_u61(arg1, arg2);
return popFrame();
}
int64_t* addInt__stdZprivateZdigitsutils_u187(int64_t* arg1, uint64_t arg2)
{
char const* const var_40 = "addInt";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_10 = 0;
int64_t var_38_1 = 0x64;
int64_t var_38_7;
if (arg2 >= 0)
{
int64_t var_38_6 = 0x6b;
var_38_7 = 0x71;
addInt__stdZprivateZdigitsutils_u184(arg1, arg2);
}
else
{
int64_t var_38_2 = 0x65;
uint64_t var_10_1;
if (arg2 != -0x8000000000000000)
{
int64_t var_38_4 = 0x68;
if (arg2 != -0x8000000000000000)
{
var_10_1 = -(arg2);
goto label_140002a37;
}
raiseOverflow();
}
else
{
int64_t var_38_3 = 0x66;
var_10_1 = arg2;
label_140002a37:
int64_t var_38_5 = 0x69;
nimAddCharV1(arg1, 0x2d);
var_38_7 = 0x71;
addInt__stdZprivateZdigitsutils_u184(arg1, var_10_1);
}
}
return popFrame();
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t* addInt__stdZprivateZdigitsutils_u204(int64_t* arg1, uint64_t arg2)
{
char const* const var_30 = "addInt";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x74;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
addInt__stdZprivateZdigitsutils_u187(arg1, arg2);
return popFrame();
}
int64_t* dollar___systemZdollars_u14(int64_t* arg1, uint64_t arg2)
{
void* const var_40 = &data_140020357;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\dollars.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x14;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\dollars.nim";
int64_t var_18 = 0;
void* const var_10 = &TM__n49a9aYp5BrbXv9a6OCpJYm0g_2;
int64_t var_38_2 = 0x15;
addInt__stdZprivateZdigitsutils_u204(&var_18, arg2);
popFrame();
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
int64_t* dollar___systemZdollars_u34(int64_t* arg1, uint64_t arg2)
{
void* const var_40 = &data_140020357;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\dollars.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x14;
int64_t var_18 = 0;
void* const var_10 = &TM__n49a9aYp5BrbXv9a6OCpJYm0g_2;
int64_t var_38_2 = 0x15;
addInt__stdZprivateZdigitsutils_u187(&var_18, arg2);
popFrame();
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
int64_t initLock__coreZlocks_u7(CRITICAL_SECTION* arg1)
{
return InitializeCriticalSection(arg1);
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
int64_t acquire__coreZlocks_u14(CRITICAL_SECTION* arg1)
{
return EnterCriticalSection(arg1);
}
int64_t nimSetMem__systemZmemory_u7(int64_t arg1, int32_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memset(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
uint64_t nimZeroMem(int64_t arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
nimSetMem__systemZmemory_u7(arg1, 0, arg2);
return *rax;
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t minuspercent___system_u813(int64_t arg1, int64_t arg2)
{
void* const var_40 = &data_1400204e0;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x16c;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38_2 = 0x170;
popFrame();
return arg1 - arg2;
}
int64_t* nimIncRefCyclic(int64_t arg1)
{
char rdx;
char arg_10 = rdx;
char const* const var_50 = "nimIncRefCyclic";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x2d;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_2 = 0x3a;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_10 = 0;
int64_t* rax_2 = minuspercent___system_u813(arg1, 0x10);
int64_t var_48_3 = 0x2e;
char const* const var_40_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_5 = *rax_2;
char rdx_1 = 0;
if (rax_5 + 0x10)
rdx_1 = 1;
if (!(rdx_1 & 1))
*rax_2 = rax_5 + 0x10;
else
raiseOverflow();
return popFrame();
}
uint64_t nimDecRefIsLastCyclicDyn(void** arg1)
{
char const* const var_50 = "nimDecRefIsLastCyclicDyn";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* var_18 = nimErrorFlag();
int64_t var_48_1 = 0x200;
char var_9 = 0;
int64_t var_48_2 = 0x201;
if (arg1)
{
int64_t var_48_3 = 0x202;
int64_t var_48_4 = 0x3a;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_20_1 = 0;
int64_t* rax_2 = minuspercent___system_u813(arg1, 0x10);
int64_t var_48_5 = 0x203;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_8;
if (*rax_2 > 0xf)
{
int64_t var_48_7 = 0x207;
int64_t rax_7 = *rax_2;
char rdx_1 = 0;
if (rax_7 - 0x10)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
*rax_2 = rax_7 - 0x10;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
else
raiseOverflow();
}
else
{
int64_t var_48_6 = 0x204;
var_9 = 1;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
}
popFrame();
return var_9;
}
uint32_t eqcopy___stdZexitprocs_u97(int64_t* arg1, char* arg2)
{
int64_t var_48;
nimZeroMem(&var_48, 0x18);
var_48 = *arg1;
int64_t var_40 = arg1[1];
int64_t* rax_1 = arg1[2];
nimZeroMem(arg1, 0x18);
*arg1 = *arg2;
if (!*arg1)
{
nimZeroMem(&arg1[1], 0x10);
void** rax_12 = arg1[2];
if (*(arg2 + 0x10))
nimIncRefCyclic(*(arg2 + 0x10));
arg1[2] = *(arg2 + 0x10);
arg1[1] = *(arg2 + 8);
char var_21_1 = 0;
if (nimDecRefIsLastCyclicDyn(rax_12) == 1)
nimDestroyAndDispose(rax_12);
}
else
{
arg1[1] = 0;
arg1[1] = *(arg2 + 8);
}
uint32_t result = var_48;
if (!result)
{
char var_22_1 = 0;
result = nimDecRefIsLastCyclicDyn(rax_1) ^ 1;
if (!result)
return nimDestroyAndDispose(rax_1);
}
return result;
}
int64_t* dollar___stdZexitprocs_u6(int64_t* arg1, char arg2)
{
uint32_t rax_1 = arg2;
int64_t var_18;
void* const var_10;
if (!rax_1)
{
var_18 = 8;
var_10 = &TM__JXL39bfraktrl3ZkJ5EQGjw_7;
}
else if (rax_1 == 1)
{
var_18 = 7;
var_10 = &TM__JXL39bfraktrl3ZkJ5EQGjw_9;
}
else
{
var_18 = 0;
var_10 = &TM__JXL39bfraktrl3ZkJ5EQGjw_11;
}
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
uint32_t eqdestroy___stdZexitprocs_u94(char* arg1)
{
uint32_t result = *arg1;
if (!result)
{
char var_9_1 = 0;
result = nimDecRefIsLastCyclicDyn(*(arg1 + 0x10)) ^ 1;
if (!result)
return nimDestroyAndDispose(*(arg1 + 0x10));
}
return result;
}
char* eqwasMoved___stdZexitprocs_u91(char* arg1)
{
*arg1 = 0;
if (!*arg1)
return nimZeroMem(&arg1[8], 0x10);
*(arg1 + 8) = 0;
return arg1;
}
int64_t release__coreZlocks_u16(CRITICAL_SECTION* arg1)
{
return LeaveCriticalSection(arg1);
}
int64_t* callClosures__stdZexitprocs_u19()
{
char const* const var_80 = "callClosures";
char const* const var_70 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_78 = 0;
int16_t var_68 = 0;
void* var_88;
nimFrame(&var_88);
char* rax = nimErrorFlag();
int64_t var_78_1 = 0x53;
char const* const var_70_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\core\locks.nim";
acquire__coreZlocks_u14(&gFunsLock__stdZexitprocs_u14);
if (!*rax)
{
int64_t var_20_1 = 0;
int64_t var_28_1 = 0;
int64_t var_78_2 = 6;
char const* const var_70_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_78_3 = 0x2d;
char const* const var_70_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t _.bss_1 = _.bss;
char rdx_1 = 0;
if (_.bss_1 - 1)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
int64_t var_78_4 = 0x21;
char const* const var_70_4 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_10_1 = _.bss_1 - 1;
int64_t var_78_5 = 0x22;
while (true)
{
if (var_10_1 < 0)
{
int64_t var_78_13 = 0x32;
char const* const var_70_10 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
setLen__stdZexitprocs_u31(&_.bss, nullptr);
break;
}
char var_a8;
nimZeroMem(&var_a8, 0x18);
int64_t var_78_6 = 0x2d;
char const* const var_70_5 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_78_7 = 0x3a6;
char const* const var_70_6 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
if (var_10_1 < 0 || var_10_1 >= _.bss)
{
raiseIndexError2(var_10_1, _.bss - 1);
break;
}
void* rax_18 = var_10_1 * 0x18 + data_140027048;
int64_t var_d8 = *(rax_18 + 8);
int64_t var_d0_1 = *(rax_18 + 0x10);
int64_t var_c8_1 = *(rax_18 + 0x18);
eqcopy___stdZexitprocs_u97(&var_a8, &var_d8);
int64_t var_78_8 = 0x2f;
char const* const var_70_7 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_f8;
int64_t var_e8;
int64_t var_a0;
if (!var_a8)
{
int64_t var_78_10 = 0x30;
if (var_a8 & 7)
{
int64_t var_58;
dollar___stdZexitprocs_u6(&var_58, var_a8);
var_e8 = 0x3c;
void* const var_e0_1 = &TM__JXL39bfraktrl3ZkJ5EQGjw_5;
var_f8 = var_58;
int64_t var_50;
int64_t var_f0_1 = var_50;
raiseFieldErrorStr(&var_e8, &var_f8);
break;
}
int64_t var_98;
if (!var_98)
var_a0();
else
var_a0(var_98);
if (*rax)
break;
}
else
{
int64_t var_78_9 = 0x31;
if ((var_a8 & 7) != 1)
{
int64_t var_48;
dollar___stdZexitprocs_u6(&var_48, var_a8);
var_e8 = 0x3c;
void* const var_e0_2 = &TM__JXL39bfraktrl3ZkJ5EQGjw_14;
var_f8 = var_48;
int64_t var_40;
int64_t var_f0_2 = var_40;
raiseFieldErrorStr(&var_e8, &var_f8);
break;
}
var_a0();
if (*rax)
break;
}
int64_t var_78_11 = 0x27;
char const* const var_70_8 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_14 = 0;
if (var_10_1 - 1)
rdx_14 = 1;
if (rdx_14 & 1)
{
raiseOverflow();
break;
}
var_10_1 -= 1;
int64_t var_78_12 = 0x3a6;
char const* const var_70_9 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
eqdestroy___stdZexitprocs_u94(&var_a8);
continue;
}
}
else
raiseOverflow();
char rax_48 = *rax;
*rax = 0;
int64_t var_78_14 = 0x58;
char const* const var_70_11 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\core\locks.nim";
release__coreZlocks_u16(&gFunsLock__stdZexitprocs_u14);
if (!*rax)
*rax = rax_48;
}
return popFrame();
}
int64_t* addExitProc__stdZexitprocs_u184(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_90 = "addExitProc";
char const* const var_80 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_88 = 0;
int16_t var_78 = 0;
void* var_98;
nimFrame(&var_98);
char* rax_1 = nimErrorFlag();
int64_t var_88_1 = 0x53;
acquire__coreZlocks_u14(&gFunsLock__stdZexitprocs_u14);
if (!*rax_1)
{
int64_t var_48;
nimZeroMem(&var_48, 0x10);
int64_t var_88_2 = 0x3f;
char const* const var_80_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_88_3 = 0x35;
if (!_.bss)
{
int64_t var_88_4 = 0x36;
atexit(callClosures__stdZexitprocs_u19);
}
int64_t var_88_5 = 0x40;
char var_68;
nimZeroMem(&var_68, 0x18);
var_68 = 0;
int64_t var_88_6 = 0x26;
char const* const var_80_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\threadimpl.nim";
int64_t var_b8 = rax;
int64_t var_b0_1 = rdx;
eqdup___system_u4017(&var_b8, 1, &var_48);
int64_t rax_8 = var_48;
int64_t var_88_7 = 0x40;
char const* const var_80_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_d8 = var_68;
int64_t var_d0_1 = rax_8;
int64_t var_40;
int64_t var_c8_1 = var_40;
add__stdZexitprocs_u190(&_.bss, &var_d8);
char rax_13 = *rax_1;
*rax_1 = 0;
int64_t var_88_8 = 0x58;
char const* const var_80_4 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\core\locks.nim";
release__coreZlocks_u16(&gFunsLock__stdZexitprocs_u14);
if (!*rax_1)
*rax_1 = rax_13;
}
return popFrame();
}
int64_t* atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatsexitprocsdotnim_Init000()
{
char const* const var_40 = "exitprocs";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
char* var_10 = nimErrorFlag();
int64_t var_38_1 = 0x1b;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\exitprocs.nim";
initLock__coreZlocks_u7(&gFunsLock__stdZexitprocs_u14);
nimTestErrorFlag();
return popFrame();
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t* restoreConsoleOutputCP__stdZsyncio_u657()
{
char const* const var_40 = "restoreConsoleOutputCP";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\syncio.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int32_t var_c = 0;
int32_t var_c_1 = Dl_520094344_(_.bss);
return popFrame();
}
int64_t nimSetMem__systemZmemory_u7(int64_t arg1, int32_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memset(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
uint64_t nimZeroMem(int64_t arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
nimSetMem__systemZmemory_u7(arg1, 0, arg2);
return *rax;
}
int64_t* restoreConsoleCP__stdZsyncio_u658()
{
char const* const var_40 = "restoreConsoleCP";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\syncio.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int32_t var_c = 0;
int32_t var_c_1 = Dl_520094346_(consoleCP__stdZsyncio_u656);
return popFrame();
}
int64_t* atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_Init000()
{
char const* const var_70 = "syncio";
char const* const var_60 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\syncio.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
char* rax = nimErrorFlag();
int64_t var_68_1 = 0x33d;
char const* const var_60_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\syncio.nim";
int32_t var_14 = 0;
_setmode(_fileno(__acrt_iob_func(0)), 0x8000);
int64_t var_68_2 = 0x33e;
int32_t var_18 = 0;
_setmode(_fileno(__acrt_iob_func(1)), 0x8000);
int64_t var_68_3 = 0x33f;
int32_t var_1c = 0;
_setmode(_fileno(__acrt_iob_func(2)), 0x8000);
int64_t var_68_4 = 0x351;
_.bss = Dl_520094348_();
int64_t var_68_5 = 0x352;
consoleCP__stdZsyncio_u656 = Dl_520094349_();
int64_t var_68_6 = 0x357;
int64_t* (* var_88)();
if (_.bss != 0xfde9)
{
int64_t var_68_7 = 0x358;
int32_t var_20_1 = 0;
int32_t var_20_2 = Dl_520094344_(0xfde9);
int64_t var_68_8 = 0x359;
int64_t* (* var_38)();
nimZeroMem(&var_38, 0x10);
var_38 = restoreConsoleOutputCP__stdZsyncio_u657;
var_88 = var_38;
int64_t var_80_1 = 0;
addExitProc__stdZexitprocs_u184(&var_88);
}
if (_.bss == 0xfde9 || !*rax)
{
int64_t var_68_9 = 0x35b;
if (consoleCP__stdZsyncio_u656 != 0xfde9)
{
int64_t var_68_10 = 0x35c;
int32_t var_24_1 = 0;
int32_t var_24_2 = Dl_520094346_(0xfde9);
int64_t var_68_11 = 0x35d;
int64_t* (* var_48)();
nimZeroMem(&var_48, 0x10);
var_48 = restoreConsoleCP__stdZsyncio_u658;
var_88 = var_48;
int64_t var_80_2 = 0;
addExitProc__stdZexitprocs_u184(&var_88);
}
}
nimTestErrorFlag();
return popFrame();
}
int64_t atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_DatInit000()
{
int64_t var_18 = 8;
void* const var_10 = &TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_4;
TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2 = nimLoadLibrary(&var_18);
if (!TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2)
{
var_18 = 8;
void* const var_10_1 = &TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_6;
nimLoadLibraryError(&var_18);
/* no return */
}
Dl_520094348_ = nimGetProcAddr(TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "GetConsoleOutputCP");
Dl_520094349_ = nimGetProcAddr(TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "GetConsoleCP");
Dl_520094344_ = nimGetProcAddr(TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "SetConsoleOutputCP");
int64_t result = nimGetProcAddr(TM__xNF6mvRQ4Pd1hTNM9cEHXwQ_2, "SetConsoleCP");
Dl_520094346_ = result;
return result;
}
uint64_t fprintf(FILE* arg1, char* arg2, int64_t arg3)
{
int64_t arg_18 = arg3;
int64_t r9;
int64_t arg_20 = r9;
return __mingw_vfprintf(arg1, arg2, &arg_18);
}
uint64_t printf(char* arg1, int64_t arg2)
{
int64_t arg_10 = arg2;
int64_t r8;
int64_t arg_18 = r8;
int64_t r9;
int64_t arg_20 = r9;
return __mingw_vfprintf(__acrt_iob_func(1), arg1, &arg_10);
}
void* const nimToCStringConv(int64_t* arg1)
{
if (*arg1)
return arg1[1] + 8;
return &data_140021110;
}
HMODULE nimLoadLibrary(int64_t* arg1)
{
int64_t rdx = arg1[1];
int64_t var_20 = 0;
int64_t var_48 = *arg1;
int64_t var_40 = rdx;
return LoadLibraryA(nimToCStringConv(&var_48));
}
int32_t rawWrite(FILE* arg1, char* arg2)
{
int64_t var_10 = 0;
int64_t var_18 = 0;
uint64_t var_18_1 = fwrite(arg2, 1, strlen(arg2), arg1);
int32_t var_1c = 0;
int32_t result = fflush(arg1);
int32_t result_1 = result;
return result;
}
void nimLoadLibraryError(int64_t* arg1) __noreturn
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
rawWrite(__acrt_iob_func(2), "could not load: ");
int64_t var_48 = rax;
int64_t var_40 = rdx;
void* rax_3 = nimToCStringConv(&var_48);
rawWrite(__acrt_iob_func(2), rax_3);
if (GetLastError() == ERROR_BAD_EXE_FORMAT)
rawWrite(__acrt_iob_func(2), "\n(bad format; library may be wrong architecture)");
rawWrite(__acrt_iob_func(2), "\n");
exit(1);
/* no return */
}
int64_t nimSetMem__systemZmemory_u7(int64_t arg1, int32_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memset(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
uint64_t nimZeroMem(int64_t arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
nimSetMem__systemZmemory_u7(arg1, 0, arg2);
return *rax;
}
int64_t nimCopyMem(int64_t arg1, int64_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memcpy(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
int64_t copyMem__system_u1731(int64_t arg1, int64_t arg2, uint64_t arg3)
{
return nimCopyMem(arg1, arg2, arg3);
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t* unregisterCycle__system_u3092(void* arg1)
{
char const* const var_70 = "unregisterCycle";
char const* const var_60 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
int64_t var_68_1 = 0x92;
char const* const var_60_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_1 = *(arg1 + 8);
char rdx = 0;
if (rax_1 - 1)
rdx = 1;
if (!(rdx & 1))
{
int64_t var_68_2 = 0x97;
int64_t rax_7 = *__emutls_get_address(&__emutls_v.roots__system_u3091);
char rdx_1 = 0;
if (rax_7 - 1)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
void* rax_11 = __emutls_get_address(&__emutls_v.roots__system_u3091);
int64_t* rdx_4 = ((rax_7 - 1) << 4) + *(rax_11 + 0x10);
int64_t* rcx_5 = *(rax_11 + 0x10) + ((rax_1 - 1) << 4);
int64_t rdx_5 = rdx_4[1];
*rcx_5 = *rdx_4;
rcx_5[1] = rdx_5;
int64_t var_68_3 = 0x98;
char rdx_6 = 0;
if (rax_1 - 1 + 1)
rdx_6 = 1;
if (!(rdx_6 & 1))
{
int64_t* rax_19 = __emutls_get_address(&__emutls_v.roots__system_u3091);
*(*(((rax_1 - 1) << 4) + rax_19[2]) + 8) = rax_1;
int64_t var_68_4 = 0x99;
int64_t rax_20 = *rax_19;
char rdx_11 = 0;
if (rax_20 - 1)
rdx_11 = 1;
if (!(rdx_11 & 1))
{
*__emutls_get_address(&__emutls_v.roots__system_u3091) = rax_20 - 1;
int64_t var_68_5 = 0x9a;
*(arg1 + 8) = 0;
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
return popFrame();
}
int64_t roundup__system_u5881(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "roundup";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xb;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
popFrame();
return -(arg2) & (arg2 - 1 + arg1);
}
int64_t msbit__system_u6016(int32_t arg1)
{
char const* const var_70 = "msbit";
char const* const var_60 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
int64_t var_28 = 0;
int64_t var_10 = 0;
int64_t var_18 = 0;
int64_t var_68_1 = 0xd8;
char const* const var_60_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_20;
if (arg1 > 0xffff)
{
int64_t var_40_1 = 0;
int64_t var_48_1 = 0;
int64_t var_68_3 = 0xdb;
int64_t var_18_1;
var_18_1 = arg1 > 0xffffff ? 0x18 : 0x10;
var_20 = var_18_1;
}
else
{
int64_t var_30_1 = 0;
int64_t var_38_1 = 0;
int64_t var_68_2 = 0xd9;
int64_t var_10_1;
var_10_1 = arg1 > 0xff ? 8 : 0;
var_20 = var_10_1;
}
int64_t var_68_4 = 0xdc;
int64_t result = *((arg1 >> var_20) + &fsLookupTable__system_u6015) + var_20;
popFrame();
return result;
}
int64_t* mappingSearch__system_u6041(int64_t* arg1, int64_t* arg2, int64_t* arg3)
{
char const* const var_50 = "mappingSearch";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0xeb;
int64_t var_10 = 0;
int64_t var_18 = 0;
int64_t rax_8 = roundup__system_u5881(1 << (msbit__system_u6016(*arg1) - 5), 0x1000) - 1;
int64_t var_48_2 = 0xec;
*arg1 += rax_8;
int64_t var_48_3 = 0xed;
*arg1 &= ~rax_8;
int64_t var_48_4 = 0xee;
int64_t rax_17 = *arg1;
if (rax_17 > 0x3f000000)
rax_17 = 0x3f000000;
*arg1 = rax_17;
int64_t var_48_5 = 0xef;
*arg2 = msbit__system_u6016(*arg1);
int64_t var_48_6 = 0xf0;
*arg3 = (*arg1 >> (*arg2 - 5)) - 0x20;
int64_t var_48_7 = 0xf1;
*arg2 -= 6;
return popFrame();
}
int64_t lsbit__system_u6024(int32_t arg1)
{
char const* const var_40 = "lsbit";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xdf;
int64_t result = msbit__system_u6016(-(arg1) & arg1);
popFrame();
return result;
}
int64_t findSuitableBlock__system_u6074(void* arg1, int64_t* arg2, int64_t* arg3)
{
char const* const var_40 = "findSuitableBlock";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x100;
int32_t rax_5 = 0xffffffff << *arg3 & *(arg1 + ((*arg2 + 0x400) << 2) + 4);
int64_t var_38_2 = 0x101;
int64_t result = 0;
int64_t var_38_3 = 0x102;
if (!rax_5)
{
int64_t var_38_6 = 0x106;
*arg2 = lsbit__system_u6024(0xffffffff << (*arg2 + 1) & *(arg1 + 0x1000));
int64_t var_38_7 = 0x107;
if (*arg2 > 0)
{
int64_t var_38_8 = 0x108;
*arg3 = lsbit__system_u6024(*(arg1 + ((*arg2 + 0x400) << 2) + 4));
int64_t var_38_9 = 0x109;
result = *(arg1 + ((*arg3 + (*arg2 << 5) + 0x20c) << 3) + 8);
}
}
else
{
int64_t var_38_4 = 0x103;
*arg3 = lsbit__system_u6024(rax_5);
int64_t var_38_5 = 0x104;
result = *(arg1 + ((*arg3 + (*arg2 << 5) + 0x20c) << 3) + 8);
}
popFrame();
return result;
}
void raiseOutOfMem__system_u5876() __noreturn
{
char const* const var_30 = "raiseOutOfMem";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\mmdisp.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x2f;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\mmdisp.nim";
if (outOfMemHook__system_u3635)
outOfMemHook__system_u3635();
int64_t var_28_2 = 0x30;
rawWrite(__acrt_iob_func(2), "out of memory\n");
int64_t var_28_3 = 0x31;
exit(1);
/* no return */
}
int64_t osAllocPages__system_u5901(uint64_t arg1)
{
char const* const var_40 = "osAllocPages";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xae;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t result = VirtualAlloc(nullptr, arg1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
int64_t var_38_2 = 0xb0;
if (result)
{
popFrame();
return result;
}
raiseOutOfMem__system_u5876();
/* no return */
}
int64_t allocPages__system_u6210(int64_t arg1, uint64_t arg2)
{
int64_t arg_8 = arg1;
char const* const var_40 = "allocPages";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x13f;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38_2 = 0x142;
int64_t result = osAllocPages__system_u5901(arg2);
popFrame();
return result;
}
int64_t osTryAllocPages__system_u5904(uint64_t arg1)
{
char const* const var_40 = "osTryAllocPages";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xb3;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t result = VirtualAlloc(nullptr, arg1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
popFrame();
return result;
}
int64_t tryAllocPages__system_u6214(int64_t arg1, uint64_t arg2)
{
int64_t arg_8 = arg1;
char const* const var_40 = "tryAllocPages";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x145;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38_2 = 0x148;
int64_t result = osTryAllocPages__system_u5904(arg2);
popFrame();
return result;
}
int64_t* incCurrMem__system_u6190(void* arg1, int64_t arg2)
{
char const* const var_30 = "incCurrMem";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x130;
*(arg1 + 0x2870) += arg2;
return popFrame();
}
uint64_t zeroMem__system_u1728(int64_t arg1, uint64_t arg2)
{
return nimZeroMem(arg1, arg2);
}
int64_t llAlloc__system_u6218(void* arg1, uint64_t arg2)
{
char const* const var_50 = "llAlloc";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x14d;
char var_9 = 0;
int64_t rax_1;
rax_1 = !*(arg1 + 0x2868);
char var_9_1 = rax_1;
if (!var_9_1)
{
int64_t rax_4;
rax_4 = arg2 > **(arg1 + 0x2868);
var_9_1 = rax_4;
}
if (var_9_1 == 1)
{
int64_t var_48_2 = 0x152;
int64_t rax_8 = *(arg1 + 0x2868);
int64_t var_48_3 = 0x153;
int64_t var_20_1 = 0;
*(arg1 + 0x2868) = allocPages__system_u6210(arg1, 0x1000);
int64_t var_48_4 = 0x156;
incCurrMem__system_u6190(arg1, 0x1000);
int64_t var_48_5 = 0x157;
**(arg1 + 0x2868) = 0xfe8;
int64_t var_48_6 = 0x158;
*(*(arg1 + 0x2868) + 8) = 0x18;
int64_t var_48_7 = 0x159;
*(*(arg1 + 0x2868) + 0x10) = rax_8;
}
int64_t var_48_8 = 0x15a;
int64_t result = *(*(arg1 + 0x2868) + 8) + *(arg1 + 0x2868);
int64_t var_48_9 = 0x15b;
**(arg1 + 0x2868) -= arg2;
int64_t var_48_10 = 0x15c;
*(*(arg1 + 0x2868) + 8) += arg2;
int64_t var_48_11 = 0x15d;
zeroMem__system_u1728(result, arg2);
popFrame();
return result;
}
int64_t* addHeapLink__system_u6256(void* arg1, int64_t arg2, int64_t arg3)
{
char const* const var_80 = "addHeapLink";
char const* const var_70 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_78 = 0;
int16_t var_68 = 0;
void* var_88;
nimFrame(&var_88);
int64_t var_78_1 = 0x17f;
int64_t* result_1 = arg1 + 0x30b0;
int64_t var_78_2 = 0x180;
while (true)
{
char var_19_1 = 0;
int64_t* rax_1;
rax_1 = result_1;
char var_19_2 = rax_1;
if (var_19_2 == 1)
{
int64_t rax_5;
rax_5 = *result_1 > 0x1d;
var_19_2 = rax_5;
}
if (var_19_2 != 1)
break;
result_1 = result_1[0x3d];
}
int64_t var_78_3 = 0x181;
int64_t* result;
if (result_1)
{
int64_t var_78_10 = 0x189;
int64_t rax_21 = *result_1;
int64_t var_78_11 = 0x18a;
result_1[rax_21 * 2 + 1] = arg2;
result_1[rax_21 * 2 + 2] = arg3;
int64_t var_78_12 = 0x18b;
*result_1 += 1;
int64_t var_78_13 = 0x18c;
result = result_1;
}
else
{
int64_t var_78_4 = 0x182;
int64_t var_28_1 = 0;
int64_t* result_2 = llAlloc__system_u6218(arg1, 0x1f0);
int64_t var_78_5 = 0x183;
result_2[0x3d] = *(arg1 + 0x3298);
int64_t var_78_6 = 0x184;
*(arg1 + 0x3298) = result_2;
int64_t var_78_7 = 0x185;
result_2[1] = arg2;
result_2[2] = arg3;
int64_t var_78_8 = 0x186;
*result_2 = 1;
int64_t var_78_9 = 0x187;
result = result_2;
}
popFrame();
return result;
}
int64_t pluspercent___system_u793(int64_t arg1, int64_t arg2)
{
void* const var_40 = &data_1400212f1;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x161;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38_2 = 0x165;
popFrame();
return arg2 + arg1;
}
void* const intSetGet__system_u6351(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "intSetGet";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x19b;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
void* result_1 = *(arg1 + (arg2 << 3));
int64_t var_38_2 = 0x19c;
void* const result;
while (true)
{
if (!result_1)
{
int64_t var_38_7 = 0x19f;
result = nullptr;
break;
}
int64_t var_38_3 = 0x19d;
if (arg2 == *(result_1 + 8))
{
int64_t var_38_4 = 0x19a;
int64_t var_38_5 = 0x19d;
result = result_1;
break;
}
int64_t var_38_6 = 0x19e;
result_1 = *result_1;
}
popFrame();
return result;
}
uint64_t contains__system_u6400(int64_t arg1, int64_t arg2)
{
char const* const var_50 = "contains";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x1aa;
void* rax_3 = intSetGet__system_u6351(arg1, arg2 >> 9);
int64_t var_48_2 = 0x1ab;
char var_9;
if (!rax_3)
{
int64_t var_48_5 = 0x1af;
var_9 = 0;
}
else
{
int64_t var_48_3 = 0x1ac;
uint64_t rax_5 = arg2 & 0x1ff;
int64_t var_48_4 = 0x1ad;
uint64_t rax_12;
rax_12 = *(rax_3 + (((rax_5 >> 6) + 2) << 3)) >> (rax_5 & 0x3f) & 1;
var_9 = rax_12;
}
popFrame();
return var_9;
}
int64_t pageIndex__system_u6636(int64_t arg1)
{
char const* const var_40 = "pageIndex";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1f3;
popFrame();
return arg1 >> 0xc;
}
int64_t minuspercent___system_u813(int64_t arg1, int64_t arg2)
{
void* const var_40 = &data_14002134f;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x16c;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38_2 = 0x170;
popFrame();
return arg1 - arg2;
}
int64_t* requestOsChunks__system_u6653(void* arg1, uint64_t arg2)
{
char const* const var_d0 = "requestOsChunks";
char const* const var_c0 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_c8 = 0;
int16_t var_b8 = 0;
void* var_d8;
nimFrame(&var_d8);
int64_t var_30 = 0;
int64_t var_38 = 0;
int64_t var_c8_1 = 0x207;
char const* const var_c0_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
if (!*(arg1 + 0x30a2))
{
int64_t var_c8_2 = 0x208;
int64_t rax_3 = *(arg1 + 0x2888);
int64_t var_c8_3 = 0x209;
if (rax_3 > 0xffff)
{
int64_t var_c8_5 = 0x20c;
int64_t var_48_1 = 0;
int64_t rax_7 = roundup__system_u5881(rax_3 >> 2, 0x1000);
int64_t rdx = *(arg1 + 0x30a8) * 2;
int64_t rax_10 = rax_7;
if (rdx <= rax_10)
rax_10 = rdx;
*(arg1 + 0x30a8) = rax_10;
int64_t var_c8_6 = 0x20d;
int64_t rax_12 = *(arg1 + 0x30a8);
if (rax_12 > 0x3f000000)
rax_12 = 0x3f000000;
*(arg1 + 0x30a8) = rax_12;
}
else
{
int64_t var_c8_4 = 0x20a;
*(arg1 + 0x30a8) = 0x4000;
}
}
int64_t var_c8_7 = 0x20f;
uint64_t var_18 = arg2;
int64_t var_c8_8 = 0x210;
int64_t* result;
if (var_18 <= *(arg1 + 0x30a8))
{
int64_t var_c8_10 = 0x213;
int64_t var_58_1 = 0;
result = tryAllocPages__system_u6214(arg1, *(arg1 + 0x30a8));
int64_t var_c8_11 = 0x214;
if (result)
{
int64_t var_c8_14 = 0x218;
var_18 = *(arg1 + 0x30a8);
}
else
{
int64_t var_c8_12 = 0x215;
int64_t var_60_1 = 0;
result = allocPages__system_u6210(arg1, var_18);
int64_t var_c8_13 = 0x216;
*(arg1 + 0x30a2) = 1;
}
}
else
{
int64_t var_c8_9 = 0x211;
int64_t var_50_1 = 0;
result = allocPages__system_u6210(arg1, var_18);
}
int64_t var_c8_15 = 0x21a;
incCurrMem__system_u6190(arg1, var_18);
int64_t var_c8_16 = 0x21b;
*(arg1 + 0x2880) += var_18;
int64_t var_c8_17 = 0x21c;
int64_t* var_68 = addHeapLink__system_u6256(arg1, result, var_18);
int64_t var_c8_18 = 0x226;
result[3] = 0;
int64_t var_c8_19 = 0x227;
result[4] = 0;
int64_t var_c8_20 = 0x228;
result[1] = var_18;
int64_t var_c8_21 = 0x22a;
uint64_t* rax_39 = pluspercent___system_u793(result, var_18);
int64_t var_c8_22 = 0x22c;
int64_t var_c8_23 = 0x22d;
int64_t var_80 = 0;
char var_81 = 0;
if (contains__system_u6400(arg1 + 0x28a0, pageIndex__system_u6636(rax_39)) == 1)
{
int64_t var_c8_24 = 0x22f;
*rax_39 = (*rax_39 & 1) | var_18;
}
int64_t var_c8_25 = 0x231;
int64_t var_20;
if (!*(arg1 + 0x2890))
var_20 = 0x1000;
else
var_20 = *(arg1 + 0x2890);
int64_t var_c8_26 = 0x232;
void* rax_58 = minuspercent___system_u813(result, var_20);
int64_t var_c8_27 = 0x234;
int64_t var_c8_28 = 0x235;
char var_21 = 0;
int64_t var_a0 = 0;
char var_21_1 = contains__system_u6400(arg1 + 0x28a0, pageIndex__system_u6636(rax_58));
if (var_21_1 == 1)
{
int64_t rax_68;
rax_68 = var_20 == *(rax_58 + 8);
var_21_1 = rax_68;
}
if (var_21_1 != 1)
{
int64_t var_c8_30 = 0x239;
*result = *result & 1;
}
else
{
int64_t var_c8_29 = 0x237;
*result = (*result & 1) | var_20;
}
int64_t var_c8_31 = 0x23b;
*(arg1 + 0x2890) = var_18;
popFrame();
return result;
}
int64_t pageIndex__system_u6643(int64_t arg1)
{
char const* const var_40 = "pageIndex";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1f6;
popFrame();
return arg1 >> 0xc;
}
uint64_t isAccessible__system_u6678(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "isAccessible";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x23f;
int64_t var_10 = 0;
char rax_4 = contains__system_u6400(arg1 + 0x28a0, pageIndex__system_u6643(arg2));
popFrame();
return rax_4;
}
int64_t* updatePrevSize__system_u6696(int64_t arg1, void* arg2, int64_t arg3)
{
char const* const var_50 = "updatePrevSize";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x261;
int64_t var_10 = 0;
int64_t* rax_2 = pluspercent___system_u793(arg2, *(arg2 + 8));
int64_t var_48_2 = 0x263;
char var_19 = 0;
if (isAccessible__system_u6678(arg1, rax_2) == 1)
{
int64_t var_48_3 = 0x264;
*rax_2 = (*rax_2 & 1) | arg3;
}
return popFrame();
}
void* intSetPut__system_u6383(void* arg1, int64_t arg2, int64_t arg3)
{
char const* const var_40 = "intSetPut";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1a2;
void* result = intSetGet__system_u6351(arg2, arg3);
int64_t var_38_2 = 0x1a3;
if (!result)
{
int64_t var_38_3 = 0x1a4;
int64_t var_18_1 = 0;
result = llAlloc__system_u6218(arg1, 0x50);
int64_t var_38_4 = 0x1a5;
*result = *(arg2 + (arg3 << 3));
int64_t var_38_5 = 0x1a6;
*(arg2 + (arg3 << 3)) = result;
int64_t var_38_6 = 0x1a7;
*(result + 8) = arg3;
}
popFrame();
return result;
}
int64_t* incl__system_u6441(void* arg1, int64_t arg2, int64_t arg3)
{
char const* const var_40 = "incl";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1b2;
void* rax_3 = intSetPut__system_u6383(arg1, arg2, arg3 >> 9);
int64_t var_38_2 = 0x1b3;
uint64_t rax_5 = arg3 & 0x1ff;
int64_t var_38_3 = 0x1b4;
*(rax_3 + (((rax_5 >> 6) + 2) << 3)) |= 1 << (rax_5 & 0x3f);
return popFrame();
}
int64_t* splitChunk2__system_u6701(void* arg1, void* arg2, int64_t arg3)
{
char const* const var_50 = "splitChunk2";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x267;
int64_t var_10 = 0;
int64_t* result = pluspercent___system_u793(arg2, arg3);
int64_t var_48_2 = 0x268;
result[1] = *(arg2 + 8) - arg3;
int64_t var_48_3 = 0x26c;
result[3] = 0;
int64_t var_48_4 = 0x26d;
result[4] = 0;
int64_t var_48_5 = 0x26f;
*result = arg3;
int64_t var_48_6 = 0x270;
result[2] = arg1;
int64_t var_48_7 = 0x274;
updatePrevSize__system_u6696(arg1, arg2, result[1]);
int64_t var_48_8 = 0x275;
*(arg2 + 8) = arg3;
int64_t var_48_9 = 0x276;
int64_t var_18 = 0;
int64_t var_20 = 0;
incl__system_u6441(arg1, arg1 + 0x28a0, pageIndex__system_u6636(result));
popFrame();
return result;
}
int64_t* mappingInsert__system_u6059(int64_t* arg1, int64_t arg2)
{
char const* const var_40 = "mappingInsert";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_18;
nimZeroMem(&var_18, 0x10);
int64_t var_38_1 = 0xf9;
var_18 = msbit__system_u6016(arg2);
int64_t var_38_2 = 0xfa;
int64_t rax_5 = (arg2 >> (var_18 - 5)) - 0x20;
int64_t var_38_3 = 0xfb;
var_18 -= 6;
popFrame();
*arg1 = var_18;
arg1[1] = rax_5;
return arg1;
}
int64_t* setBit__system_u6027(char arg1, int32_t* arg2)
{
char const* const var_30 = "setBit";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0xe2;
*arg2 |= 1 << (arg1 & 0x1f);
return popFrame();
}
int64_t* addChunkToMatrix__system_u6180(void* arg1, void* arg2)
{
char const* const var_50 = "addChunkToMatrix";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x126;
int64_t var_28;
mappingInsert__system_u6059(&var_28, *(arg2 + 8));
int64_t rax_1 = var_28;
int64_t var_48_2 = 0x127;
*(arg2 + 0x20) = 0;
int64_t var_48_3 = 0x128;
int64_t var_20;
*(arg2 + 0x18) = *(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8);
int64_t var_48_4 = 0x129;
if (*(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8))
{
int64_t var_48_5 = 0x12a;
*(*(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8) + 0x20) = arg2;
}
int64_t var_48_6 = 0x12b;
*(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8) = arg2;
int64_t var_48_7 = 0x12c;
setBit__system_u6027(var_20, arg1 + ((rax_1 + 0x400) << 2) + 4);
int64_t var_48_8 = 0x12d;
setBit__system_u6027(rax_1, arg1 + 0x1000);
return popFrame();
}
int64_t* splitChunk__system_u6725(void* arg1, void* arg2, int64_t arg3)
{
char const* const var_40 = "splitChunk";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x279;
int64_t var_38_2 = 0x27a;
addChunkToMatrix__system_u6180(arg1, splitChunk2__system_u6701(arg1, arg2, arg3));
return popFrame();
}
int64_t* clearBit__system_u6034(char arg1, int32_t* arg2)
{
char const* const var_30 = "clearBit";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0xe5;
*arg2 &= ~(1 << (arg1 & 0x1f));
return popFrame();
}
int64_t* removeChunkFromMatrix2__system_u6171(void* arg1, void* arg2, int64_t arg3, int64_t arg4)
{
char const* const var_30 = "removeChunkFromMatrix2";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x11d;
*(arg1 + ((arg4 + (arg3 << 5) + 0x20c) << 3) + 8) = *(arg2 + 0x18);
int64_t var_28_2 = 0x11e;
if (!*(arg1 + ((arg4 + (arg3 << 5) + 0x20c) << 3) + 8))
{
int64_t var_28_4 = 0x10c;
clearBit__system_u6034(arg4, arg1 + ((arg3 + 0x400) << 2) + 4);
int64_t var_28_5 = 0x121;
int64_t var_28_6 = 0x10d;
if (!*(arg1 + ((arg3 + 0x400) << 2) + 4))
{
int64_t var_28_7 = 0x10f;
clearBit__system_u6034(arg3, arg1 + 0x1000);
}
}
else
{
int64_t var_28_3 = 0x11f;
*(*(arg1 + ((arg4 + (arg3 << 5) + 0x20c) << 3) + 8) + 0x20) = 0;
}
int64_t var_28_8 = 0x122;
*(arg2 + 0x20) = 0;
int64_t var_28_9 = 0x123;
*(arg2 + 0x18) = 0;
return popFrame();
}
int64_t* getBigChunk__system_u6754(void* arg1, uint64_t arg2)
{
char const* const var_60 = "getBigChunk";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_58_1 = 0x2a4;
uint64_t var_28 = arg2;
int64_t var_58_2 = 0x2a5;
int64_t var_30 = 0;
int64_t var_58_3 = 0x2a6;
int64_t var_38 = 0;
int64_t var_58_4 = 0x2a7;
mappingSearch__system_u6041(&var_28, &var_30, &var_38);
int64_t var_58_5 = 0x2a9;
int64_t* result = findSuitableBlock__system_u6074(arg1, &var_30, &var_38);
int64_t var_58_6 = 0x2b1;
if (result)
{
int64_t var_58_14 = 0x2bc;
removeChunkFromMatrix2__system_u6171(arg1, result, var_30, var_38);
int64_t var_58_15 = 0x2bd;
if (var_28 + 0xfff < result[1])
{
int64_t var_58_16 = 0x2be;
splitChunk__system_u6725(arg1, result, var_28);
}
}
else
{
int64_t var_58_7 = 0x2b2;
if (var_28 > 0x7ffff)
{
int64_t var_58_10 = 0x2b6;
result = requestOsChunks__system_u6653(arg1, var_28);
int64_t var_58_11 = 0x2b8;
if (result[1] > var_28)
{
int64_t var_58_12 = 0x2b9;
splitChunk__system_u6725(arg1, result, var_28);
}
}
else
{
int64_t var_58_8 = 0x2b3;
result = requestOsChunks__system_u6653(arg1, 0x80000);
int64_t var_58_9 = 0x2b4;
splitChunk__system_u6725(arg1, result, var_28);
}
int64_t var_58_13 = 0x2ba;
result[2] = arg1;
}
int64_t var_58_17 = 0x2c0;
*result = 1;
int64_t var_58_18 = 0x2c4;
int64_t var_10 = 0;
int64_t var_18 = 0;
incl__system_u6441(arg1, arg1 + 0x28a0, pageIndex__system_u6636(result));
int64_t var_58_19 = 0x2c5;
*(arg1 + 0x2880) -= var_28;
popFrame();
return result;
}
int64_t* getSmallChunk__system_u6782(void* arg1)
{
char const* const var_40 = "getSmallChunk";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x2e6;
int64_t* result = getBigChunk__system_u6754(arg1, 0x1000);
int64_t var_38_2 = 0x2e9;
popFrame();
return result;
}
int64_t pageAddr__system_u6650(int64_t arg1)
{
char const* const var_40 = "pageAddr";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1f9;
popFrame();
return arg1 & 0xfffffffffffff000;
}
int64_t* compensateCounters__system_u6876(void* arg1, void* arg2, int64_t arg3)
{
char const* const var_50 = "compensateCounters";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x343;
int64_t* i = *(arg2 + 0x28);
int64_t var_48_2 = 0x344;
int64_t var_18 = 0;
int64_t var_48_3 = 0x345;
for (; i; i = *i)
{
int64_t var_48_4 = 0x346;
var_18 += arg3;
int64_t var_48_5 = 0x347;
int64_t var_20_1 = 0;
int64_t var_48_6 = 0x348;
if (arg2 != pageAddr__system_u6650(i))
{
int64_t var_48_7 = 0x34b;
*(arg2 + 0x38) += 1;
}
int64_t var_48_8 = 0x34c;
}
int64_t var_48_9 = 0x34e;
*(arg2 + 0x30) += var_18;
int64_t var_48_10 = 0x34f;
*(arg1 + 0x2888) -= var_18;
return popFrame();
}
int64_t* listAdd__system_u6975(int64_t* arg1, void* arg2)
{
char const* const var_30 = "listAdd";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x24c;
*(arg2 + 0x18) = *arg1;
int64_t var_28_2 = 0x24d;
if (*arg1)
{
int64_t var_28_3 = 0x24f;
*(*arg1 + 0x20) = arg2;
}
int64_t var_28_4 = 0x250;
*arg1 = arg2;
return popFrame();
}
int64_t* listRemove__system_u7052(int64_t* arg1, void* arg2)
{
char const* const var_30 = "listRemove";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x254;
if (arg2 != *arg1)
{
int64_t var_28_4 = 0x25a;
*(*(arg2 + 0x20) + 0x18) = *(arg2 + 0x18);
int64_t var_28_5 = 0x25b;
if (*(arg2 + 0x18))
*(*(arg2 + 0x18) + 0x20) = *(arg2 + 0x20);
}
else
{
int64_t var_28_2 = 0x255;
*arg1 = *(arg2 + 0x18);
int64_t var_28_3 = 0x257;
if (*arg1)
*(*arg1 + 0x20) = 0;
}
int64_t var_28_6 = 0x25c;
*(arg2 + 0x18) = 0;
int64_t var_28_7 = 0x25d;
*(arg2 + 0x20) = 0;
return popFrame();
}
int64_t* excl__system_u6463(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "excl";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1b7;
void* rax_3 = intSetGet__system_u6351(arg1, arg2 >> 9);
int64_t var_38_2 = 0x1b8;
if (rax_3)
{
int64_t var_38_3 = 0x1b9;
uint64_t rax_5 = arg2 & 0x1ff;
int64_t var_38_4 = 0x1ba;
int64_t var_38_5 = 0x1bb;
*(rax_3 + (((rax_5 >> 6) + 2) << 3)) &= ~(1 << (rax_5 & 0x3f));
}
return popFrame();
}
int64_t* decCurrMem__system_u6198(void* arg1, int64_t arg2)
{
char const* const var_30 = "decCurrMem";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x133;
int64_t rdx = *(arg1 + 0x2878);
int64_t rax_2 = *(arg1 + 0x2870);
if (rdx >= rax_2)
rax_2 = rdx;
*(arg1 + 0x2878) = rax_2;
int64_t var_28_2 = 0x134;
*(arg1 + 0x2870) -= arg2;
return popFrame();
}
int64_t* osDeallocPages__system_u5907(int64_t arg1)
{
int64_t rdx;
int64_t arg_10 = rdx;
char const* const var_40 = "osDeallocPages";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xbe;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\osalloc.nim";
int32_t var_c = 0;
BOOL rax_1;
int64_t rdx_1;
rax_1 = VirtualFree(arg1, 0, MEM_RELEASE);
if (rax_1)
return popFrame();
int64_t var_38_2 = 0xbf;
int32_t var_10 = 0;
int32_t var_10_1 = printf("virtualFree failing!", rdx_1);
int64_t var_38_3 = 0xc0;
exit(1);
/* no return */
}
int64_t* freeHugeChunk__system_u6778(void* arg1, void* arg2)
{
char const* const var_40 = "freeHugeChunk";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x2df;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t rax_1 = *(arg2 + 8);
int64_t var_38_2 = 0x2e1;
int64_t var_18 = 0;
excl__system_u6463(arg1 + 0x28a0, pageIndex__system_u6636(arg2));
int64_t var_38_3 = 0x2e2;
decCurrMem__system_u6198(arg1, rax_1);
int64_t var_38_4 = 0x2e3;
osDeallocPages__system_u5907(arg2);
return popFrame();
}
uint64_t chunkUnused__system_u6539(int64_t* arg1)
{
char const* const var_40 = "chunkUnused";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1d3;
uint64_t rax_2;
rax_2 = !(*arg1 & 1);
char var_9 = rax_2;
popFrame();
return var_9;
}
uint64_t isSmallChunk__system_u6533(void* arg1)
{
char const* const var_40 = "isSmallChunk";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x1d0;
int64_t rax_1;
rax_1 = *(arg1 + 8) <= 0xfc0;
char var_9 = rax_1;
popFrame();
return var_9;
}
int64_t* removeChunkFromMatrix__system_u6129(void* arg1, void* arg2)
{
char const* const var_50 = "removeChunkFromMatrix";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x112;
int64_t var_28;
mappingInsert__system_u6059(&var_28, *(arg2 + 8));
int64_t rax_1 = var_28;
int64_t var_48_2 = 0x113;
if (*(arg2 + 0x18))
*(*(arg2 + 0x18) + 0x20) = *(arg2 + 0x20);
int64_t var_48_3 = 0x114;
if (*(arg2 + 0x20))
*(*(arg2 + 0x20) + 0x18) = *(arg2 + 0x18);
int64_t var_48_4 = 0x115;
int64_t var_20;
if (arg2 == *(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8))
{
int64_t var_48_5 = 0x116;
*(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8) = *(arg2 + 0x18);
int64_t var_48_6 = 0x117;
if (!*(arg1 + ((var_20 + (rax_1 << 5) + 0x20c) << 3) + 8))
{
int64_t var_48_7 = 0x10c;
clearBit__system_u6034(var_20, arg1 + ((rax_1 + 0x400) << 2) + 4);
int64_t var_48_8 = 0x118;
int64_t var_48_9 = 0x10d;
if (!*(arg1 + ((rax_1 + 0x400) << 2) + 4))
{
int64_t var_48_10 = 0x10f;
clearBit__system_u6034(rax_1, arg1 + 0x1000);
}
}
}
int64_t var_48_11 = 0x119;
*(arg2 + 0x20) = 0;
int64_t var_48_12 = 0x11a;
*(arg2 + 0x18) = 0;
return popFrame();
}
int64_t* freeBigChunk__system_u6730(void* arg1, int64_t* arg2)
{
char const* const var_a0 = "freeBigChunk";
char const* const var_90 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_98 = 0;
int16_t var_88 = 0;
void* var_a8;
nimFrame(&var_a8);
int64_t var_98_1 = 0x27d;
int64_t* var_70 = arg2;
int64_t var_98_2 = 0x27f;
*(arg1 + 0x2880) += var_70[1];
int64_t var_98_3 = 0x280;
*var_70 &= 0xfffffffffffffffe;
int64_t var_98_4 = 0x282;
int64_t rax_8 = *var_70;
int64_t var_98_5 = 0x283;
if (rax_8)
{
int64_t var_98_6 = 0x284;
int64_t var_20_1 = 0;
int64_t* rax_11 = minuspercent___system_u813(var_70, rax_8);
int64_t var_98_7 = 0x286;
char var_9_1 = 0;
char var_9_2 = isAccessible__system_u6678(arg1, rax_11);
if (var_9_2 == 1)
var_9_2 = chunkUnused__system_u6539(rax_11);
if (var_9_2 == 1)
{
int64_t var_98_8 = 0x288;
char var_a_1 = 0;
char var_29_1 = 0;
uint32_t rax_23;
rax_23 = isSmallChunk__system_u6533(rax_11);
char var_a_3 = (rax_23 ^ 1) & 1;
if (var_a_3 == 1)
{
int64_t rax_29;
rax_29 = rax_11[1] <= 0x3effffff;
var_a_3 = rax_29;
}
if (var_a_3 == 1)
{
int64_t var_98_9 = 0x289;
removeChunkFromMatrix__system_u6129(arg1, rax_11);
int64_t var_98_10 = 0x28a;
rax_11[1] += var_70[1];
int64_t var_98_11 = 0x28b;
int64_t var_38_1 = 0;
excl__system_u6463(arg1 + 0x28a0, pageIndex__system_u6636(var_70));
int64_t var_98_12 = 0x28c;
var_70 = rax_11;
int64_t var_98_13 = 0x28d;
if (var_70[1] > 0x3f000000)
{
int64_t var_98_14 = 0x28e;
int64_t* rax_45 = splitChunk2__system_u6701(arg1, var_70, 0x3f000000);
int64_t var_98_15 = 0x292;
addChunkToMatrix__system_u6180(arg1, var_70);
int64_t var_98_16 = 0x293;
var_70 = rax_45;
}
}
}
}
int64_t var_98_17 = 0x295;
int64_t var_48 = 0;
int64_t* rax_50 = pluspercent___system_u793(var_70, var_70[1]);
int64_t var_98_18 = 0x297;
char var_b = 0;
char var_b_1 = isAccessible__system_u6678(arg1, rax_50);
if (var_b_1 == 1)
var_b_1 = chunkUnused__system_u6539(rax_50);
if (var_b_1 == 1)
{
int64_t var_98_19 = 0x299;
char var_c_1 = 0;
char var_51_1 = 0;
uint32_t rax_62;
rax_62 = isSmallChunk__system_u6533(rax_50);
char var_c_3 = (rax_62 ^ 1) & 1;
if (var_c_3 == 1)
{
int64_t rax_68;
rax_68 = var_70[1] <= 0x3effffff;
var_c_3 = rax_68;
}
if (var_c_3 == 1)
{
int64_t var_98_20 = 0x29a;
removeChunkFromMatrix__system_u6129(arg1, rax_50);
int64_t var_98_21 = 0x29b;
var_70[1] += rax_50[1];
int64_t var_98_22 = 0x29c;
int64_t var_60_1 = 0;
excl__system_u6463(arg1 + 0x28a0, pageIndex__system_u6636(rax_50));
int64_t var_98_23 = 0x29d;
if (var_70[1] > 0x3f000000)
{
int64_t var_98_24 = 0x29e;
int64_t var_98_25 = 0x29f;
addChunkToMatrix__system_u6180(arg1,
splitChunk2__system_u6701(arg1, var_70, 0x3f000000));
}
}
}
int64_t var_98_26 = 0x2a0;
addChunkToMatrix__system_u6180(arg1, var_70);
return popFrame();
}
int64_t* deallocBigChunk__system_u6800(void* arg1, int64_t* arg2)
{
char const* const var_30 = "deallocBigChunk";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x31f;
*(arg1 + 0x2888) -= arg2[1];
int64_t var_28_2 = 0x325;
if (arg2[1] <= 0x3f000000)
{
int64_t var_28_3 = 0x326;
freeBigChunk__system_u6730(arg1, arg2);
}
else
freeHugeChunk__system_u6778(arg1, arg2);
return popFrame();
}
int64_t* addToSharedFreeListBigChunks__system_u6811(void* arg1, void* arg2)
{
char const* const var_40 = "addToSharedFreeListBigChunks";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x338;
int64_t rax_8;
do
{
int64_t var_38_2 = 0x32f;
int64_t var_10_1 = 0;
*(arg2 + 0x18) = *(arg1 + 0x2898);
int64_t var_38_3 = 0x330;
char var_11_1 = 0;
rax_8 = *(arg2 + 0x18);
bool z_1;
if (rax_8 == *(arg1 + 0x2898))
{
*(arg1 + 0x2898) = arg2;
z_1 = true;
}
else
{
rax_8 = *(arg1 + 0x2898);
z_1 = false;
}
int64_t rcx_2 = rax_8;
rax_8 = z_1;
if (!rax_8)
*(arg2 + 0x18) = rcx_2;
} while (rax_8 != 1);
int64_t var_38_4 = 0x331;
return popFrame();
}
int64_t* freeDeferredObjects__system_u6911(void* arg1, int64_t* arg2)
{
char const* const var_50 = "freeDeferredObjects";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x352;
int64_t* i = arg2;
int64_t var_48_2 = 0x353;
int64_t var_18 = 0x14;
int64_t var_48_3 = 0x354;
do
{
int64_t var_48_4 = 0x355;
int64_t* i_1 = i[3];
int64_t var_48_5 = 0x356;
i[3] = 0;
int64_t var_48_6 = 0x357;
deallocBigChunk__system_u6800(arg1, i);
int64_t var_48_7 = 0x358;
if (!var_18)
{
int64_t var_48_8 = 0x359;
if (i_1)
{
int64_t var_48_9 = 0x35a;
addToSharedFreeListBigChunks__system_u6811(arg1, i_1);
}
int64_t var_48_10 = 0x35c;
break;
}
int64_t var_48_11 = 0x35d;
i = i_1;
int64_t var_48_12 = 0x35e;
var_18 -= 1;
int64_t var_48_13 = 0x35f;
} while (i);
return popFrame();
}
int64_t* getHugeChunk__system_u6774(void* arg1, uint64_t arg2)
{
char const* const var_50 = "getHugeChunk";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x2ca;
int64_t var_10 = 0;
int64_t* result = allocPages__system_u6210(arg1, arg2);
int64_t var_48_2 = 0x2d0;
incCurrMem__system_u6190(arg1, arg2);
int64_t var_48_3 = 0x2d4;
result[3] = 0;
int64_t var_48_4 = 0x2d5;
result[4] = 0;
int64_t var_48_5 = 0x2d6;
result[1] = arg2;
int64_t var_48_6 = 0x2d8;
*result = 1;
int64_t var_48_7 = 0x2d9;
result[2] = arg1;
int64_t var_48_8 = 0x2da;
int64_t var_18 = 0;
int64_t var_20 = 0;
incl__system_u6441(arg1, arg1 + 0x28a0, pageIndex__system_u6636(result));
popFrame();
return result;
}
void* rawAlloc__system_u6943(void* arg1, int64_t arg2)
{
char const* const var_80 = "rawAlloc";
char const* const var_70 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_78 = 0;
int16_t var_68 = 0;
void* var_88;
nimFrame(&var_88);
int64_t var_10 = 0;
int64_t var_78_1 = 0x366;
int64_t rax_1 = roundup__system_u5881(arg2, 0x10);
int64_t var_78_2 = 0x36b;
void* result;
if (rax_1 > 0xfc0)
{
int64_t var_48_1 = 0;
int64_t var_50_1 = 0;
int64_t var_78_36 = 0x3c3;
int64_t* temp0_3 = *(arg1 + 0x2898);
*(arg1 + 0x2898) = nullptr;
int64_t var_78_37 = 0x3c7;
if (temp0_3)
{
int64_t var_78_38 = 0x3c8;
freeDeferredObjects__system_u6911(arg1, temp0_3);
}
int64_t var_78_39 = 0x3ca;
int64_t var_78_40 = 0x3cc;
int64_t* var_18_1;
if (arg2 + 0x30 <= 0x3f000000)
{
int64_t var_78_41 = 0x3cd;
var_18_1 = getBigChunk__system_u6754(arg1, arg2 + 0x30);
}
else
var_18_1 = getHugeChunk__system_u6774(arg1, arg2 + 0x30);
int64_t var_78_42 = 0x3d0;
result = &var_18_1[6];
int64_t var_78_43 = 0x3d6;
*(arg1 + 0x2888) += var_18_1[1];
}
else
{
int64_t var_78_3 = 0x37b;
int64_t rax_2 = rax_1;
if (rax_2 < 0)
rax_2 += 0xf;
int64_t rax_3 = rax_2 >> 4;
int64_t var_78_4 = 0x37c;
void* rax_5 = *(arg1 + (rax_3 << 3));
int64_t var_78_5 = 0x37d;
if (rax_5)
{
int64_t var_78_21 = 0x39a;
if (*(rax_5 + 0x28))
{
int64_t var_78_24 = 0x3a1;
result = *(rax_5 + 0x28);
int64_t var_78_25 = 0x3a4;
*(rax_5 + 0x28) = **(rax_5 + 0x28);
int64_t var_78_26 = 0x3a5;
int64_t var_40_1 = 0;
if (pageAddr__system_u6650(result) != rax_5)
{
int64_t var_78_27 = 0x3a7;
*(rax_5 + 0x38) -= 1;
}
}
else
{
int64_t var_78_22 = 0x39d;
int64_t var_38_1 = 0;
result = pluspercent___system_u793(rax_5 + 0x40, *(rax_5 + 0x34));
int64_t var_78_23 = 0x39e;
*(rax_5 + 0x34) += rax_1;
}
int64_t var_78_28 = 0x3ae;
*(rax_5 + 0x30) -= rax_1;
int64_t var_78_29 = 0x3b4;
int64_t var_78_30 = 0x36f;
if (!*(rax_5 + 0x28))
{
int64_t var_78_31 = 0x372;
void* rdx_19 = ((rax_3 + 0x100) << 3) + arg1;
int64_t temp0_2 = *rdx_19;
*rdx_19 = 0;
*(rax_5 + 0x28) = temp0_2;
int64_t var_78_32 = 0x378;
compensateCounters__system_u6876(arg1, rax_5, rax_1);
}
int64_t var_78_33 = 0x3b6;
if (rax_1 > *(rax_5 + 0x30))
{
int64_t var_78_34 = 0x3b9;
listRemove__system_u7052(arg1 + (rax_3 << 3), rax_5);
}
}
else
{
int64_t var_78_6 = 0x37f;
int64_t* rax_7 = getSmallChunk__system_u6782(arg1);
int64_t var_78_7 = 0x381;
rax_7[5] = 0;
int64_t var_78_8 = 0x382;
rax_7[7] = 0;
int64_t var_78_9 = 0x384;
rax_7[1] = rax_1;
int64_t var_78_10 = 0x385;
*(rax_7 + 0x34) = rax_1;
int64_t var_78_11 = 0x386;
rax_7[6] = 0xfc0 - rax_1;
int64_t var_78_12 = 0x388;
rax_7[3] = 0;
int64_t var_78_13 = 0x389;
rax_7[4] = 0;
int64_t var_78_14 = 0x38c;
int64_t var_78_15 = 0x36f;
if (!rax_7[5])
{
int64_t var_78_16 = 0x372;
int64_t* rdx_6 = ((rax_3 + 0x100) << 3) + arg1;
int64_t temp0_1 = *rdx_6;
*rdx_6 = 0;
rax_7[5] = temp0_1;
int64_t var_78_17 = 0x378;
compensateCounters__system_u6876(arg1, rax_7, rax_1);
}
int64_t var_78_18 = 0x38d;
if (rax_1 <= rax_7[6])
{
int64_t var_78_19 = 0x390;
listAdd__system_u6975(arg1 + (rax_3 << 3), rax_7);
}
int64_t var_78_20 = 0x391;
result = &rax_7[8];
}
int64_t var_78_35 = 0x3be;
*(arg1 + 0x2888) += rax_1;
}
popFrame();
return result;
}
void* alloc__system_u7201(void* arg1, int64_t arg2)
{
char const* const var_40 = "alloc";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x47c;
void* result = rawAlloc__system_u6943(arg1, arg2);
popFrame();
return result;
}
void* allocImpl__system_u1747(int64_t arg1)
{
return alloc__system_u7201(__emutls_get_address(&_.data), arg1);
}
void* allocSharedImpl(int64_t arg1)
{
return allocImpl__system_u1747(arg1);
}
int64_t* raiseRangeErrorNoArgs()
{
int64_t var_18 = 0x12;
void* const var_10 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_13;
return sysFatal__system_u4979(&var_18);
}
int64_t* init__system_u3330(int64_t* arg1, int64_t arg2)
{
char const* const var_40 = "init";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x22;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
*arg1 = 0;
int64_t var_38_2 = 0x23;
arg1[1] = arg2;
int64_t var_38_3 = 0x25;
char rdx_1 = 0;
int64_t rax_4 = arg1[1] * 0x10;
bool o = /* bool o = unimplemented {imul rax, rax, 0x10} */;
if (o)
rdx_1 = 1;
if (rdx_1 & 1)
raiseOverflow();
else if (rax_4 >= 0)
{
int64_t var_10_1 = 0;
arg1[2] = allocSharedImpl(rax_4);
}
else
raiseRangeErrorNoArgs();
return popFrame();
}
int64_t ptrSize__system_u7189(int64_t arg1)
{
char const* const var_50 = "ptrSize";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x46e;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
void* rax_1 = pageAddr__system_u6650(arg1);
int64_t var_48_2 = 0x470;
int64_t result = *(rax_1 + 8);
int64_t var_48_3 = 0x471;
char var_19 = 0;
if (!isSmallChunk__system_u6533(rax_1))
{
int64_t var_48_4 = 0x472;
result -= 0x30;
}
popFrame();
return result;
}
int64_t* addToSharedFreeList__system_u6835(void* arg1, int64_t* arg2, int64_t arg3)
{
char const* const var_40 = "addToSharedFreeList";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x33b;
int64_t* rax_12;
do
{
int64_t var_38_2 = 0x32f;
int64_t var_10_1 = 0;
*arg2 = *(((arg3 + 0x100) << 3) + *(arg1 + 0x10));
int64_t var_38_3 = 0x330;
char var_11_1 = 0;
int64_t** r8_1 = *(arg1 + 0x10) + ((arg3 + 0x100) << 3);
rax_12 = *arg2;
bool z_1;
if (rax_12 == *r8_1)
{
*r8_1 = arg2;
z_1 = true;
}
else
{
rax_12 = *r8_1;
z_1 = false;
}
int64_t* rcx_2 = rax_12;
rax_12 = z_1;
if (!rax_12)
*arg2 = rcx_2;
} while (rax_12 != 1);
int64_t var_38_4 = 0x331;
return popFrame();
}
int64_t* rawDealloc__system_u7119(void* arg1, int64_t* arg2)
{
char const* const var_70 = "rawDealloc";
char const* const var_60 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
int64_t var_68_1 = 0x3e5;
int64_t* rax_1 = pageAddr__system_u6650(arg2);
int64_t var_68_2 = 0x3e7;
char var_19 = 0;
if (isSmallChunk__system_u6533(rax_1) != 1)
{
int64_t var_68_25 = 0x424;
if (arg1 != rax_1[2])
{
int64_t var_68_27 = 0x427;
addToSharedFreeListBigChunks__system_u6811(rax_1[2], rax_1);
}
else
{
int64_t var_68_26 = 0x425;
deallocBigChunk__system_u6800(arg1, rax_1);
}
}
else
{
int64_t var_68_3 = 0x3e9;
int64_t var_68_4 = 0x3ea;
int64_t rax_8 = rax_1[1];
int64_t var_68_5 = 0x3ed;
int64_t var_68_6 = 0x3ee;
if (arg1 != rax_1[2])
{
int64_t var_68_24 = 0x41c;
int64_t rax_69 = rax_8;
if (rax_69 < 0)
rax_69 += 0xf;
addToSharedFreeList__system_u6835(rax_1, arg2, rax_69 >> 4);
}
else
{
int64_t var_68_7 = 0x3f0;
*(arg1 + 0x2888) -= rax_8;
int64_t var_68_8 = 0x3fd;
int64_t rax_15 = rax_8;
if (rax_15 < 0)
rax_15 += 0xf;
void* var_40_1 = *(arg1 + (rax_15 >> 4 << 3));
int64_t var_68_9 = 0x3fe;
char var_9_1 = 0;
void* rax_18;
rax_18 = var_40_1;
char var_9_2 = rax_18;
if (var_9_2 == 1)
{
int64_t* rax_21;
rax_21 = rax_1 != var_40_1;
var_9_2 = rax_21;
}
if (var_9_2 != 1)
{
int64_t var_68_14 = 0x409;
*arg2 = rax_1[5];
int64_t var_68_15 = 0x40a;
rax_1[5] = arg2;
int64_t var_68_16 = 0x40b;
if (rax_8 <= rax_1[6])
{
int64_t var_68_19 = 0x410;
rax_1[6] += rax_8;
int64_t var_68_20 = 0x414;
char var_a_1 = 0;
int32_t rax_56;
rax_56 = rax_1[6] == 0xfc0;
char var_a_2 = rax_56;
if (var_a_2 == 1)
{
int64_t rax_60;
rax_60 = !rax_1[7];
var_a_2 = rax_60;
}
if (var_a_2 == 1)
{
int64_t var_68_21 = 0x415;
int64_t rax_63 = rax_8;
if (rax_63 < 0)
rax_63 += 0xf;
listRemove__system_u7052(arg1 + (rax_63 >> 4 << 3), rax_1);
int64_t var_68_22 = 0x416;
rax_1[1] = 0x1000;
int64_t var_68_23 = 0x417;
freeBigChunk__system_u6730(arg1, rax_1);
}
}
else
{
int64_t var_68_17 = 0x40d;
int64_t rax_41 = rax_8;
if (rax_41 < 0)
rax_41 += 0xf;
listAdd__system_u6975(arg1 + (rax_41 >> 4 << 3), rax_1);
int64_t var_68_18 = 0x40e;
rax_1[6] += rax_8;
}
}
else
{
int64_t var_68_10 = 0x404;
*arg2 = *(var_40_1 + 0x28);
int64_t var_68_11 = 0x405;
*(var_40_1 + 0x28) = arg2;
int64_t var_68_12 = 0x406;
*(var_40_1 + 0x30) += rax_8;
int64_t var_68_13 = 0x407;
*(var_40_1 + 0x38) += 1;
}
}
}
return popFrame();
}
int64_t* dealloc__system_u7209(void* arg1, int64_t* arg2)
{
char const* const var_30 = "dealloc";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x48d;
rawDealloc__system_u7119(arg1, arg2);
return popFrame();
}
void* realloc__system_u7212(void* arg1, int64_t* arg2, uint64_t arg3)
{
char const* const var_40 = "realloc";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\alloc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x490;
void* result = nullptr;
int64_t var_38_2 = 0x491;
if (arg3 <= 0)
{
int64_t var_38_7 = 0x496;
if (arg2)
{
int64_t var_38_8 = 0x497;
dealloc__system_u7209(arg1, arg2);
}
}
else
{
int64_t var_38_3 = 0x492;
result = alloc__system_u7201(arg1, arg3);
int64_t var_38_4 = 0x493;
if (arg2)
{
int64_t var_38_5 = 0x494;
int64_t var_18_1 = 0;
uint64_t rax_4 = ptrSize__system_u7189(arg2);
uint64_t rax_5 = arg3;
if (rax_4 <= rax_5)
rax_5 = rax_4;
copyMem__system_u1731(result, arg2, rax_5);
int64_t var_38_6 = 0x495;
dealloc__system_u7209(arg1, arg2);
}
}
popFrame();
return result;
}
void* reallocImpl__system_u1753(int64_t* arg1, uint64_t arg2)
{
return realloc__system_u7212(__emutls_get_address(&_.data), arg1, arg2);
}
void* reallocSharedImpl__system_u1766(int64_t* arg1, uint64_t arg2)
{
return reallocImpl__system_u1753(arg1, arg2);
}
int64_t* resize__system_u3246(void* arg1)
{
char const* const var_50 = "resize";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x14;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t rax_1 = *(arg1 + 8);
int64_t rax_3 = (rax_1 + (rax_1 >> 0x3f)) >> 1;
int64_t rax_5 = *(arg1 + 8);
char rdx_2 = 0;
if (rax_5 + rax_3)
rdx_2 = 1;
if (!(rdx_2 & 1))
{
*(arg1 + 8) = rax_5 + rax_3;
int64_t var_48_2 = 0x15;
char rdx_4 = 0;
uint64_t rax_12 = *(arg1 + 8) * 0x10;
bool o_1 = /* bool o_1 = unimplemented {imul rax, rax, 0x10} */;
if (o_1)
rdx_4 = 1;
if (!(rdx_4 & 1))
{
int64_t var_48_3 = 0x17;
if (rax_12 >= 0)
{
int64_t var_18_1 = 0;
*(arg1 + 0x10) = reallocSharedImpl__system_u1766(*(arg1 + 0x10), rax_12);
}
else
raiseRangeErrorI(rax_12, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseOverflow();
return popFrame();
}
int64_t* add__system_u3238(int64_t* arg1, int64_t arg2, int64_t arg3)
{
void* const var_50 = &data_140021590;
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x1c;
if (arg1[1] <= *arg1)
{
int64_t var_48_2 = 0x1d;
resize__system_u3246(arg1);
}
int64_t var_48_3 = 0x1e;
*((*arg1 << 4) + arg1[2]) = arg2;
*((*arg1 << 4) + arg1[2] + 8) = arg3;
int64_t var_48_4 = 0x1f;
int64_t rax_17 = *arg1;
char rdx_5 = 0;
if (rax_17 + 1)
rdx_5 = 1;
if (!(rdx_5 & 1))
*arg1 = rax_17 + 1;
else
raiseOverflow();
return popFrame();
}
int64_t* init__system_u3382(int64_t* arg1, int64_t arg2)
{
char const* const var_40 = "init";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x22;
*arg1 = 0;
int64_t var_38_2 = 0x23;
arg1[1] = arg2;
int64_t var_38_3 = 0x25;
char rdx_1 = 0;
int64_t rax_4 = arg1[1] * 0x10;
bool o = /* bool o = unimplemented {imul rax, rax, 0x10} */;
if (o)
rdx_1 = 1;
if (rdx_1 & 1)
raiseOverflow();
else if (rax_4 >= 0)
{
int64_t var_10_1 = 0;
arg1[2] = allocSharedImpl(rax_4);
}
else
raiseRangeErrorNoArgs();
return popFrame();
}
int64_t* trace__system_u2913(int64_t arg1, void* arg2, int64_t arg3)
{
char const* const var_50 = "trace";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* var_10 = nimErrorFlag();
int64_t var_48_1 = 0x4e;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
if (*(arg2 + 0x20))
{
int64_t var_48_2 = 0x4f;
int64_t var_48_3 = 0x3d;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\seqs_v2.nim";
int64_t var_18_1 = 0;
int64_t var_48_4 = 0x50;
char const* const var_40_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
(*(arg2 + 0x20))(pluspercent___system_u793(arg1, 0x10), arg3);
}
return popFrame();
}
int64_t* pop__system_u3128(int64_t* arg1, int64_t* arg2)
{
void* const var_50 = &data_1400215d6;
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x34;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t rax_1 = *arg2;
char rdx = 0;
if (rax_1 - 1)
rdx = 1;
int64_t var_18;
int64_t var_10;
if (!(rdx & 1))
{
int64_t* rax_8 = ((rax_1 - 1) << 4) + arg2[2];
var_18 = *rax_8;
var_10 = rax_8[1];
int64_t var_48_2 = 0x35;
int64_t rax_11 = *arg2;
char rdx_3 = 0;
if (rax_11 - 1)
rdx_3 = 1;
if (!(rdx_3 & 1))
*arg2 = rax_11 - 1;
else
raiseOverflow();
}
else
raiseOverflow();
popFrame();
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
int64_t* markGray__system_u3149(int64_t* arg1, void* arg2, int64_t* arg3)
{
char const* const var_60 = "markGray";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_58_1 = 0xbc;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
if ((*arg1 & 3) != 1)
{
int64_t var_58_2 = 0x26;
*arg1 = (*arg1 & 0xfffffffffffffffc) | 1;
int64_t var_58_3 = 0xbe;
int64_t rax_10 = arg3[7];
char rdx_1 = 0;
if (rax_10 + 1)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
arg3[7] = rax_10 + 1;
int64_t var_58_4 = 0xc0;
int64_t rax_17 = *arg1 >> 4;
char rdx_3 = 0;
if (rax_17 + 1)
rdx_3 = 1;
if (!(rdx_3 & 1))
{
int64_t rdx_4 = arg3[9];
char rcx_3 = 0;
if (rax_17 + 1 + rdx_4)
rcx_3 = 1;
if (!(rcx_3 & 1))
{
arg3[9] = rax_17 + 1 + rdx_4;
int64_t var_58_5 = 0xc2;
trace__system_u2913(arg1, arg2, arg3);
if (!*rax)
{
int64_t var_58_6 = 0xc3;
while (*arg3 > 0)
{
int64_t var_58_7 = 0xc4;
int64_t* var_98;
pop__system_u3128(&var_98, arg3);
int64_t var_58_8 = 0xc5;
int64_t var_58_9 = 0x3a;
char const* const var_50_2 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_28_1 = 0;
int64_t* rax_37 = minuspercent___system_u813(*var_98, 0x10);
int64_t var_58_10 = 0xc6;
char const* const var_50_3 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_40 = *rax_37;
char rdx_9 = 0;
if (rax_40 - 0x10)
rdx_9 = 1;
if (rdx_9 & 1)
{
raiseOverflow();
break;
}
*rax_37 = rax_40 - 0x10;
int64_t var_58_11 = 0xc7;
int64_t rax_46 = arg3[8];
char rdx_11 = 0;
if (rax_46 + 1)
rdx_11 = 1;
if (rdx_11 & 1)
{
raiseOverflow();
break;
}
arg3[8] = rax_46 + 1;
int64_t var_58_12 = 0xce;
if ((*rax_37 & 3) != 1)
{
int64_t var_58_13 = 0x26;
*rax_37 = (*rax_37 & 0xfffffffffffffffc) | 1;
int64_t var_58_14 = 0xd0;
int64_t rax_60 = arg3[7];
char rdx_14 = 0;
if (rax_60 + 1)
rdx_14 = 1;
if (rdx_14 & 1)
{
raiseOverflow();
break;
}
arg3[7] = rax_60 + 1;
int64_t var_58_15 = 0xd2;
int64_t rax_67 = *rax_37 >> 4;
char rdx_16 = 0;
if (rax_67 + 2)
rdx_16 = 1;
if (rdx_16 & 1)
{
raiseOverflow();
break;
}
int64_t rdx_17 = arg3[9];
char rcx_12 = 0;
if (rax_67 + 2 + rdx_17)
rcx_12 = 1;
if (rcx_12 & 1)
{
raiseOverflow();
break;
}
arg3[9] = rax_67 + 2 + rdx_17;
int64_t var_58_16 = 0xd3;
void* var_90;
trace__system_u2913(rax_37, var_90, arg3);
if (*rax)
break;
}
}
}
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
return popFrame();
}
int64_t* scanBlack__system_u3120(int64_t* arg1, void* arg2, int64_t* arg3)
{
char const* const var_60 = "scanBlack";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_58_1 = 0x24;
*arg1 &= 0xfffffffffffffffc;
int64_t var_58_2 = 0xa6;
int64_t i = *arg3;
int64_t var_58_3 = 0xa7;
trace__system_u2913(arg1, arg2, arg3);
if (!*rax)
{
int64_t var_58_4 = 0xa9;
while (i < *arg3)
{
int64_t var_58_5 = 0xaa;
int64_t* var_78;
pop__system_u3128(&var_78, arg3);
int64_t var_58_6 = 0xab;
int64_t var_58_7 = 0x3a;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_30_1 = 0;
int64_t* rax_16 = minuspercent___system_u813(*var_78, 0x10);
int64_t var_58_8 = 0xac;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_19 = *rax_16;
char rdx_3 = 0;
if (rax_19 + 0x10)
rdx_3 = 1;
if (rdx_3 & 1)
{
raiseOverflow();
break;
}
*rax_16 = rax_19 + 0x10;
int64_t var_58_9 = 0xad;
if (*rax_16 & 3)
{
int64_t var_58_10 = 0x24;
*rax_16 &= 0xfffffffffffffffc;
int64_t var_58_11 = 0xaf;
void* var_70;
trace__system_u2913(rax_16, var_70, arg3);
if (*rax)
break;
}
}
}
return popFrame();
}
int64_t* scan__system_u3205(int64_t* arg1, void* arg2, int64_t* arg3)
{
char const* const var_60 = "scan";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_58_1 = 0xdf;
if ((*arg1 & 3) == 1)
{
int64_t var_58_2 = 0xe0;
if (*arg1 >> 4 < 0)
{
int64_t var_58_4 = 0x26;
*arg1 = (*arg1 & 0xfffffffffffffffc) | 2;
int64_t var_58_5 = 0xf8;
trace__system_u2913(arg1, arg2, arg3);
if (!*rax)
{
int64_t var_58_6 = 0xf9;
while (*arg3 > 0)
{
int64_t var_58_7 = 0xfa;
int64_t* var_78;
pop__system_u3128(&var_78, arg3);
int64_t var_58_8 = 0xfb;
int64_t var_58_9 = 0x3a;
char const* const var_50_1 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_28_1 = 0;
int64_t* rax_23 = minuspercent___system_u813(*var_78, 0x10);
int64_t var_58_10 = 0xfc;
char const* const var_50_2 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
if ((*rax_23 & 3) == 1)
{
int64_t var_58_11 = 0xfd;
void* var_70;
if (*rax_23 >> 4 < 0)
{
int64_t var_58_13 = 0x26;
*rax_23 = (*rax_23 & 0xfffffffffffffffc) | 2;
int64_t var_58_14 = 0x111;
trace__system_u2913(rax_23, var_70, arg3);
if (*rax)
break;
}
else
{
int64_t var_58_12 = 0xfe;
scanBlack__system_u3120(rax_23, var_70, arg3);
if (*rax)
break;
}
}
}
}
}
else
{
int64_t var_58_3 = 0xe1;
scanBlack__system_u3120(arg1, arg2, arg3);
}
}
return popFrame();
}
int64_t* collectColor__system_u3230(int64_t* arg1, void* arg2, int64_t arg3, int64_t* arg4)
{
char const* const var_60 = "collectColor";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_58_1 = 0x123;
char var_9 = 0;
uint64_t rax_3;
rax_3 = arg3 == (*arg1 & 3);
char var_9_1 = rax_3;
if (var_9_1 == 1)
{
int64_t rax_7;
rax_7 = !arg1[1];
var_9_1 = rax_7;
}
if (var_9_1 == 1)
{
int64_t var_58_2 = 0x24;
*arg1 &= 0xfffffffffffffffc;
int64_t var_58_3 = 0x127;
add__system_u3238(&arg4[3], arg1, arg2);
int64_t var_58_4 = 0x128;
trace__system_u2913(arg1, arg2, arg4);
if (!*rax)
{
int64_t var_58_5 = 0x129;
while (*arg4 > 0)
{
int64_t var_58_6 = 0x12a;
int64_t* var_78;
pop__system_u3128(&var_78, arg4);
int64_t* rax_22 = var_78;
int64_t var_58_7 = 0x12b;
int64_t var_58_8 = 0x3a;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_30_1 = 0;
int64_t* rax_26 = minuspercent___system_u813(*rax_22, 0x10);
int64_t var_58_9 = 0x12c;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
*rax_22 = 0;
int64_t var_58_10 = 0x12d;
char var_a_1 = 0;
uint64_t rax_31;
rax_31 = arg3 == (*rax_26 & 3);
char var_a_2 = rax_31;
if (var_a_2 == 1)
{
int64_t rax_35;
rax_35 = !rax_26[1];
var_a_2 = rax_35;
}
if (var_a_2 == 1)
{
int64_t var_58_11 = 0x12e;
void* var_70;
add__system_u3238(&arg4[3], rax_26, var_70);
int64_t var_58_12 = 0x24;
*rax_26 &= 0xfffffffffffffffc;
int64_t var_58_13 = 0x130;
trace__system_u2913(rax_26, var_70, arg4);
if (*rax)
break;
}
}
}
}
return popFrame();
}
int64_t* deallocImpl__system_u1751(int64_t* arg1)
{
return dealloc__system_u7209(__emutls_get_address(&_.data), arg1);
}
int64_t* deallocSharedImpl__system_u1764(int64_t* arg1)
{
return deallocImpl__system_u1751(arg1);
}
int64_t* deallocShared(int64_t* arg1)
{
return deallocSharedImpl__system_u1764(arg1);
}
int64_t* alignedDealloc(int64_t* arg1, int64_t arg2)
{
if (arg2 <= 0x10)
return deallocShared(arg1);
int64_t var_10_1 = 0;
int64_t var_20_1 = 0;
return deallocShared(minuspercent___system_u813(arg1, *minuspercent___system_u813(arg1, 2)));
}
int64_t* nimRawDispose(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "nimRawDispose";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xbe;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_38_2 = 0xbf;
int64_t var_38_3 = 0x40;
char const* const var_30_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\seqs_v2.nim";
int64_t var_18 = 0;
int64_t var_38_4 = 0xbf;
char const* const var_30_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
alignedDealloc(minuspercent___system_u813(arg1, align__system_u1634(0x10, arg2)), arg2);
return popFrame();
}
int64_t* free__system_u2961(int64_t arg1, int64_t* arg2)
{
char const* const var_50 = "free";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* rax = nimErrorFlag();
int64_t var_48_1 = 0x60;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_2 = 0x3d;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\seqs_v2.nim";
int64_t var_18 = 0;
int64_t rax_2 = pluspercent___system_u793(arg1, 0x10);
int64_t var_48_3 = 0x64;
char const* const var_40_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
if (*arg2)
{
int64_t var_48_4 = 0x65;
(*arg2)(rax_2);
}
if (!*arg2 || !*rax)
{
int64_t var_48_5 = 0x73;
nimRawDispose(rax_2, arg2[2]);
}
return popFrame();
}
int64_t* deinit__system_u3369(int64_t* arg1)
{
char const* const var_30 = "deinit";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x2a;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
if (arg1[2])
{
int64_t var_28_2 = 0x2c;
deallocShared(arg1[2]);
int64_t var_28_3 = 0x2f;
arg1[2] = 0;
}
int64_t var_28_4 = 0x30;
*arg1 = 0;
int64_t var_28_5 = 0x31;
arg1[1] = 0;
return popFrame();
}
int64_t* collectCyclesBacon__system_u3302(int64_t* arg1, int64_t arg2)
{
char const* const var_b0 = "collectCyclesBacon";
char const* const var_a0 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8 = 0;
int16_t var_98 = 0;
void* var_b8;
nimFrame(&var_b8);
char* rax = nimErrorFlag();
int64_t var_a8_1 = 0x148;
char const* const var_a0_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_2 = *__emutls_get_address(&__emutls_v.roots__system_u3091);
char rdx = 0;
if (rax_2 - 1)
rdx = 1;
if (!(rdx & 1))
{
int64_t var_48_1 = 0;
int64_t var_a8_2 = 0x21;
char const* const var_a0_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_18_1 = rax_2 - 1;
int64_t var_a8_3 = 0x22;
while (true)
{
if (arg2 > var_18_1)
{
int64_t var_a8_7 = 0x150;
char const* const var_a0_5 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_10_1 = 2;
int64_t var_a8_8 = 0x151;
if (arg1[9] != arg1[8])
{
int64_t var_50_1 = 0;
int64_t var_a8_11 = 0x21;
char const* const var_a0_6 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t i = rax_2 - 1;
int64_t var_a8_12 = 0x22;
for (; arg2 <= i; i -= 1)
{
int64_t var_a8_13 = 0x157;
char const* const var_a0_7 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8_14 = 0x158;
void* rax_30 = __emutls_get_address(&__emutls_v.roots__system_u3091);
scan__system_u3205(*((i << 4) + *(rax_30 + 0x10)),
*((i << 4) + *(rax_30 + 0x10) + 8), arg1);
if (*rax)
return popFrame();
int64_t var_a8_15 = 0x27;
char const* const var_a0_8 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_11 = 0;
if (i - 1)
rdx_11 = 1;
if (rdx_11 & 1)
{
raiseOverflow();
return popFrame();
}
}
}
else
{
int64_t var_a8_9 = 0x153;
var_10_1 = 1;
int64_t var_a8_10 = 0x155;
arg1[0xa] = 1;
}
int64_t var_a8_16 = 0x15a;
char const* const var_a0_9 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
init__system_u3330(&arg1[3], 0x400);
int64_t var_58_1 = 0;
int64_t var_a8_17 = 0x80;
char const* const var_a0_10 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_28_1 = 0;
int64_t var_a8_18 = 0x81;
while (true)
{
if (var_28_1 >= *__emutls_get_address(&__emutls_v.roots__system_u3091))
{
int64_t var_a8_24 = 0x165;
char const* const var_a0_13 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t* rax_61 =
__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301);
int64_t rdx_20 = *rax_61;
int64_t var_a8_25 = 0x166;
*rax_61 = 0x7fffffffffffffff;
int64_t var_a8_26 = 0x167;
*__emutls_get_address(&__emutls_v.roots__system_u3091) = 0;
int64_t var_70_1 = 0;
int64_t var_a8_27 = 0x80;
char const* const var_a0_14 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_30_1 = 0;
int64_t var_a8_28 = 0x81;
while (true)
{
if (var_30_1 >= arg1[3])
{
int64_t var_a8_32 = 0x16f;
char const* const var_a0_17 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) =
rdx_20;
int64_t var_a8_33 = 0x171;
int64_t rdx_25 = arg1[6];
int64_t rax_83 = arg1[3];
char rcx_20 = 0;
if (rax_83 + rdx_25)
rcx_20 = 1;
if (!(rcx_20 & 1))
{
arg1[6] = rax_83 + rdx_25;
int64_t var_a8_34 = 0x172;
deinit__system_u3369(&arg1[3]);
}
else
raiseOverflow();
break;
}
int64_t var_a8_29 = 0x169;
char const* const var_a0_15 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8_30 = 0x16c;
free__system_u2961(*((var_30_1 << 4) + arg1[5]),
*((var_30_1 << 4) + arg1[5] + 8));
int64_t var_a8_31 = 0x83;
char const* const var_a0_16 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_23 = 0;
if (var_30_1 + 1)
rdx_23 = 1;
if (rdx_23 & 1)
{
raiseOverflow();
break;
}
var_30_1 += 1;
}
break;
}
int64_t var_a8_19 = 0x15b;
char const* const var_a0_11 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8_20 = 0x15c;
void* rax_48 = __emutls_get_address(&__emutls_v.roots__system_u3091);
int64_t* rdx_15 = *((var_28_1 << 4) + *(rax_48 + 0x10));
int64_t var_a8_21 = 0x15d;
rdx_15[1] = 0;
int64_t var_a8_22 = 0x15e;
collectColor__system_u3230(rdx_15, *((var_28_1 << 4) + *(rax_48 + 0x10) + 8),
var_10_1, arg1);
if (*rax)
break;
int64_t var_a8_23 = 0x83;
char const* const var_a0_12 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_19 = 0;
if (var_28_1 + 1)
rdx_19 = 1;
if (rdx_19 & 1)
{
raiseOverflow();
break;
}
var_28_1 += 1;
}
break;
}
int64_t var_a8_4 = 0x14d;
char const* const var_a0_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8_5 = 0x14e;
void* rax_10 = __emutls_get_address(&__emutls_v.roots__system_u3091);
markGray__system_u3149(*((var_18_1 << 4) + *(rax_10 + 0x10)),
*((var_18_1 << 4) + *(rax_10 + 0x10) + 8), arg1);
if (*rax)
break;
int64_t var_a8_6 = 0x27;
char const* const var_a0_4 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_5 = 0;
if (var_18_1 - 1)
rdx_5 = 1;
if (rdx_5 & 1)
{
raiseOverflow();
break;
}
var_18_1 -= 1;
}
}
else
raiseOverflow();
return popFrame();
}
int64_t* deinit__system_u3394(int64_t* arg1)
{
char const* const var_30 = "deinit";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x2a;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
if (arg1[2])
{
int64_t var_28_2 = 0x2c;
deallocShared(arg1[2]);
int64_t var_28_3 = 0x2f;
arg1[2] = 0;
}
int64_t var_28_4 = 0x30;
*arg1 = 0;
int64_t var_28_5 = 0x31;
arg1[1] = 0;
return popFrame();
}
int64_t* collectCycles__system_u3430()
{
char const* const var_b0 = "collectCycles";
char const* const var_a0 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_a8 = 0;
int16_t var_98 = 0;
void* var_b8;
nimFrame(&var_b8);
char* rax = nimErrorFlag();
void var_88;
nimZeroMem(&var_88, 0x58);
int64_t var_a8_1 = 0x18d;
char const* const var_a0_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
init__system_u3382(&var_88, 0x400);
int64_t var_a8_2 = 0x197;
collectCyclesBacon__system_u3302(&var_88, 0);
if (!*rax)
{
int64_t var_a8_3 = 0x199;
deinit__system_u3394(&var_88);
int64_t var_a8_4 = 0x19a;
if (!*__emutls_get_address(&__emutls_v.roots__system_u3091))
{
int64_t var_a8_5 = 0x19b;
deinit__system_u3369(__emutls_get_address(&__emutls_v.roots__system_u3091));
}
int64_t var_a8_6 = 0x1a2;
char var_38;
if (var_38 != 1)
{
int64_t var_a8_7 = 0x1a4;
char rdx_1 = 0;
bool o_1 = /* bool o_1 = unimplemented {imul rax, rax, 0x2} */;
if (o_1)
rdx_1 = 1;
int64_t var_58;
int64_t var_50;
if (rdx_1 & 1)
raiseOverflow();
else if (var_50 > var_58 * 2)
{
int64_t var_a8_9 = 0x1aa;
if (*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301)
<= 0x1ffffffffffffffe)
{
int64_t var_28_1 = 0;
int64_t var_30_1 = 0;
int64_t var_a8_10 = 0x1ab;
if (*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) > 0)
{
int64_t* rax_28 =
__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301);
*rax_28 = *rax_28;
}
else
*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) = 0x80;
int64_t var_a8_11 = 0x1ac;
int64_t* rax_29 =
__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301);
int64_t rdx_10 = *rax_29;
int64_t rdx_12 = (rdx_10 + (rdx_10 >> 0x3f)) >> 1;
int64_t rax_30 = *rax_29;
char rdx_13 = 0;
if (rax_30 + rdx_12)
rdx_13 = 1;
if (!(rdx_13 & 1))
*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) =
rax_30 + rdx_12;
else
raiseOverflow();
}
}
else
{
int64_t var_a8_8 = 0x1a6;
char rdx_5 = 0;
int64_t rax_19 =
*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) / 3 * 2;
bool o_2 = /* bool o_2 = unimplemented {imul rax, rax, 0x2} */;
if (o_2)
rdx_5 = 1;
if (!(rdx_5 & 1))
{
int64_t rbx_1 = 0x10;
if (rax_19 >= 0x10)
rbx_1 = rax_19;
*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) = rbx_1;
}
else
raiseOverflow();
}
}
}
return popFrame();
}
int64_t* registerCycle__system_u3455(void* arg1, int64_t arg2)
{
char const* const var_50 = "registerCycle";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* var_20 = nimErrorFlag();
int64_t var_48_1 = 0x1bc;
int64_t rax_2 = *__emutls_get_address(&__emutls_v.roots__system_u3091);
char rdx = 0;
if (rax_2 + 1)
rdx = 1;
if (!(rdx & 1))
{
*(arg1 + 8) = rax_2 + 1;
int64_t var_48_2 = 0x1bd;
if (!*(__emutls_get_address(&__emutls_v.roots__system_u3091) + 0x10))
init__system_u3330(__emutls_get_address(&__emutls_v.roots__system_u3091), 0x400);
int64_t var_48_3 = 0x1be;
int64_t* rax_10 = __emutls_get_address(&__emutls_v.roots__system_u3091);
add__system_u3238(rax_10, arg1, arg2);
int64_t var_48_4 = 0x1c0;
int64_t rax_12 = *rax_10;
char rdx_4 = 0;
if (rax_12 - 0x80)
rdx_4 = 1;
if (!(rdx_4 & 1))
{
if (*__emutls_get_address(&__emutls_v.rootsThreshold__system_u3301) <= rax_12 - 0x80)
{
int64_t var_48_5 = 0x1c1;
collectCycles__system_u3430();
}
}
else
raiseOverflow();
}
else
raiseOverflow();
return popFrame();
}
int64_t* rememberCycle__system_u3495(char arg1, int64_t* arg2, void* arg3)
{
char const* const var_40 = "rememberCycle";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
char* var_18 = nimErrorFlag();
int64_t var_38_1 = 0x1f5;
if (arg1 != 1)
{
int64_t var_38_4 = 0x1fb;
char var_9_1 = 0;
int64_t rax_8;
rax_8 = !arg2[1];
char var_9_2 = rax_8;
if (var_9_2 == 1)
{
int64_t var_38_5 = 0x1f2;
uint64_t rax_13;
rax_13 = !(*(arg3 + 0x30) & 1);
var_9_2 = rax_13;
}
if (var_9_2 == 1)
{
int64_t var_38_6 = 0x24;
*arg2 &= 0xfffffffffffffffc;
int64_t var_38_7 = 0x1fd;
registerCycle__system_u3455(arg2, arg3);
}
}
else
{
int64_t var_38_2 = 0x1f6;
if (arg2[1] > 0)
{
int64_t var_38_3 = 0x1f7;
unregisterCycle__system_u3092(arg2);
}
}
return popFrame();
}
int64_t* nimDestroyAndDispose(int64_t* arg1)
{
char const* const var_40 = "nimDestroyAndDispose";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xc5;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_38_2 = 0xc6;
if (**arg1)
{
int64_t var_38_3 = 0xc7;
(**arg1)(arg1);
}
int64_t var_38_4 = 0xcf;
nimRawDispose(arg1, *(*arg1 + 0x10));
return popFrame();
}
int64_t* eqdestroy___stdZassertions_u74(int64_t* arg1)
{
int64_t* result_1 = arg1[1];
int64_t var_28 = *arg1;
int64_t* result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return alignedDealloc(result_1, 8);
}
return result;
}
int64_t* resize__system_u2986(void* arg1)
{
char const* const var_50 = "resize";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x14;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\cellseqs_v2.nim";
int64_t rax_1 = *(arg1 + 8);
int64_t rax_3 = (rax_1 + (rax_1 >> 0x3f)) >> 1;
int64_t rax_5 = *(arg1 + 8);
char rdx_2 = 0;
if (rax_5 + rax_3)
rdx_2 = 1;
if (!(rdx_2 & 1))
{
*(arg1 + 8) = rax_5 + rax_3;
int64_t var_48_2 = 0x15;
char rdx_4 = 0;
uint64_t rax_12 = *(arg1 + 8) * 0x10;
bool o_1 = /* bool o_1 = unimplemented {imul rax, rax, 0x10} */;
if (o_1)
rdx_4 = 1;
if (!(rdx_4 & 1))
{
int64_t var_48_3 = 0x17;
if (rax_12 >= 0)
{
int64_t var_18_1 = 0;
*(arg1 + 0x10) = reallocSharedImpl__system_u1766(*(arg1 + 0x10), rax_12);
}
else
raiseRangeErrorI(rax_12, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseOverflow();
return popFrame();
}
uint64_t nimAsgnStrV2(int64_t* arg1, int64_t* arg2)
{
int64_t rax = *arg2;
int64_t* rdx = arg2[1];
char var_19 = 0;
int64_t* rax_2;
rax_2 = arg1[1] == rdx;
char var_19_1 = rax_2;
if (var_19_1 == 1)
{
int64_t rax_6;
rax_6 = *arg1 == rax;
var_19_1 = rax_6;
}
uint64_t result = var_19_1 ^ 1;
if (result)
{
char var_1a_1 = 0;
int64_t* rax_8;
rax_8 = !rdx;
char var_1a_2 = rax_8;
if (!var_1a_2)
{
int64_t rax_10;
rax_10 = 0x4000000000000000 & *rdx;
var_1a_2 = rax_10;
}
if (var_1a_2 != 1)
{
char var_1c_1 = 0;
char var_1d_1 = 0;
int64_t rax_22;
rax_22 = !arg1[1];
char var_1d_2 = rax_22;
if (!var_1d_2)
{
int64_t rax_25;
rax_25 = 0x4000000000000000 & *arg1[1];
var_1d_2 = rax_25;
}
char var_1c_2 = var_1d_2;
if (!var_1c_2)
{
int64_t rax_29;
rax_29 = (*arg1[1] & 0xbfffffffffffffff) < rax;
var_1c_2 = rax_29;
}
if (var_1c_2 == 1)
{
char var_1e_1 = 0;
int64_t rax_33;
rax_33 = !arg1[1];
char var_1e_2 = rax_33;
if (!var_1e_2)
{
int64_t rax_36;
rax_36 = 0x4000000000000000 & *arg1[1];
var_1e_2 = rax_36;
}
if (!var_1e_2)
deallocShared(arg1[1]);
char rdx_11 = 0;
if (rax + 1)
rdx_11 = 1;
if (rdx_11 & 1)
return raiseOverflow();
char rdx_12 = 0;
if (rax + 1 + 8)
rdx_12 = 1;
if (rdx_12 & 1)
return raiseOverflow();
if (rax + 9 < 0)
return raiseRangeErrorI(rax + 9, 0, 0x7fffffffffffffff);
int64_t var_28_1 = 0;
arg1[1] = allocSharedImpl(rax + 9);
*arg1[1] = rax;
}
*arg1 = rax;
char rdx_16 = 0;
if (rax + 1)
rdx_16 = 1;
if (rdx_16 & 1)
return raiseOverflow();
if (rax + 1 >= 0)
return copyMem__system_u1731(arg1[1] + 8, &rdx[1], rax + 1);
return raiseRangeErrorI(rax + 1, 0, 0x7fffffffffffffff);
}
char var_1b_1 = 0;
int64_t rax_14;
rax_14 = !arg1[1];
char var_1b_2 = rax_14;
if (!var_1b_2)
{
int64_t rax_17;
rax_17 = 0x4000000000000000 & *arg1[1];
var_1b_2 = rax_17;
}
if (!var_1b_2)
deallocShared(arg1[1]);
*arg1 = rax;
result = arg1;
*(result + 8) = rdx;
}
return result;
}
int64_t* eqdup___system_u2662(int64_t* arg1, int64_t* arg2)
{
int64_t rax = *arg2;
int64_t rdx = arg2[1];
int64_t var_28 = 0;
int64_t var_20 = 0;
int64_t var_48 = rax;
int64_t var_40 = rdx;
nimAsgnStrV2(&var_28, &var_48);
*arg1 = var_28;
arg1[1] = var_20;
return arg1;
}
int64_t* eqsink___stdZassertions_u83(int64_t* arg1, int64_t* arg2)
{
int64_t rax = *arg2;
int64_t rdx = arg2[1];
if (arg1[1] != rdx)
{
int64_t rdx_2 = arg1[1];
int64_t var_38 = *arg1;
int64_t var_30_1 = rdx_2;
eqdestroy___stdZassertions_u74(&var_38);
}
*arg1 = rax;
arg1[1] = rdx;
return arg1;
}
int64_t* shrink__stdZassertions_u102(int64_t* arg1, int64_t arg2)
{
*arg1 = arg2;
return arg1;
}
void* alignedAlloc__system_u1912(int64_t arg1, int64_t arg2)
{
if (arg2 <= 0x10)
return allocSharedImpl(arg1);
char rcx_1 = 0;
int64_t rax_3 = arg2 + arg1;
if (arg2 + arg1)
rcx_1 = 1;
if (!(rcx_1 & 1))
{
char rdx_2 = 0;
if (rax_3 - 1)
rdx_2 = 1;
if (!(rdx_2 & 1))
{
char rdx_3 = 0;
if (rax_3 - 1 + 2)
rdx_3 = 1;
if (rdx_3 & 1)
raiseOverflow();
else if (rax_3 + 1 >= 0)
{
void* rax_17 = allocSharedImpl(rax_3 + 1);
char rdx_4 = 0;
if (arg2 - 1)
rdx_4 = 1;
if (!(rdx_4 & 1))
{
void* rdx_6 = rax_17 & (arg2 - 1);
char rcx_7 = 0;
void* rax_24 = arg2 - rdx_6;
if (arg2 + -(rdx_6))
rcx_7 = 1;
if (!(rcx_7 & 1))
{
char rdx_8 = 0;
if (rax_24 - 2)
rdx_8 = 1;
if (!(rdx_8 & 1))
{
int64_t var_28_1 = 0;
*pluspercent___system_u793(rax_17, rax_24 - 2) = rax_24;
int64_t var_30_1 = 0;
return pluspercent___system_u793(rax_17, rax_24);
}
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseRangeErrorI(rax_3 + 1, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseOverflow();
return nullptr;
}
void* newSeqPayloadUninit(int64_t arg1, int64_t arg2, uint64_t arg3)
{
if (arg1 <= 0)
return nullptr;
int64_t var_18_1 = 0;
int64_t rax_2 = align__system_u1634(8, arg3);
char rdx_1 = 0;
int64_t rax_4 = arg1 * arg2;
bool o_1 = /* bool o_1 = unimplemented {imul rax, qword [rbp+0x18]} */;
if (o_1)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
char rcx_1 = 0;
uint64_t rax_8 = rax_2 + rax_4;
if (rax_2 + rax_4)
rcx_1 = 1;
if (rcx_1 & 1)
raiseOverflow();
else if (rax_8 >= 0)
{
if (arg3 >= 0)
{
int64_t var_20_1 = 0;
void* result = alignedAlloc__system_u1912(rax_8, arg3);
*result = arg1;
return result;
}
raiseRangeErrorI(arg3, 0, 0x7fffffffffffffff);
}
else
raiseRangeErrorI(rax_8, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
return nullptr;
}
int64_t resize__system_u2227(int64_t arg1)
{
if (arg1 <= 0)
return 4;
if (arg1 > 0x7fff)
{
int64_t rax_8 = (arg1 + (arg1 >> 0x3f)) >> 1;
char rdx_4 = 0;
if (arg1 + rax_8)
rdx_4 = 1;
if (!(rdx_4 & 1))
return arg1 + rax_8;
raiseOverflow();
}
else
{
char rdx_1 = 0;
bool o_1 = /* bool o_1 = unimplemented {imul rax, rax, 0x2} */;
if (o_1)
rdx_1 = 1;
if (!(rdx_1 & 1))
return arg1 * 2;
raiseOverflow();
}
int64_t result;
return result;
}
void* alignedRealloc__system_u1972(int64_t* arg1, uint64_t arg2, uint64_t arg3, int64_t arg4)
{
if (arg4 <= 0x10)
return reallocSharedImpl__system_u1766(arg1, arg3);
void* result = alignedAlloc__system_u1912(arg3, arg4);
copyMem__system_u1731(result, arg1, arg2);
alignedDealloc(arg1, arg4);
return result;
}
void* prepareSeqAddUninit(int64_t arg1, int64_t* arg2, int64_t arg3, int64_t arg4, uint64_t arg5)
{
int64_t rax_1 = align__system_u1634(8, arg5);
if (arg3 <= 0)
return arg2;
if (arg2)
{
int64_t rax_11 = -0x4000000000000001 & *arg2;
int64_t var_30_1 = 0;
int64_t rax_13 = resize__system_u2227(rax_11);
char rcx_4 = 0;
if (arg3 + arg1)
rcx_4 = 1;
if (!(rcx_4 & 1))
{
int64_t rax_18 = arg3 + arg1;
if (rax_13 >= rax_18)
rax_18 = rax_13;
if (!(0x4000000000000000 & *arg2))
{
char rdx_18 = 0;
int64_t rax_49 = arg4 * rax_11;
bool o_6 = /* bool o_6 = unimplemented {imul rax, qword [rbp-0x20]} */;
if (o_6)
rdx_18 = 1;
if (!(rdx_18 & 1))
{
char rcx_17 = 0;
uint64_t rax_53 = rax_1 + rax_49;
if (rax_1 + rax_49)
rcx_17 = 1;
if (!(rcx_17 & 1))
{
char rdx_21 = 0;
int64_t rax_58 = arg4 * rax_18;
bool o_8 = /* bool o_8 = unimplemented {imul rax, qword [rbp-0x30]} */;
if (o_8)
rdx_21 = 1;
if (!(rdx_21 & 1))
{
char rcx_19 = 0;
uint64_t rax_62 = rax_1 + rax_58;
if (rax_1 + rax_58)
rcx_19 = 1;
if (rcx_19 & 1)
raiseOverflow();
else if (rax_53 < 0)
raiseRangeErrorI(rax_53, 0, 0x7fffffffffffffff);
else if (rax_62 >= 0)
{
if (arg5 >= 0)
{
int64_t var_70_1 = 0;
void* rax_70 =
alignedRealloc__system_u1972(arg2, rax_53, rax_62, arg5);
*rax_70 = rax_18;
return rax_70;
}
raiseRangeErrorI(arg5, 0, 0x7fffffffffffffff);
}
else
raiseRangeErrorI(rax_62, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
{
char rdx_9 = 0;
int64_t rax_22 = arg4 * rax_18;
bool o_3 = /* bool o_3 = unimplemented {imul rax, qword [rbp-0x30]} */;
if (o_3)
rdx_9 = 1;
if (!(rdx_9 & 1))
{
char rcx_6 = 0;
uint64_t rax_26 = rax_1 + rax_22;
if (rax_1 + rax_22)
rcx_6 = 1;
if (rcx_6 & 1)
raiseOverflow();
else if (rax_26 < 0)
raiseRangeErrorI(rax_26, 0, 0x7fffffffffffffff);
else if (arg5 >= 0)
{
int64_t var_40_1 = 0;
void* rax_33 = alignedAlloc__system_u1912(rax_26, arg5);
int64_t var_50_1 = 0;
int64_t rax_36 = pluspercent___system_u793(rax_33, rax_1);
int64_t var_58_1 = 0;
int64_t rax_38 = pluspercent___system_u793(arg2, rax_1);
char rdx_15 = 0;
uint64_t rax_40 = arg1 * arg4;
bool o_5 = /* bool o_5 = unimplemented {imul rax, qword [rbp+0x28]} */;
if (o_5)
rdx_15 = 1;
if (!(rdx_15 & 1))
{
if (rax_40 >= 0)
{
copyMem__system_u1731(rax_36, rax_38, rax_40);
*rax_33 = rax_18;
return rax_33;
}
raiseRangeErrorI(rax_40, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseRangeErrorI(arg5, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
}
else
raiseOverflow();
}
else
{
char rcx = 0;
if (arg3 + arg1)
rcx = 1;
if (!(rcx & 1))
return newSeqPayloadUninit(arg3 + arg1, arg4, arg5);
raiseOverflow();
}
return nullptr;
}
int64_t* setLen__stdZassertions_u94(int64_t* arg1, int64_t* arg2)
{
if (arg2 < *arg1)
return shrink__stdZassertions_u102(arg1, arg2);
int64_t* result_2 = *arg1;
int64_t* result = arg2;
if (result > result_2)
{
char var_9_1 = 0;
int64_t rax_8;
rax_8 = !arg1[1];
char var_9_2 = rax_8;
if (!var_9_2)
{
int64_t rax_11;
rax_11 = arg2 > (-0x4000000000000001 & *arg1[1]);
var_9_2 = rax_11;
}
if (var_9_2 == 1)
{
char rdx_2 = 0;
if (arg2 + -(result_2))
rdx_2 = 1;
if (rdx_2 & 1)
return raiseOverflow();
int64_t var_40_1 = 0;
arg1[1] = prepareSeqAddUninit(result_2, arg1[1], arg2 - result_2, 0x18, 8);
}
*arg1 = arg2;
int64_t var_48_1 = 0;
int64_t var_50_1 = 0;
int64_t* result_1 = result_2;
while (true)
{
result = result_1;
if (result >= arg2)
break;
nimZeroMem(result_1 * 0x18 + arg1[1] + 8, 0x18);
char rdx_7 = 0;
if (result_1 + 1)
rdx_7 = 1;
if (rdx_7 & 1)
return raiseOverflow();
result_1 += 1;
}
}
return result;
}
int64_t* newSeq__system_u4212(int64_t* arg1, int64_t* arg2)
{
shrink__stdZassertions_u102(arg1, 0);
return setLen__stdZassertions_u94(arg1, arg2);
}
int64_t* newSeq__system_u4207(int64_t* arg1, int64_t* arg2)
{
char const* const var_40 = "newSeq";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_18 = 0;
int64_t var_10 = 0;
int64_t var_38_1 = 0x28b;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
newSeq__system_u4212(&var_18, arg2);
popFrame();
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
int64_t* auxWriteStackTrace__system_u4173(int64_t* arg1, int64_t* arg2)
{
int64_t* i = arg1;
int64_t* var_18 = nullptr;
for (; i; i = *i)
var_18 += 1;
void* var_20 = var_18 - 1;
if (*arg2)
{
var_20 = var_18 + *arg2 - 1;
setLen__stdZassertions_u94(arg2, var_20 + 1);
}
else
{
int64_t var_58 = 0;
int64_t var_50_1 = 0;
newSeq__system_u4207(&var_58, var_18);
int64_t var_88 = var_58;
int64_t var_80_1 = var_50_1;
eqsink___stdZassertions_u83(arg2, &var_88);
}
int64_t* result = arg1;
int64_t* i_1 = result;
while (i_1)
{
int64_t var_48_1;
__builtin_memset(&var_48_1, 0, 0x18);
int64_t rax_19 = i_1[2];
int64_t rax_22 = i_1[3];
void* rax_29 = var_20 * 0x18 + arg2[1];
*(rax_29 + 8) = i_1[1];
*(rax_29 + 0x10) = rax_19;
*(rax_29 + 0x18) = rax_22;
result = *i_1;
i_1 = result;
var_20 -= 1;
}
return result;
}
int64_t* rawWriteStackTrace__system_u4432(int64_t* arg1)
{
return auxWriteStackTrace__system_u4173(
*__emutls_get_address(&__emutls_v.framePtr__system_u2692), arg1);
}
int64_t* add__system_u4515(int64_t* arg1, int64_t* arg2)
{
int64_t rax_1 = *arg1;
char var_19 = 0;
int64_t rax_5;
rax_5 = !arg1[1];
char var_19_1 = rax_5;
if (!var_19_1)
{
char rdx = 0;
if (rax_1 + 1)
rdx = 1;
if (rdx & 1)
return raiseOverflow();
int64_t rax_12;
rax_12 = (*arg1[1] & 0xbfffffffffffffff) < rax_1 + 1;
var_19_1 = rax_12;
}
if (var_19_1 == 1)
{
int64_t var_40_1 = 0;
arg1[1] = prepareSeqAddUninit(rax_1, arg1[1], 1, 0x18, 8);
}
char rdx_5 = 0;
if (rax_1 + 1)
rdx_5 = 1;
if (rdx_5 & 1)
return raiseOverflow();
*arg1 = rax_1 + 1;
int64_t* result = rax_1 * 0x18 + arg1[1];
result[1] = *arg2;
result[2] = arg2[1];
result[3] = arg2[2];
return result;
}
int64_t* nimIncRefCyclic(int64_t arg1)
{
char rdx;
char arg_10 = rdx;
char const* const var_50 = "nimIncRefCyclic";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x2d;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_2 = 0x3a;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_10 = 0;
int64_t* rax_2 = minuspercent___system_u813(arg1, 0x10);
int64_t var_48_3 = 0x2e;
char const* const var_40_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t rax_5 = *rax_2;
char rdx_1 = 0;
if (rax_5 + 0x10)
rdx_1 = 1;
if (!(rdx_1 & 1))
*rax_2 = rax_5 + 0x10;
else
raiseOverflow();
return popFrame();
}
uint64_t nimDecRefIsLastCyclicDyn(void** arg1)
{
char const* const var_50 = "nimDecRefIsLastCyclicDyn";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* var_18 = nimErrorFlag();
int64_t var_48_1 = 0x200;
char var_9 = 0;
int64_t var_48_2 = 0x201;
if (arg1)
{
int64_t var_48_3 = 0x202;
int64_t var_48_4 = 0x3a;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_20_1 = 0;
int64_t* rax_2 = minuspercent___system_u813(arg1, 0x10);
int64_t var_48_5 = 0x203;
char const* const var_40_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\orc.nim";
int64_t var_48_8;
if (*rax_2 > 0xf)
{
int64_t var_48_7 = 0x207;
int64_t rax_7 = *rax_2;
char rdx_1 = 0;
if (rax_7 - 0x10)
rdx_1 = 1;
if (!(rdx_1 & 1))
{
*rax_2 = rax_7 - 0x10;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
else
raiseOverflow();
}
else
{
int64_t var_48_6 = 0x204;
var_9 = 1;
var_48_8 = 0x209;
rememberCycle__system_u3495(var_9, rax_2, *arg1);
}
}
popFrame();
return var_9;
}
int64_t eqcopy___stdZtypedthreads_u187(int64_t* arg1, int64_t arg2, char arg3)
{
void** rax_2 = *arg1;
if (arg2)
nimIncRefCyclic(arg2);
*arg1 = arg2;
char var_11 = 0;
char result = nimDecRefIsLastCyclicDyn(rax_2) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(rax_2);
}
int64_t eqsink___stdZtypedthreads_u195(int64_t* arg1, int64_t arg2)
{
void** rax_1 = *arg1;
*arg1 = arg2;
char var_11 = 0;
char result = nimDecRefIsLastCyclicDyn(rax_1) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(rax_1);
}
int64_t pushCurrentException(void* arg1)
{
int64_t* rax = __emutls_get_address(&__emutls_v.currException__system_u4105);
eqcopy___stdZtypedthreads_u187(arg1 + 0x38, *rax, 1);
return eqsink___stdZtypedthreads_u195(rax, arg1);
}
char* raiseExceptionAux__system_u4487(void* arg1)
{
int64_t rax_1 = *__emutls_get_address(&__emutls_v.localRaiseHook__system_u3633);
char* result;
if (rax_1)
{
char var_9_1 = 0;
result = (*__emutls_get_address(&__emutls_v.localRaiseHook__system_u3633))(arg1);
}
if (!rax_1 || result)
{
if (globalRaiseHook__system_u3630)
{
char var_a_1 = 0;
result = globalRaiseHook__system_u3630(arg1);
}
if (!globalRaiseHook__system_u3630 || result)
{
pushCurrentException(arg1);
result = __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
int64_t rdx_5;
rdx_5 = *result != -1;
*result = rdx_5;
}
}
return result;
}
char* raiseExceptionEx(void* arg1, int64_t arg2)
{
int64_t r8;
int64_t arg_18 = r8;
int64_t r9;
int64_t arg_20 = r9;
if (!*(arg1 + 0x10))
*(arg1 + 0x10) = arg2;
if (*(arg1 + 0x28))
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
{
int64_t var_30_1 = -0xa;
int64_t var_28_1 = 0;
int64_t var_78 = 0;
int64_t var_70_1 = var_30_1;
int64_t var_68_1 = var_28_1;
add__system_u4515(arg1 + 0x28, &var_78);
auxWriteStackTrace__system_u4173(
*__emutls_get_address(&__emutls_v.framePtr__system_u2692), arg1 + 0x28);
int64_t var_50_1 = -0x64;
int64_t var_48_1 = 0;
var_78 = 0;
int64_t var_70_2 = var_50_1;
int64_t var_68_2 = var_48_1;
add__system_u4515(arg1 + 0x28, &var_78);
}
}
else
rawWriteStackTrace__system_u4432(arg1 + 0x28);
return raiseExceptionAux__system_u4487(arg1);
}
int64_t* sysFatal__system_u5210(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "sysFatal";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__1DmnNWJVVT9bplfmaalVeUA_;
rax_1[2] = "OverflowDefect";
int64_t var_58_1 = 0x35;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58_2 = 0x69e;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
int64_t var_58_3 = 0x35;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_98 = 0x35;
raiseExceptionEx(rax_1, "OverflowDefect");
return popFrame();
}
int64_t* raiseOverflow()
{
int64_t var_18 = 0x12;
void* const var_10 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_70;
return sysFatal__system_u5210(&var_18);
}
int64_t align__system_u1634(int64_t arg1, int64_t arg2)
{
char const* const var_40 = "align";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x460;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t result;
if (arg2)
{
int64_t var_38_3 = 0x464;
char rdx = 0;
if (arg2 - 1)
rdx = 1;
if (!(rdx & 1))
{
char rcx_2 = 0;
if (arg1 + arg2 - 1)
rcx_2 = 1;
if (!(rcx_2 & 1))
{
char rdx_3 = 0;
if (arg2 - 1)
rdx_3 = 1;
if (!(rdx_3 & 1))
result = (arg1 + arg2 - 1) & ~(arg2 - 1);
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
{
int64_t var_38_2 = 0x462;
result = arg1;
}
popFrame();
return result;
}
void* allocShared0Impl__system_u1762(uint64_t arg1)
{
void* result = allocSharedImpl(arg1);
zeroMem__system_u1728(result, arg1);
return result;
}
void* alignedAlloc0__system_u1958(uint64_t arg1, int64_t arg2)
{
if (arg2 <= 0x10)
return allocShared0Impl__system_u1762(arg1);
char rcx_1 = 0;
int64_t rax_3 = arg2 + arg1;
if (arg2 + arg1)
rcx_1 = 1;
if (!(rcx_1 & 1))
{
char rdx_2 = 0;
if (rax_3 - 1)
rdx_2 = 1;
if (!(rdx_2 & 1))
{
char rdx_3 = 0;
if (rax_3 - 1 + 2)
rdx_3 = 1;
if (rdx_3 & 1)
raiseOverflow();
else if (rax_3 + 1 >= 0)
{
void* rax_17 = allocShared0Impl__system_u1762(rax_3 + 1);
char rdx_4 = 0;
if (arg2 - 1)
rdx_4 = 1;
if (!(rdx_4 & 1))
{
void* rdx_6 = rax_17 & (arg2 - 1);
char rcx_7 = 0;
void* rax_24 = arg2 - rdx_6;
if (arg2 + -(rdx_6))
rcx_7 = 1;
if (!(rcx_7 & 1))
{
char rdx_8 = 0;
if (rax_24 - 2)
rdx_8 = 1;
if (!(rdx_8 & 1))
{
int64_t var_28_1 = 0;
*pluspercent___system_u793(rax_17, rax_24 - 2) = rax_24;
int64_t var_30_1 = 0;
return pluspercent___system_u793(rax_17, rax_24);
}
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseOverflow();
}
else
raiseRangeErrorI(rax_3 + 1, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
raiseOverflow();
return nullptr;
}
int64_t nimNewObj(int64_t arg1, uint64_t arg2)
{
char const* const var_60 = "nimNewObj";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t result = 0;
int64_t var_58_1 = 0x5e;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t rax_1 = align__system_u1634(0x10, arg2);
int64_t var_58_2 = 0x5f;
char rcx_1 = 0;
uint64_t rax_3 = rax_1 + arg1;
if (rax_1 + arg1)
rcx_1 = 1;
if (!(rcx_1 & 1))
{
int64_t var_58_3 = 0x63;
int64_t var_58_4 = 0x3d;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\seqs_v2.nim";
int64_t var_58_5 = 0x63;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
if (rax_3 < 0)
raiseRangeErrorI(rax_3, 0, 0x7fffffffffffffff);
else if (arg2 >= 0)
{
int64_t var_28_1 = 0;
int64_t var_58_6 = 0x3d;
char const* const var_50_4 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\seqs_v2.nim";
int64_t var_30_1 = 0;
result = pluspercent___system_u793(alignedAlloc0__system_u1958(rax_3, arg2), rax_1);
}
else
raiseRangeErrorI(arg2, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
popFrame();
return result;
}
int64_t* sysFatal__system_u4979(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "sysFatal";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__RKHXYNwSRXz825VbZValEQ_;
rax_1[2] = "RangeDefect";
int64_t var_58_1 = 0x35;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58_2 = 0x69e;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
int64_t var_58_3 = 0x35;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_98 = 0x35;
raiseExceptionEx(rax_1, "RangeDefect");
return popFrame();
}
int64_t* prepareAdd(int64_t* arg1, int64_t arg2)
{
int64_t rdx = *arg1;
char rcx = 0;
uint64_t result_1 = arg2 + rdx;
if (arg2 + rdx)
rcx = 1;
if (rcx & 1)
return raiseOverflow();
char var_9_1 = 0;
int64_t rax_6;
rax_6 = !arg1[1];
char var_9_2 = rax_6;
if (!var_9_2)
{
int64_t rax_9;
rax_9 = 0x4000000000000000 & *arg1[1];
var_9_2 = rax_9;
}
int64_t* result;
if (var_9_2 != 1)
{
int64_t* result_2 = -0x4000000000000001 & *arg1[1];
result = result_2;
if (result < result_1)
{
int64_t var_38_1 = 0;
uint64_t result_6 = resize__system_u2227(result_2);
if (result_1 >= result_6)
result_6 = result_1;
char rdx_10 = 0;
if (result_6 + 1)
rdx_10 = 1;
if (rdx_10 & 1)
return raiseOverflow();
char rdx_11 = 0;
if (result_6 + 1 + 8)
rdx_11 = 1;
if (rdx_11 & 1)
return raiseOverflow();
if (result_6 + 9 < 0)
return raiseRangeErrorI(result_6 + 9, 0, 0x7fffffffffffffff);
int64_t var_48_1 = 0;
arg1[1] = reallocSharedImpl__system_u1766(arg1[1], result_6 + 9);
*arg1[1] = result_6;
result = result_1;
if (result < result_6)
{
char rdx_15 = 0;
if (result_1 + 1)
rdx_15 = 1;
if (rdx_15 & 1)
return raiseOverflow();
char rdx_16 = 0;
uint64_t rax_63 = result_6 - result_1;
if (result_6 + -(result_1))
rdx_16 = 1;
if (rdx_16 & 1)
return raiseOverflow();
if (rax_63 >= 0)
return zeroMem__system_u1728(result_1 + 1 + arg1[1] + 8, rax_63);
return raiseRangeErrorI(rax_63, 0, 0x7fffffffffffffff);
}
}
}
else
{
int64_t rax_13 = arg1[1];
char rdx_3 = 0;
if (result_1 + 1)
rdx_3 = 1;
if (rdx_3 & 1)
return raiseOverflow();
char rdx_4 = 0;
if (result_1 + 1 + 8)
rdx_4 = 1;
if (rdx_4 & 1)
return raiseOverflow();
if (result_1 + 9 < 0)
return raiseRangeErrorI(result_1 + 9, 0, 0x7fffffffffffffff);
int64_t var_28_1 = 0;
arg1[1] = allocSharedImpl(result_1 + 9);
*arg1[1] = result_1;
result = *arg1;
if (result > 0)
{
uint64_t result_7 = *arg1;
uint64_t result_3 = result_1;
if (result_7 <= result_3)
result_3 = result_7;
if (result_3 >= 0)
{
uint64_t result_9 = *arg1;
uint64_t result_5 = result_1;
if (result_9 <= result_5)
result_5 = result_9;
return copyMem__system_u1731(arg1[1] + 8, rax_13 + 8, result_5);
}
uint64_t result_8 = *arg1;
uint64_t result_4 = result_1;
if (result_8 <= result_4)
result_4 = result_8;
return raiseRangeErrorI(result_4, 0, 0x7fffffffffffffff);
}
if (!rax_13)
{
result = arg1[1];
result[1] = 0;
}
}
return result;
}
int64_t* sysFatal__system_u4806(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "sysFatal";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__xTnzBHckcPoKiwygsku9csg_;
rax_1[2] = "IndexDefect";
int64_t var_58_1 = 0x35;
int64_t var_58_2 = 0x69e;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
int64_t var_58_3 = 0x35;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_98 = 0x35;
raiseExceptionEx(rax_1, "IndexDefect");
return popFrame();
}
int64_t* rawNewString(int64_t* arg1, int64_t arg2)
{
int64_t var_28;
nimZeroMem(&var_28, 0x10);
void* var_20;
if (arg2 > 0)
{
char rdx = 0;
if (arg2 + 1)
rdx = 1;
if (!(rdx & 1))
{
char rdx_1 = 0;
if (arg2 + 1 + 8)
rdx_1 = 1;
if (rdx_1 & 1)
raiseOverflow();
else if (arg2 + 9 >= 0)
{
int64_t var_10_1 = 0;
void* rax_12 = allocSharedImpl(arg2 + 9);
*rax_12 = arg2;
*(rax_12 + 8) = 0;
var_28 = 0;
var_20 = rax_12;
}
else
raiseRangeErrorI(arg2 + 9, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
{
var_28 = 0;
var_20 = nullptr;
}
*arg1 = var_28;
arg1[1] = var_20;
return arg1;
}
void* const raiseIndexError2(uint64_t arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
int64_t var_48_1;
__builtin_memset(&var_48_1, 0, 0x30);
void* const result;
uint64_t var_88;
uint64_t var_48_2;
void* const var_40_1;
void* var_30_1;
if (arg2 >= 0)
{
uint64_t var_78 = 0;
int64_t var_70_1;
__builtin_memset(&var_70_1, 0, 0x28);
uint64_t var_58;
dollar___systemZdollars_u14(&var_58, arg1);
result = *rax;
if (!result)
{
uint64_t var_68;
dollar___systemZdollars_u14(&var_68, arg2);
result = *rax;
if (!result)
{
rawNewString(&var_88, var_68 + var_58 + 0x13);
var_78 = var_88;
var_88 = 6;
void* const var_80_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_92;
appendString(&var_78, &var_88);
var_88 = var_58;
int64_t* var_50;
int64_t* var_80_2 = var_50;
appendString(&var_78, &var_88);
var_88 = 0xd;
void* const var_80_3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_94;
appendString(&var_78, &var_88);
var_88 = var_68;
int64_t* var_60;
int64_t* var_80_4 = var_60;
appendString(&var_78, &var_88);
uint64_t rax_10 = var_78;
void* var_80;
var_30_1 = var_80;
if (var_60 && !(0x4000000000000000 & *var_60))
deallocShared(var_60);
if (var_50 && !(0x4000000000000000 & *var_50))
deallocShared(var_50);
var_48_2 = rax_10;
var_40_1 = var_30_1;
goto label_14000d620;
}
}
}
else
{
void* const result_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_90;
var_48_2 = 0x2b;
var_40_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_90;
label_14000d620:
var_88 = var_48_2;
void* const var_80_5 = var_40_1;
sysFatal__system_u4806(&var_88);
if (var_30_1 && !(0x4000000000000000 & *var_30_1))
deallocShared(var_30_1);
result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return deallocShared(result_1);
}
}
return result;
}
void* realloc0Impl__system_u1756(int64_t* arg1, void* arg2, uint64_t arg3)
{
void* result = realloc__system_u7212(__emutls_get_address(&_.data), arg1, arg3);
if (arg2 < arg3)
zeroMem__system_u1728(arg2 + result, arg3 - arg2);
return result;
}
void* reallocShared0Impl__system_u1769(int64_t* arg1, void* arg2, uint64_t arg3)
{
return realloc0Impl__system_u1756(arg1, arg2, arg3);
}
int64_t* setLengthStrV2(int64_t* arg1, uint64_t arg2)
{
if (arg2)
{
char var_9_1 = 0;
int64_t rax_2;
rax_2 = !arg1[1];
char var_9_2 = rax_2;
if (!var_9_2)
{
int64_t rax_5;
rax_5 = 0x4000000000000000 & *arg1[1];
var_9_2 = rax_5;
}
if (var_9_2 == 1)
{
int64_t rax_9 = arg1[1];
char rdx_1 = 0;
if (arg2 + 1)
rdx_1 = 1;
if (rdx_1 & 1)
return raiseOverflow();
char rdx_2 = 0;
if (arg2 + 1 + 8)
rdx_2 = 1;
if (rdx_2 & 1)
return raiseOverflow();
if (arg2 + 9 < 0)
return raiseRangeErrorI(arg2 + 9, 0, 0x7fffffffffffffff);
int64_t var_20_1 = 0;
arg1[1] = allocSharedImpl(arg2 + 9);
*arg1[1] = arg2;
if (*arg1 <= 0)
{
char rdx_14 = 0;
if (arg2 + 1)
rdx_14 = 1;
if (rdx_14 & 1)
return raiseOverflow();
if (arg2 + 1 < 0)
return raiseRangeErrorI(arg2 + 1, 0, 0x7fffffffffffffff);
zeroMem__system_u1728(arg1[1] + 8, arg2 + 1);
}
else
{
uint64_t rdx_5 = *arg1;
uint64_t rax_29 = arg2;
if (rdx_5 <= rax_29)
rax_29 = rdx_5;
if (rax_29 < 0)
{
uint64_t rdx_6 = *arg1;
uint64_t rax_31 = arg2;
if (rdx_6 <= rax_31)
rax_31 = rdx_6;
return raiseRangeErrorI(rax_31, 0, 0x7fffffffffffffff);
}
uint64_t rdx_7 = *arg1;
uint64_t rax_33 = arg2;
if (rdx_7 <= rax_33)
rax_33 = rdx_7;
copyMem__system_u1731(arg1[1] + 8, rax_9 + 8, rax_33);
if (arg2 <= *arg1)
*(arg2 + arg1[1] + 8) = 0;
else
{
int64_t rdx_9 = *arg1;
char rcx_7 = 0;
int64_t rax_42 = arg2 - rdx_9;
if (arg2 + -(rdx_9))
rcx_7 = 1;
if (rcx_7 & 1)
return raiseOverflow();
char rdx_11 = 0;
if (rax_42 + 1)
rdx_11 = 1;
if (rdx_11 & 1)
return raiseOverflow();
if (rax_42 + 1 < 0)
return raiseRangeErrorI(rax_42 + 1, 0, 0x7fffffffffffffff);
zeroMem__system_u1728(*arg1 + arg1[1] + 8, rax_42 + 1);
}
}
}
else if (arg2 > *arg1)
{
int64_t rax_73 = -0x4000000000000001 & *arg1[1];
if (rax_73 < arg2)
{
int64_t var_30_1 = 0;
uint64_t rax_77 = resize__system_u2227(rax_73);
if (arg2 >= rax_77)
rax_77 = arg2;
char rdx_18 = 0;
if (rax_73 + 1)
rdx_18 = 1;
if (rdx_18 & 1)
return raiseOverflow();
char rdx_19 = 0;
if (rax_73 + 1 + 8)
rdx_19 = 1;
if (rdx_19 & 1)
return raiseOverflow();
if (rax_73 + 9 < 0)
return raiseRangeErrorI(rax_73 + 9, 0, 0x7fffffffffffffff);
char rdx_20 = 0;
if (rax_77 + 1)
rdx_20 = 1;
if (rdx_20 & 1)
return raiseOverflow();
char rdx_21 = 0;
if (rax_77 + 1 + 8)
rdx_21 = 1;
if (rdx_21 & 1)
return raiseOverflow();
if (rax_77 + 9 < 0)
return raiseRangeErrorI(rax_77 + 9, 0, 0x7fffffffffffffff);
int64_t var_40_1 = 0;
arg1[1] = reallocShared0Impl__system_u1769(arg1[1], rax_73 + 9, rax_77 + 9);
*arg1[1] = rax_77;
}
}
*(arg2 + arg1[1] + 8) = 0;
}
*arg1 = arg2;
return arg1;
}
uint64_t raiseRangeErrorI(uint64_t arg1, uint64_t arg2, uint64_t arg3)
{
char* rax = nimErrorFlag();
uint64_t var_68 = 0;
int64_t var_60_1;
__builtin_memset(&var_60_1, 0, 0x48);
uint64_t var_28;
dollar___systemZdollars_u34(&var_28, arg1);
uint64_t result = *rax;
if (!result)
{
uint64_t var_38;
dollar___systemZdollars_u34(&var_38, arg2);
result = *rax;
if (!result)
{
uint64_t var_48;
dollar___systemZdollars_u34(&var_48, arg3);
result = *rax;
if (!result)
{
uint64_t var_78;
rawNewString(&var_78, var_48 + var_28 + var_38 + 0x1f);
var_68 = var_78;
var_78 = 0x14;
void* const var_70_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_81;
appendString(&var_68, &var_78);
var_78 = var_28;
uint64_t result_1;
uint64_t result_2 = result_1;
appendString(&var_68, &var_78);
var_78 = 7;
void* const var_70_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_107;
appendString(&var_68, &var_78);
var_78 = var_38;
int64_t* var_30;
int64_t* var_70_3 = var_30;
appendString(&var_68, &var_78);
var_78 = 4;
void* const var_70_4 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_109;
appendString(&var_68, &var_78);
var_78 = var_48;
int64_t* var_40;
int64_t* var_70_5 = var_40;
appendString(&var_68, &var_78);
var_78 = var_68;
int64_t* var_70;
int64_t* var_70_6 = var_70;
sysFatal__system_u4979(&var_78);
if (var_70 && !(0x4000000000000000 & *var_70))
deallocShared(var_70);
if (var_40 && !(0x4000000000000000 & *var_40))
deallocShared(var_40);
if (var_30 && !(0x4000000000000000 & *var_30))
deallocShared(var_30);
result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return deallocShared(result_1);
}
}
}
}
return result;
}
uint64_t appendString(uint64_t* arg1, int64_t* arg2)
{
uint64_t result_1 = *arg2;
uint64_t result = result_1;
if (result > 0)
{
if (result_1 < 0)
return raiseRangeErrorI(result_1, 0, 0x7fffffffffffffff);
copyMem__system_u1731(*arg1 + arg1[1] + 8, arg2[1] + 8, result_1);
uint64_t rdx_2 = *arg1;
char rcx_3 = 0;
if (result_1 + rdx_2)
rcx_3 = 1;
if (rcx_3 & 1)
return raiseOverflow();
*arg1 = result_1 + rdx_2;
result = *arg1;
*(arg1[1] + result + 8) = 0;
}
return result;
}
int64_t* nimAddCharV1(int64_t* arg1, char arg2)
{
prepareAdd(arg1, 1);
*(arg1[1] + *arg1 + 8) = arg2;
int64_t rax_6 = *arg1;
char rdx_1 = 0;
if (rax_6 + 1)
rdx_1 = 1;
if (rdx_1 & 1)
return raiseOverflow();
*arg1 = rax_6 + 1;
int64_t* result = *arg1;
*(arg1[1] + result + 8) = 0;
return result;
}
void add__system_u3639(int64_t* arg1, void* arg2)
{
int64_t var_10 = 0;
if (!arg2)
return;
while (*(arg2 + var_10))
{
nimAddCharV1(arg1, *(arg2 + var_10));
var_10 += 1;
}
}
int64_t* addInt__stdZprivateZdigitsutils_u204(int64_t* arg1, uint64_t arg2)
{
char const* const var_30 = "addInt";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x74;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\private\digitsutils.nim";
addInt__stdZprivateZdigitsutils_u187(arg1, arg2);
return popFrame();
}
void* auxWriteStackTrace__system_u4293(int64_t* arg1, uint64_t* arg2)
{
char* rax = nimErrorFlag();
int64_t var_498[0x8];
nimZeroMem(&var_498, 0x400);
int64_t* i = arg1;
int64_t* var_18 = nullptr;
int64_t var_20 = 0;
while (true)
{
char var_31_1 = 0;
int64_t* rax_1;
rax_1 = i;
bool var_31_2 = rax_1;
if (var_31_2 == 1)
var_31_2 = var_18 <= 0x5f;
if (var_31_2 != 1)
break;
var_498[var_18] = i;
var_18 += 1;
var_20 += 1;
i = *i;
}
int64_t* i_4 = i;
for (; i; i = *i)
var_20 += 1;
uint64_t var_30 = 0;
if (var_20 > 0x80)
{
var_30 = var_20 - var_18 - 0x1f;
int64_t var_68_1 = 0;
for (int64_t i_1 = 1; i_1 <= var_30; i_1 += 1)
{
int64_t i_3 = i_1;
if (i_4)
i_4 = *i_4;
}
var_498[var_18] = 0;
var_18 += 1;
}
while (true)
{
char var_41_1 = 0;
int64_t* rax_8;
rax_8 = i_4;
bool var_41_2 = rax_8;
if (var_41_2 == 1)
var_41_2 = var_18 <= 0x7f;
if (var_41_2 != 1)
break;
var_498[var_18] = i_4;
var_18 += 1;
i_4 = *i_4;
}
int64_t var_70 = 0;
int64_t var_78 = 0;
void* result = var_18 - 1;
for (void* i_2 = result; i_2 >= 0; i_2 -= 1)
{
int64_t var_4b8;
if (var_498[i_2])
{
uint64_t rax_38 = *arg2;
add__system_u3639(arg2, *(var_498[i_2] + 0x18));
if (*(var_498[i_2] + 0x10) > 0)
{
prepareAdd(arg2, 1);
var_4b8 = 1;
void* const var_4b0_3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(arg2, &var_4b8);
addInt__stdZprivateZdigitsutils_u204(arg2, *(var_498[i_2] + 0x10));
prepareAdd(arg2, 1);
var_4b8 = 1;
void* const var_4b0_4 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_122;
appendString(arg2, &var_4b8);
}
int64_t var_88_1 = 0;
int64_t var_90_1 = 0;
int64_t rax_53 = 0x19 - (*arg2 - rax_38);
if (rax_53 <= 0)
rax_53 = 1;
for (int64_t j = 1; j <= rax_53; j += 1)
{
int64_t j_1 = j;
nimAddCharV1(arg2, 0x20);
}
add__system_u3639(arg2, *(var_498[i_2] + 8));
prepareAdd(arg2, 1);
var_4b8 = 1;
void* const var_4b0_5 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_124;
result = appendString(arg2, &var_4b8);
}
else
{
int64_t var_4a8 = 0;
void* result_1 = nullptr;
prepareAdd(arg2, 1);
var_4b8 = 1;
void* const var_4b0_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(arg2, &var_4b8);
dollar___systemZdollars_u14(&var_4a8, var_30);
result = *rax;
if (result)
break;
prepareAdd(arg2, var_4a8);
var_4b8 = var_4a8;
void* result_2 = result_1;
appendString(arg2, &var_4b8);
prepareAdd(arg2, 0x14);
var_4b8 = 0x14;
void* const var_4b0_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_116;
appendString(arg2, &var_4b8);
result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
result = deallocShared(result_1);
}
}
}
return result;
}
uint64_t rawWriteStackTrace__system_u4426(uint64_t* arg1)
{
int64_t var_18;
if (!*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
{
prepareAdd(arg1, 0x1d);
var_18 = 0x1d;
void* const var_10 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_4;
return appendString(arg1, &var_18);
}
prepareAdd(arg1, 0x22);
var_18 = 0x22;
void* const var_10_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_112;
appendString(arg1, &var_18);
return auxWriteStackTrace__system_u4293(
*__emutls_get_address(&__emutls_v.framePtr__system_u2692), arg1);
}
int64_t* toNimStr(int64_t* arg1, int64_t arg2, int64_t arg3)
{
int64_t var_38;
nimZeroMem(&var_38, 0x10);
void* var_30;
if (arg3 > 0)
{
int64_t var_10_1 = 0;
char rdx = 0;
if (arg3 + 1)
rdx = 1;
if (!(rdx & 1))
{
char rdx_1 = 0;
if (arg3 + 1 + 8)
rdx_1 = 1;
if (rdx_1 & 1)
raiseOverflow();
else if (arg3 + 9 >= 0)
{
int64_t var_18_1 = 0;
void* rax_12 = allocSharedImpl(arg3 + 9);
*rax_12 = arg3;
char rdx_3 = 0;
if (arg3 + 1)
rdx_3 = 1;
if (rdx_3 & 1)
raiseOverflow();
else if (arg3 + 1 >= 0)
{
copyMem__system_u1731(rax_12 + 8, arg2, arg3 + 1);
var_38 = arg3;
var_30 = rax_12;
}
else
raiseRangeErrorI(arg3 + 1, 0, 0x7fffffffffffffff);
}
else
raiseRangeErrorI(arg3 + 9, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
{
var_38 = 0;
var_30 = nullptr;
}
*arg1 = var_38;
arg1[1] = var_30;
return arg1;
}
uint64_t nimCStrLen(char* arg1)
{
int64_t var_10 = 0;
if (!arg1)
return 0;
int64_t var_18_1 = 0;
return strlen(arg1);
}
int64_t* cstrToNimstr(int64_t* arg1, char* arg2)
{
int64_t var_28;
nimZeroMem(&var_28, 0x10);
int64_t var_38;
nimZeroMem(&var_38, 0x10);
int64_t var_18;
int64_t var_10;
int64_t var_48;
int64_t var_40;
if (arg2)
{
toNimStr(&var_48, arg2, nimCStrLen(arg2));
var_38 = var_48;
var_18 = var_38;
var_10 = var_40;
}
else
{
toNimStr(&var_48, arg2, 0);
var_28 = var_48;
var_18 = var_28;
var_10 = var_40;
}
*arg1 = var_18;
arg1[1] = var_10;
return arg1;
}
int64_t getCurrentException()
{
char const* const var_40 = "getCurrentException";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t result = 0;
int64_t var_38_1 = 0xe3;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\typedthreads.nim";
eqcopy___stdZtypedthreads_u187(&result,
*__emutls_get_address(&__emutls_v.currException__system_u4105), 0);
popFrame();
return result;
}
uint64_t isObjDisplayCheck(void* arg1, int16_t arg2, int32_t arg3)
{
char const* const var_40 = "isObjDisplayCheck";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x10a;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arc.nim";
char var_9 = 0;
int16_t rax_2;
rax_2 = arg2 <= *(arg1 + 0x12);
char var_9_1 = rax_2;
if (var_9_1 == 1)
{
int32_t rax_9;
rax_9 = arg3 == *((arg2 << 2) + *(arg1 + 0x18));
var_9_1 = rax_9;
}
popFrame();
return var_9_1;
}
uint64_t* dollar___system_u4269(uint64_t* arg1, int64_t* arg2)
{
int64_t rax = *arg2;
int64_t rdx = arg2[1];
int64_t var_78 = 0;
int64_t var_70 = 0;
uint64_t var_98;
rawNewString(&var_98, 0x7d0);
uint64_t var_68 = var_98;
int64_t var_30 = 0;
int64_t var_38 = 0;
for (int64_t i = 0; i <= rax - 1; i += 1)
{
if (*(i * 0x18 + rdx + 0x10) == -0xa)
{
prepareAdd(&var_68, 0x11);
var_98 = 0x11;
void* const var_90_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_129;
appendString(&var_68, &var_98);
}
else if (*(i * 0x18 + rdx + 0x10) != -0x64)
{
uint64_t rax_22 = var_68;
add__system_u3639(&var_68, *(i * 0x18 + rdx + 0x18));
if (*(i * 0x18 + rdx + 0x10) > 0)
{
prepareAdd(&var_68, 1);
var_98 = 1;
void* const var_90_3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_114;
appendString(&var_68, &var_98);
addInt__stdZprivateZdigitsutils_u204(&var_68, *(i * 0x18 + rdx + 0x10));
prepareAdd(&var_68, 1);
var_98 = 1;
void* const var_90_4 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_122;
appendString(&var_68, &var_98);
}
int64_t var_50_1 = 0;
int64_t var_58_1 = 0;
int64_t rax_44 = 0x19 - (var_68 - rax_22);
if (rax_44 <= 0)
rax_44 = 1;
for (int64_t j = 1; j <= rax_44; j += 1)
{
int64_t j_1 = j;
nimAddCharV1(&var_68, 0x20);
}
add__system_u3639(&var_68, *(i * 0x18 + rdx + 8));
prepareAdd(&var_68, 1);
var_98 = 1;
void* const var_90_5 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_124;
appendString(&var_68, &var_98);
}
else
{
prepareAdd(&var_68, 3);
var_98 = 3;
void* const var_90_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_131;
appendString(&var_68, &var_98);
}
}
*arg1 = var_68;
int64_t var_90;
arg1[1] = var_90;
return arg1;
}
int64_t* reportUnhandledErrorAux__system_u4443(void* arg1)
{
uint64_t var_58;
rawNewString(&var_58, 0x7d0);
uint64_t var_28 = var_58;
if (*(arg1 + 0x28))
{
int64_t rdx_1 = *(arg1 + 0x30);
var_58 = *(arg1 + 0x28);
int64_t var_50 = rdx_1;
uint64_t var_48;
dollar___system_u4269(&var_48, &var_58);
prepareAdd(&var_28, var_48);
var_58 = var_48;
int64_t* var_40;
int64_t* var_50_1 = var_40;
appendString(&var_28, &var_58);
if (var_40 && !(0x4000000000000000 & *var_40))
deallocShared(var_40);
}
else
rawWriteStackTrace__system_u4426(&var_28);
prepareAdd(&var_28, 0x1c);
var_58 = 0x1c;
void* const var_50_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_137;
appendString(&var_28, &var_58);
prepareAdd(&var_28, *(arg1 + 0x18));
int64_t rdx_9 = *(arg1 + 0x20);
var_58 = *(arg1 + 0x18);
int64_t var_50_3 = rdx_9;
appendString(&var_28, &var_58);
prepareAdd(&var_28, 2);
var_58 = 2;
void* const var_50_4 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_139;
appendString(&var_28, &var_58);
uint64_t var_38 = 0;
int64_t var_30 = 0;
cstrToNimstr(&var_38, *(arg1 + 0x10));
prepareAdd(&var_28, var_38);
var_58 = var_38;
int64_t var_50_5 = var_30;
appendString(&var_28, &var_58);
prepareAdd(&var_28, 2);
var_58 = 2;
void* const var_50_6 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_141;
appendString(&var_28, &var_58);
int64_t* result_1;
if (!onUnhandledException__system_u4442)
{
var_58 = var_28;
int64_t* result_3 = result_1;
showErrorMessage2__system_u4085(&var_58);
}
else
{
int64_t onUnhandledException__system_u4442_1 = onUnhandledException__system_u4442;
var_58 = var_28;
int64_t* result_2 = result_1;
onUnhandledException__system_u4442_1(&var_58);
}
int64_t* result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return deallocShared(result_1);
}
return result;
}
int64_t* reportUnhandledError__system_u4454(void* arg1)
{
if (unhandledExceptionHook__system_u3638)
unhandledExceptionHook__system_u3638(arg1);
return reportUnhandledErrorAux__system_u4443(arg1);
}
int64_t eqdestroy___stdZtypedthreads_u184(void** arg1)
{
char var_9 = 0;
char result = nimDecRefIsLastCyclicDyn(arg1) ^ 1;
if (result)
return result;
return nimDestroyAndDispose(arg1);
}
int64_t* raiseDefect()
{
char const* const var_40 = "raiseDefect";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_10 = 0;
int64_t var_38_1 = 0x90b;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t* rax = getCurrentException();
int64_t var_38_2 = 0x90c;
if (rax && isObjDisplayCheck(*rax, 2, 0x783b6000) == 1)
{
int64_t var_38_3 = 0x90d;
reportUnhandledError__system_u4454(rax);
int64_t var_38_4 = 0x90e;
exit(1);
/* no return */
}
int64_t var_38_5 = 0xe3;
char const* const var_30_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\std\typedthreads.nim";
eqdestroy___stdZtypedthreads_u184(rax);
return popFrame();
}
int64_t popCurrentException()
{
int64_t* rax = __emutls_get_address(&__emutls_v.currException__system_u4105);
return eqcopy___stdZtypedthreads_u187(rax, *(*rax + 0x38), 0);
}
int32_t rawWriteString(FILE* arg1, int64_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
uint64_t var_10_1 = fwrite(arg2, 1, arg3, arg1);
int32_t var_14 = 0;
int32_t result = fflush(arg1);
int32_t result_1 = result;
return result;
}
int64_t writeToStdErr__system_u4072(int64_t arg1, uint64_t arg2)
{
return rawWriteString(__acrt_iob_func(2), arg1, arg2);
}
uint32_t showErrorMessage__system_u4077(char* arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
char var_9 = 1;
uint32_t result;
if (errorMessageWriter__system_u4067)
{
int64_t var_28 = 0;
int64_t* var_20_1 = nullptr;
cstrToNimstr(&var_28, arg1);
int64_t errorMessageWriter__system_u4067_1 = errorMessageWriter__system_u4067;
int64_t var_38 = var_28;
int64_t* var_30_1 = var_20_1;
errorMessageWriter__system_u4067_1(&var_38);
var_9 = 0;
if (var_20_1 && !(0x4000000000000000 & *var_20_1))
deallocShared(var_20_1);
if (*rax)
{
*rax = 0;
raiseDefect();
popCurrentException();
}
result = *rax;
}
if (!errorMessageWriter__system_u4067 || !result)
{
result = var_9 ^ 1;
if (!result)
return writeToStdErr__system_u4072(arg1, arg2);
}
return result;
}
int64_t showErrorMessage2__system_u4085(int64_t* arg1)
{
uint64_t rax = *arg1;
int64_t rdx = arg1[1];
uint64_t var_38 = rax;
int64_t var_30 = rdx;
return showErrorMessage__system_u4077(nimToCStringConv(&var_38), rax);
}
uint64_t writeStackTrace__system_u2672()
{
char* rax = nimErrorFlag();
uint64_t var_28 = 0;
int64_t var_20 = 0;
var_28 = 0;
void* const result_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_2;
rawWriteStackTrace__system_u4426(&var_28);
uint64_t var_38 = var_28;
void* const result_2 = result_1;
showErrorMessage2__system_u4085(&var_38);
uint64_t result = *rax;
if (!result)
{
result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return deallocShared(result_1);
}
}
return result;
}
uint32_t callDepthLimitReached__system_u4678()
{
char* rax = nimErrorFlag();
uint64_t var_38;
__builtin_memset(&var_38, 0, 0x20);
writeStackTrace__system_u2672();
uint64_t var_48 = 0;
int64_t var_40 = 0;
dollar___systemZdollars_u14(&var_38, 0x7d0);
uint32_t result = *rax;
if (result)
return result;
uint64_t var_58;
rawNewString(&var_58, var_38 + 0xa7);
var_48 = var_58;
var_58 = 0x32;
void* const var_50_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_143;
appendString(&var_48, &var_58);
var_58 = var_38;
int64_t var_30;
int64_t var_50_2 = var_30;
appendString(&var_48, &var_58);
var_58 = 0x75;
void* const var_50_3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_145;
appendString(&var_48, &var_58);
var_58 = var_48;
int64_t var_50;
int64_t var_50_4 = var_50;
showErrorMessage2__system_u4085(&var_58);
exit(1);
/* no return */
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
uint64_t percentpercent___system_u873(int64_t arg1, int64_t arg2)
{
void* const var_40 = &data_14002186e;
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x18d;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\arithmetics.nim";
int64_t var_38_2 = 0x191;
popFrame();
return COMBINE(0, arg1) % arg2;
}
void procAddrError(char* arg1) __noreturn
{
rawWrite(__acrt_iob_func(2), "could not import: ");
rawWrite(__acrt_iob_func(2), arg1);
rawWrite(__acrt_iob_func(2), "\n");
exit(1);
/* no return */
}
int64_t nimGetProcAddr(HMODULE arg1, PSTR arg2)
{
int64_t result = GetProcAddress(arg1, arg2);
if (!result)
{
char procName[0x60];
nimZeroMem(&procName, 0xfa);
procName[0] = 0x5f;
int64_t i;
for (i = 1; i <= 0xf4; i += 1)
{
if (!arg2[i - 1])
break;
procName[i] = arg2[i - 1];
}
procName[i] = 0x40;
int64_t var_30_1 = 0;
int64_t var_20_1 = 0;
while (true)
{
if (var_20_1 > 0x32)
{
procAddrError(arg2);
/* no return */
}
int64_t i_1 = var_20_1 << 2;
if (i_1 + 0x63 > 0xc6)
i += 3;
else if (i_1 + 9 > 0x12)
i += 2;
else
i += 1;
procName[i + 1] = 0;
do
{
int64_t var_38_1 = 0;
procName[i] = percentpercent___system_u873(i_1, 0xa) + 0x30;
i -= 1;
i_1 s/= 0xa;
} while (i_1);
result = GetProcAddress(arg1, &procName);
if (result)
break;
var_20_1 += 1;
}
}
return result;
}
int64_t* sysFatal__system_u4896(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "sysFatal";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__lVI5mUyBp9bAT9cco7UvZP8Q_;
rax_1[2] = "FieldDefect";
int64_t var_58_1 = 0x35;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58_2 = 0x69e;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
int64_t var_58_3 = 0x35;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_98 = 0x35;
raiseExceptionEx(rax_1, "FieldDefect");
return popFrame();
}
int64_t* raiseFieldErrorStr(int64_t* arg1, int64_t* arg2)
{
uint64_t rcx = *arg1;
int64_t rbx_1 = arg1[1];
uint64_t rax = *arg2;
int64_t rdx = arg2[1];
uint64_t var_38 = 0;
int64_t var_30;
__builtin_memset(&var_30, 0, 0x18);
uint64_t var_68;
rawNewString(&var_68, rax + rcx + 1);
var_38 = var_68;
var_68 = rcx;
int64_t var_60 = rbx_1;
appendString(&var_38, &var_68);
var_68 = rax;
int64_t var_60_1 = rdx;
appendString(&var_38, &var_68);
var_68 = 1;
void* const var_60_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_147;
appendString(&var_38, &var_68);
var_68 = var_38;
int64_t* result_1;
int64_t* result_2 = result_1;
sysFatal__system_u4896(&var_68);
int64_t* result = result_1;
if (result)
{
result = 0x4000000000000000 & *result_1;
if (!result)
return deallocShared(result_1);
}
return result;
}
int64_t* reset__stdZexitprocs_u58(char* arg1)
{
char const* const var_30 = "reset";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
int64_t var_28_1 = 0x3aa;
char const* const var_20_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
eqdestroy___stdZexitprocs_u94(arg1);
int64_t var_28_2 = 0x3ab;
eqwasMoved___stdZexitprocs_u91(arg1);
return popFrame();
}
int64_t* shrink__stdZexitprocs_u38(int64_t* arg1, int64_t arg2)
{
int64_t var_28_1;
__builtin_memset(&var_28_1, 0, 0x18);
int64_t rax_1 = *arg1;
char rdx = 0;
if (rax_1 - 1)
rdx = 1;
if (rdx & 1)
return raiseOverflow();
for (uint64_t i = rax_1 - 1; arg2 <= i; i -= 1)
{
if (i < 0 || i >= *arg1)
return raiseIndexError2(i, *arg1 - 1);
reset__stdZexitprocs_u58(i * 0x18 + arg1[1] + 8);
char rdx_3 = 0;
if (i - 1)
rdx_3 = 1;
if (rdx_3 & 1)
return raiseOverflow();
}
*arg1 = arg2;
return arg1;
}
int64_t* setLen__stdZexitprocs_u31(int64_t* arg1, int64_t* arg2)
{
if (arg2 < *arg1)
return shrink__stdZexitprocs_u38(arg1, arg2);
int64_t* result_2 = *arg1;
int64_t* result = arg2;
if (result > result_2)
{
char var_9_1 = 0;
int64_t rax_8;
rax_8 = !arg1[1];
char var_9_2 = rax_8;
if (!var_9_2)
{
int64_t rax_11;
rax_11 = arg2 > (-0x4000000000000001 & *arg1[1]);
var_9_2 = rax_11;
}
if (var_9_2 == 1)
{
char rdx_2 = 0;
if (arg2 + -(result_2))
rdx_2 = 1;
if (rdx_2 & 1)
return raiseOverflow();
int64_t var_40_1 = 0;
arg1[1] = prepareSeqAddUninit(result_2, arg1[1], arg2 - result_2, 0x18, 8);
}
*arg1 = arg2;
int64_t var_48_1 = 0;
int64_t var_50_1 = 0;
int64_t* result_1 = result_2;
while (true)
{
result = result_1;
if (result >= arg2)
break;
char var_78;
nimZeroMem(&var_78, 0x18);
nimZeroMem(&var_78, 0x18);
var_78 = 0;
int64_t var_70;
nimZeroMem(&var_70, 0x10);
void* rax_31 = result_1 * 0x18 + arg1[1];
*(rax_31 + 8) = var_78;
*(rax_31 + 0x10) = var_70;
int64_t var_68;
*(rax_31 + 0x18) = var_68;
char rdx_10 = 0;
if (result_1 + 1)
rdx_10 = 1;
if (rdx_10 & 1)
return raiseOverflow();
result_1 += 1;
}
}
return result;
}
int64_t* add__stdZexitprocs_u190(int64_t* arg1, int64_t* arg2)
{
int64_t rax_1 = *arg1;
char var_19 = 0;
int64_t rax_5;
rax_5 = !arg1[1];
char var_19_1 = rax_5;
if (!var_19_1)
{
char rdx = 0;
if (rax_1 + 1)
rdx = 1;
if (rdx & 1)
return raiseOverflow();
int64_t rax_12;
rax_12 = (*arg1[1] & 0xbfffffffffffffff) < rax_1 + 1;
var_19_1 = rax_12;
}
if (var_19_1 == 1)
{
int64_t var_40_1 = 0;
arg1[1] = prepareSeqAddUninit(rax_1, arg1[1], 1, 0x18, 8);
}
char rdx_5 = 0;
if (rax_1 + 1)
rdx_5 = 1;
if (rdx_5 & 1)
return raiseOverflow();
*arg1 = rax_1 + 1;
int64_t* result = rax_1 * 0x18 + arg1[1];
result[1] = *arg2;
result[2] = arg2[1];
result[3] = arg2[2];
return result;
}
int64_t* eqdup___system_u4017(int64_t* arg1, char arg2, int64_t* arg3)
{
int64_t rcx = *arg1;
int64_t* result = arg1[1];
nimZeroMem(arg3, 0x10);
int64_t var_20 = arg3[1];
arg3[1] = result;
*arg3 = rcx;
if (!result)
return result;
return nimIncRefCyclic(result);
}
void signalHandler(int32_t arg1) __noreturn
{
uint64_t var_18 = 0;
int64_t var_10 = 0;
uint64_t var_28;
rawNewString(&var_28, 0x7d0);
var_18 = var_28;
rawWriteStackTrace__system_u4426(&var_18);
if (arg1 == 2)
{
prepareAdd(&var_18, 0x1f);
var_28 = 0x1f;
void* const var_20_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_155;
appendString(&var_18, &var_28);
}
else if (arg1 == 0xb)
{
prepareAdd(&var_18, 0x3d);
var_28 = 0x3d;
void* const var_20_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_157;
appendString(&var_18, &var_28);
}
else if (arg1 == 0x16)
{
prepareAdd(&var_18, 0x1f);
var_28 = 0x1f;
void* const var_20_3 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_159;
appendString(&var_18, &var_28);
}
else if (arg1 == 8)
{
prepareAdd(&var_18, 0x1a);
var_28 = 0x1a;
void* const var_20_4 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_161;
appendString(&var_18, &var_28);
}
else if (arg1 != 4)
{
prepareAdd(&var_18, 0xf);
var_28 = 0xf;
void* const var_20_6 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_167;
appendString(&var_18, &var_28);
}
else
{
prepareAdd(&var_18, 0x1b);
var_28 = 0x1b;
void* const var_20_5 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_163;
appendString(&var_18, &var_28);
}
var_28 = var_18;
int64_t var_20;
int64_t var_20_7 = var_20;
showErrorMessage2__system_u4085(&var_28);
exit(1);
/* no return */
}
_crt_signal_t registerSignalHandler__system_u4698()
{
int64_t var_10 = 0;
_crt_signal_t var_10_1 = signal(2, signalHandler);
int64_t var_18 = 0;
_crt_signal_t var_18_1 = signal(0xb, signalHandler);
int64_t var_20 = 0;
_crt_signal_t var_20_1 = signal(0x16, signalHandler);
int64_t var_28 = 0;
_crt_signal_t var_28_1 = signal(8, signalHandler);
int64_t var_30 = 0;
_crt_signal_t result = signal(4, signalHandler);
_crt_signal_t result_1 = result;
return result;
}
int64_t* colonanonymous___system_u9048()
{
char const* const var_30 = ":anonymous";
char const* const var_20 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_28 = 0;
int16_t var_18 = 0;
void* var_38;
nimFrame(&var_38);
DeleteCriticalSection(&echoLock__system_u9047);
return popFrame();
}
int64_t* mnewString(int64_t* arg1, int64_t arg2)
{
int64_t var_38;
nimZeroMem(&var_38, 0x10);
void* var_30;
if (arg2 > 0)
{
int64_t var_10_1 = 0;
char rdx = 0;
if (arg2 + 1)
rdx = 1;
if (!(rdx & 1))
{
char rdx_1 = 0;
if (arg2 + 1 + 8)
rdx_1 = 1;
if (rdx_1 & 1)
raiseOverflow();
else if (arg2 + 9 >= 0)
{
int64_t var_18_1 = 0;
void* rax_12 = allocShared0Impl__system_u1762(arg2 + 9);
*rax_12 = arg2;
var_38 = arg2;
var_30 = rax_12;
}
else
raiseRangeErrorI(arg2 + 9, 0, 0x7fffffffffffffff);
}
else
raiseOverflow();
}
else
{
var_38 = 0;
var_30 = nullptr;
}
*arg1 = var_38;
arg1[1] = var_30;
return arg1;
}
int64_t* nimPrepareStrMutationImpl__system_u2410(int64_t* arg1)
{
int64_t rax_1 = arg1[1];
int64_t rax_3 = *arg1;
char rdx = 0;
if (rax_3 + 1)
rdx = 1;
if (rdx & 1)
return raiseOverflow();
char rdx_1 = 0;
if (rax_3 + 1 + 8)
rdx_1 = 1;
if (rdx_1 & 1)
return raiseOverflow();
if (rax_3 + 9 < 0)
return raiseRangeErrorI(rax_3 + 9, 0, 0x7fffffffffffffff);
int64_t var_18_1 = 0;
arg1[1] = allocSharedImpl(rax_3 + 9);
*arg1[1] = *arg1;
int64_t rax_20 = *arg1;
char rdx_5 = 0;
if (rax_20 + 1)
rdx_5 = 1;
if (rdx_5 & 1)
return raiseOverflow();
if (rax_20 + 1 >= 0)
return copyMem__system_u1731(arg1[1] + 8, rax_1 + 8, rax_20 + 1);
return raiseRangeErrorI(rax_20 + 1, 0, 0x7fffffffffffffff);
}
int64_t* sysFatal__system_u5276(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "sysFatal";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__k6VacnfEHcFyOMal5EruvA_;
rax_1[2] = "DivByZeroDefect";
int64_t var_58_1 = 0x35;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_58_2 = 0x69e;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
int64_t var_58_3 = 0x35;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\fatal.nim";
int64_t var_98 = 0x35;
raiseExceptionEx(rax_1, "DivByZeroDefect");
return popFrame();
}
int64_t* raiseDivByZero()
{
int64_t var_18 = 0x10;
void* const var_10 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_174;
return sysFatal__system_u5276(&var_18);
}
int64_t* raiseRangeErrorU()
{
int64_t rcx;
int64_t arg_8 = rcx;
int64_t rdx;
int64_t arg_10 = rdx;
int64_t r8;
int64_t arg_18 = r8;
int64_t var_18 = 0x12;
void* const var_10 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_13;
return sysFatal__system_u4979(&var_18);
}
int64_t* raiseEIO__system_u9050(int64_t* arg1)
{
int64_t rax = *arg1;
int64_t rdx = arg1[1];
char const* const var_60 = "raiseEIO";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
int64_t var_38 = 0;
int64_t var_30 = 0;
int64_t var_20 = 0;
void*** rax_1 = nimNewObj(0x40, 8);
*rax_1 = &NTIv2__txzrG6zQAbHR6Hap9b2RC7g_;
rax_1[2] = "IOError";
int64_t var_58_1 = 0xb82;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_58_2 = 0x69e;
int64_t var_88 = rax;
int64_t var_80 = rdx;
eqdup___system_u2662(&var_38, &var_88);
rax_1[3] = var_38;
rax_1[4] = var_30;
rax_1[1] = 0;
int64_t var_58_3 = 0xb82;
int64_t var_98 = 0xb82;
raiseExceptionEx(rax_1, "IOError");
return popFrame();
}
int64_t* writeWindows__system_u9129(FILE* arg1, int64_t* arg2, char arg3)
{
int64_t rax = *arg2;
int64_t rdx = arg2[1];
char const* const var_60 = "writeWindows";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax_2 = nimErrorFlag();
int64_t var_58_1 = 0xba0;
int32_t var_2c = 0;
int64_t var_98 = rax;
int64_t var_90 = rdx;
int64_t var_20 = fprintf(arg1, "%s", nimToCStringConv(&var_98));
int64_t var_58_2 = 0xba1;
while (var_20 < rax)
{
int64_t var_58_3 = 0xba2;
if (var_20 < 0 || var_20 >= rax)
{
raiseIndexError2(var_20, rax - 1);
break;
}
if (!*(var_20 + rdx + 8))
{
int64_t var_58_4 = 0xba3;
int64_t var_58_5 = 0xba4;
if (fputc(0, arg1))
{
int64_t var_58_6 = 0xba5;
if (arg3 == 1)
{
var_98 = 0x1b;
void* const var_90_1 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_177;
raiseEIO__system_u9050(&var_98);
}
if (arg3 != 1 || !*rax_2)
int64_t var_58_7 = 0xba6;
break;
}
int64_t var_58_8 = 0xba7;
char rdx_6 = 0;
if (var_20 + 1)
rdx_6 = 1;
if (rdx_6 & 1)
{
raiseOverflow();
break;
}
var_20 += 1;
continue;
}
int64_t var_58_9 = 0xba9;
if (var_20 < 0 || var_20 >= rax)
{
raiseIndexError2(var_20, rax - 1);
break;
}
int32_t rax_35 = fprintf(arg1, "%s", var_20 + rdx + 8);
int64_t var_58_10 = 0xbaa;
if (rax_35 <= 0)
{
int64_t var_58_11 = 0xbab;
if (arg3 == 1)
{
var_98 = 0x1b;
void* const var_90_2 = &TM__Q5wkpxktOdTGvlSRo9bzt9aw_177;
raiseEIO__system_u9050(&var_98);
}
if (arg3 != 1 || !*rax_2)
int64_t var_58_12 = 0xbac;
break;
}
int64_t var_58_13 = 0xbad;
int64_t rax_42 = rax_35;
char rcx_9 = 0;
if (rax_42 + var_20)
rcx_9 = 1;
if (rcx_9 & 1)
{
raiseOverflow();
break;
}
var_20 += rax_42;
continue;
}
return popFrame();
}
int64_t* echoBinSafe(int64_t arg1, int64_t arg2)
{
char const* const var_60 = "echoBinSafe";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_58_1 = 0xb96;
EnterCriticalSection(&echoLock__system_u9047);
int64_t var_20 = 0;
int64_t var_58_2 = 0x12;
char const* const var_50_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators.nim";
uint64_t var_10 = 0;
int64_t var_58_3 = 0x13;
while (true)
{
if (var_10 >= arg2)
{
int64_t var_58_7 = 0xbb2;
char const* const var_50_4 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
int64_t var_28_1 = 0;
uint64_t var_28_2 = fwrite(&data_140021159, 1, 1, __acrt_iob_func(1));
int64_t var_58_8 = 0xbb3;
int32_t var_2c_1 = 0;
int32_t var_2c_2 = fflush(__acrt_iob_func(1));
int64_t var_58_9 = 0xbb7;
LeaveCriticalSection(&echoLock__system_u9047);
break;
}
int64_t var_58_4 = 0xb97;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
if (var_10 < 0 || var_10 >= arg2)
{
raiseIndexError2(var_10, arg2 - 1);
break;
}
int64_t* rax_8 = arg1 + (var_10 << 4);
int64_t var_58_5 = 0xbae;
FILE* rax_9 = __acrt_iob_func(1);
int64_t rdx_2 = rax_8[1];
int64_t var_78 = *rax_8;
int64_t var_70_1 = rdx_2;
writeWindows__system_u9129(rax_9, &var_78, 0);
if (*rax)
break;
int64_t var_58_6 = 0xd;
char const* const var_50_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators.nim";
var_10 += 1;
continue;
}
return popFrame();
}
int64_t nimTestErrorFlag()
{
char var_19 = 0;
char var_19_1 = *__emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
if (var_19_1 == 1)
{
int64_t rax_5;
rax_5 = *__emutls_get_address(&__emutls_v.currException__system_u4105);
var_19_1 = rax_5;
}
char result = var_19_1 ^ 1;
if (result)
return result;
int64_t* rax_7 = __emutls_get_address(&__emutls_v.currException__system_u4105);
reportUnhandledError__system_u4454(*rax_7);
eqsink___stdZtypedthreads_u195(rax_7, 0);
exit(1);
/* no return */
}
int64_t atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatssystemdotnim_Init000()
{
registerSignalHandler__system_u4698();
InitializeCriticalSection(&echoLock__system_u9047);
atexit(colonanonymous___system_u9048);
return nimTestErrorFlag();
}
int64_t floorMod__pureZtimes_u1259(int64_t arg1, int64_t arg2) __pure
{
int64_t result = arg1 % arg2;
char var_11 = 0;
char var_12 = 0;
char var_12_1 = result > 0;
if (var_12_1 == 1)
var_12_1 = arg2 >> 0x3f;
char var_11_1 = var_12_1;
if (!var_11_1)
{
char var_13_1 = 0;
uint8_t var_13_2 = result >> 0x3f;
if (var_13_2 == 1)
var_13_2 = arg2 > 0;
var_11_1 = var_13_2;
}
if (var_11_1 != 1)
return result;
return result + arg2;
}
int64_t floorDiv__pureZtimes_u317(int64_t arg1, int64_t arg2) __pure
{
int64_t result = arg1 / arg2;
int64_t temp1 = arg1 % arg2;
char var_11 = 0;
char var_12 = 0;
char var_12_1 = temp1 > 0;
if (var_12_1 == 1)
var_12_1 = arg2 >> 0x3f;
uint8_t var_11_1 = var_12_1;
if (!var_11_1)
{
char var_13_1 = 0;
uint8_t var_13_2 = temp1 >> 0x3f;
if (var_13_2 == 1)
var_13_2 = arg2 > 0;
var_11_1 = var_13_2;
}
if (var_11_1 != 1)
return result;
return result - 1;
}
void* const nimToCStringConv(int64_t* arg1)
{
if (*arg1)
return arg1[1] + 8;
return &_.rdata;
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
HMODULE loadLib__pureZdynlib_u3(int64_t* arg1)
{
int64_t rcx = *arg1;
int64_t rbx_1 = arg1[1];
char rdx;
char arg_10 = rdx;
char const* const var_50 = "loadLib";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\dynlib.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0xbb;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\dynlib.nim";
int64_t var_20 = 0;
int64_t var_78 = rcx;
int64_t var_70 = rbx_1;
HMODULE result = LoadLibraryA(nimToCStringConv(&var_78));
popFrame();
return result;
}
int64_t symAddr__pureZdynlib_u74(HMODULE arg1, PSTR arg2)
{
char const* const var_40 = "symAddr";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\dynlib.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xc1;
int64_t var_10 = 0;
int64_t result = GetProcAddress(arg1, arg2);
popFrame();
return result;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
uint64_t rdFileTime__windowsZwinlean_u282(int64_t arg1)
{
char const* const var_40 = "rdFileTime";
char const* const var_30 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\windows\winlean.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0x153;
char const* const var_30_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\windows\winlean.nim";
popFrame();
return *arg1[4] << 0x20 | arg1;
}
int64_t* atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_Init000()
{
char const* const var_50 = "winlean";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\windows\winlean.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
char* rax = nimErrorFlag();
int64_t var_48_1 = 0x345;
int64_t var_18 = 0;
int64_t var_68 = 0xa;
void* const var_60 = &TM__k6kyf4Co79a84IkK9blFuQVA_2;
HMODULE rax_1 = loadLib__pureZdynlib_u3(&var_68);
if (!*rax)
{
ws2__windowsZwinlean_u797 = rax_1;
int64_t var_48_2 = 0x346;
if (ws2__windowsZwinlean_u797)
{
int64_t var_48_3 = 0x347;
int64_t var_20_1 = 0;
int64_t rax_8 = symAddr__pureZdynlib_u74(ws2__windowsZwinlean_u797, "inet_ntop");
if (!*rax)
_.bss = rax_8;
}
}
nimTestErrorFlag();
return popFrame();
}
int64_t atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_DatInit000()
{
int64_t var_18 = 8;
void* const var_10 = &TM__k6kyf4Co79a84IkK9blFuQVA_6;
TM__k6kyf4Co79a84IkK9blFuQVA_4 = nimLoadLibrary(&var_18);
if (TM__k6kyf4Co79a84IkK9blFuQVA_4)
{
int64_t result = nimGetProcAddr(TM__k6kyf4Co79a84IkK9blFuQVA_4, "GetSystemTimeAsFileTime");
Dl_1426063656_ = result;
return result;
}
var_18 = 8;
void* const var_10_1 = &TM__k6kyf4Co79a84IkK9blFuQVA_8;
nimLoadLibraryError(&var_18);
/* no return */
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t toUnix__pureZtimes_u1230(int64_t* arg1)
{
int64_t result = *arg1;
int64_t var_60 = arg1[1];
char const* const var_50 = "toUnix";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\times.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_48_1 = 0x3a5;
char const* const var_40_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\times.nim";
popFrame();
return result;
}
int64_t nimSetMem__systemZmemory_u7(int64_t arg1, int32_t arg2, uint64_t arg3)
{
int64_t var_10 = 0;
int64_t result = memset(arg1, arg2, arg3);
int64_t result_1 = result;
return result;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
uint64_t nimZeroMem(int64_t arg1, uint64_t arg2)
{
char* rax = nimErrorFlag();
nimSetMem__systemZmemory_u7(arg1, 0, arg2);
return *rax;
}
int64_t* initTime__pureZtimes_u1200(int64_t* arg1, int64_t arg2, int64_t arg3)
{
char const* const var_50 = "initTime";
char const* const var_40 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\times.nim";
int64_t var_48 = 0;
int16_t var_38 = 0;
void* var_58;
nimFrame(&var_58);
int64_t var_10 = 0;
int64_t var_18 = 0;
int64_t var_48_1 = 0x395;
popFrame();
*arg1 = arg2;
arg1[1] = arg3;
return arg1;
}
int64_t* fromWinTime__pureZtimes_u1250(int64_t* arg1, int64_t arg2)
{
char const* const var_70 = "fromWinTime";
char const* const var_60 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\times.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
char* rax = nimErrorFlag();
int64_t var_38;
nimZeroMem(&var_38, 0x10);
int64_t var_68_1 = 0x3c6;
int64_t var_18 = 0;
int64_t rax_2 = floorMod__pureZtimes_u1259(arg2, 0x989680);
int64_t var_30;
if (!*rax)
{
char rdx = 0;
uint64_t rax_7 = rax_2 * 0x64;
bool o_1 = /* bool o_1 = unimplemented {imul rax, rax, 0x64} */;
if (o_1)
rdx = 1;
if (!(rdx & 1))
{
int64_t var_68_2 = 0x3c7;
char rcx_4 = 0;
if (arg2 - 0x19db1ded53e8000)
rcx_4 = 1;
if (!(rcx_4 & 1))
{
int64_t rax_16 = floorDiv__pureZtimes_u317(arg2 - 0x19db1ded53e8000, 0x989680);
if (!*rax)
{
int64_t var_68_3 = 0x3c8;
if (rax_7 < 0 || rax_7 > 0x3b9ac9ff)
raiseRangeErrorI(rax_7, 0, 0x3b9ac9ff);
else
{
int64_t var_88;
initTime__pureZtimes_u1200(&var_88, rax_16, rax_7);
var_38 = var_88;
int64_t var_80;
var_30 = var_80;
}
}
}
else
raiseOverflow();
}
else
raiseOverflow();
}
popFrame();
*arg1 = var_38;
arg1[1] = var_30;
return arg1;
}
int64_t* getTime__pureZtimes_u1281(int64_t* arg1)
{
char const* const var_60 = "getTime";
char const* const var_50 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\pure\times.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_28;
nimZeroMem(&var_28, 0x10);
int64_t var_58_1 = 0x3e8;
int64_t var_30;
Dl_1426063656_(&var_30);
int64_t var_58_2 = 0x3e9;
int64_t var_18 = 0;
uint64_t rax_2 = rdFileTime__windowsZwinlean_u282(var_30);
int64_t var_20;
if (!*rax)
{
int64_t var_78;
fromWinTime__pureZtimes_u1250(&var_78, rax_2);
var_28 = var_78;
int64_t var_70;
var_20 = var_70;
}
popFrame();
*arg1 = var_28;
arg1[1] = var_20;
return arg1;
}
int64_t nimPrepareStrMutationV2(int64_t* arg1)
{
char var_9 = 0;
int64_t rax_1;
rax_1 = arg1[1];
char var_9_1 = rax_1;
if (var_9_1 == 1)
{
int64_t rax_6;
rax_6 = 0x4000000000000000 & *arg1[1];
var_9_1 = rax_6;
}
char result = var_9_1 ^ 1;
if (result)
return result;
return nimPrepareStrMutationImpl__system_u2410(arg1);
}
int64_t nimFrame(void** arg1)
{
if (*__emutls_get_address(&__emutls_v.framePtr__system_u2692))
*(arg1 + 0x22) = *(*__emutls_get_address(&__emutls_v.framePtr__system_u2692) + 0x22) + 1;
else
*(arg1 + 0x22) = 0;
void** rax_8 = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*arg1 = *rax_8;
*rax_8 = arg1;
int16_t result = *(arg1 + 0x22);
if (result != 0x7d0)
return result;
return callDepthLimitReached__system_u4678();
}
int64_t* popFrame()
{
int64_t* result = __emutls_get_address(&__emutls_v.framePtr__system_u2692);
*result = **result;
return result;
}
int64_t* buildEncodedFlag__crackme_u18(int64_t* arg1)
{
char const* const var_40 = "buildEncodedFlag";
char const* const var_30 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
int64_t var_38_1 = 0xd;
char const* const var_30_1 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_58;
mnewString(&var_58, 0x26);
int64_t var_18 = var_58;
int64_t var_38_2 = 0xe;
void* var_50;
if (var_18 > 0)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 8) = 0x28;
int64_t var_38_3 = 0xf;
if (var_18 > 1)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 9) = 5;
int64_t var_38_4 = 0x10;
if (var_18 > 2)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xa) = 0xc;
int64_t var_38_5 = 0x11;
if (var_18 > 3)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xb) = 0x47;
int64_t var_38_6 = 0x12;
if (var_18 > 4)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xc) = 0x12;
int64_t var_38_7 = 0x13;
if (var_18 > 5)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xd) = 0x4b;
int64_t var_38_8 = 0x14;
if (var_18 > 6)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xe) = 0x15;
int64_t var_38_9 = 0x15;
if (var_18 > 7)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0xf) = 0x5c;
int64_t var_38_10 = 0x16;
if (var_18 > 8)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x10) = 9;
int64_t var_38_11 = 0x17;
if (var_18 > 9)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x11) = 0x12;
int64_t var_38_12 = 0x18;
if (var_18 > 0xa)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x12) = 0x17;
int64_t var_38_13 = 0x19;
if (var_18 > 0xb)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x13) = 0x55;
int64_t var_38_14 = 0x1a;
if (var_18 > 0xc)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x14) = 9;
int64_t var_38_15 = 0x1b;
if (var_18 > 0xd)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x15) = 0x4b;
int64_t var_38_16 = 0x1c;
if (var_18 > 0xe)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x16) = 0x42;
int64_t var_38_17 = 0x1d;
if (var_18 > 0xf)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x17) = 8;
int64_t var_38_18 = 0x1e;
if (var_18 > 0x10)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x18) = 0x55;
int64_t var_38_19 = 0x1f;
if (var_18 > 0x11)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x19) = 0x5a;
int64_t var_38_20 = 0x20;
if (var_18 > 0x12)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1a) = 0x45;
int64_t var_38_21 = 0x21;
if (var_18 > 0x13)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1b) = 0x58;
int64_t var_38_22 = 0x22;
if (var_18 > 0x14)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1c) = 0x44;
int64_t var_38_23 = 0x23;
if (var_18 > 0x15)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1d) = 0x57;
int64_t var_38_24 = 0x24;
if (var_18 > 0x16)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1e) = 0x45;
int64_t var_38_25 = 0x25;
if (var_18 > 0x17)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x1f) = 0x77;
int64_t var_38_26 = 0x26;
if (var_18 > 0x18)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x20) = 0x5d;
int64_t var_38_27 = 0x27;
if (var_18 > 0x19)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x21) = 0x54;
int64_t var_38_28 = 0x28;
if (var_18 > 0x1a)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x22) = 0x44;
int64_t var_38_29 = 0x29;
if (var_18 > 0x1b)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x23) = 0x5c;
int64_t var_38_30 = 0x2a;
if (var_18 > 0x1c)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x24) = 0x45;
int64_t var_38_31 = 0x2b;
if (var_18 > 0x1d)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x25) = 0x13;
int64_t var_38_32 = 0x2c;
if (var_18 > 0x1e)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x26) = 0x59;
int64_t var_38_33 = 0x2d;
if (var_18 > 0x1f)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x27) = 0x5b;
int64_t var_38_34 = 0x2e;
if (var_18 > 0x20)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x28) = 0x47;
int64_t var_38_35 = 0x2f;
if (var_18 > 0x21)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x29) = 0x42;
int64_t var_38_36 = 0x30;
if (var_18 > 0x22)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x2a) = 0x5e;
int64_t var_38_37 = 0x31;
if (var_18 > 0x23)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x2b) = 0x59;
int64_t var_38_38 = 0x32;
if (var_18 > 0x24)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x2c) = 0x16;
int64_t var_38_39 = 0x33;
if (var_18 > 0x25)
{
nimPrepareStrMutationV2(&var_18);
*(var_50 + 0x2d) = 0x5d;
}
else
raiseIndexError2(0x25, var_18 - 1);
}
else
raiseIndexError2(0x24, var_18 - 1);
}
else
raiseIndexError2(0x23, var_18 - 1);
}
else
raiseIndexError2(0x22, var_18 - 1);
}
else
raiseIndexError2(0x21, var_18 - 1);
}
else
raiseIndexError2(0x20, var_18 - 1);
}
else
raiseIndexError2(0x1f, var_18 - 1);
}
else
raiseIndexError2(0x1e, var_18 - 1);
}
else
raiseIndexError2(0x1d, var_18 - 1);
}
else
raiseIndexError2(0x1c, var_18 - 1);
}
else
raiseIndexError2(0x1b, var_18 - 1);
}
else
raiseIndexError2(0x1a, var_18 - 1);
}
else
raiseIndexError2(0x19, var_18 - 1);
}
else
raiseIndexError2(0x18, var_18 - 1);
}
else
raiseIndexError2(0x17, var_18 - 1);
}
else
raiseIndexError2(0x16, var_18 - 1);
}
else
raiseIndexError2(0x15, var_18 - 1);
}
else
raiseIndexError2(0x14, var_18 - 1);
}
else
raiseIndexError2(0x13, var_18 - 1);
}
else
raiseIndexError2(0x12, var_18 - 1);
}
else
raiseIndexError2(0x11, var_18 - 1);
}
else
raiseIndexError2(0x10, var_18 - 1);
}
else
raiseIndexError2(0xf, var_18 - 1);
}
else
raiseIndexError2(0xe, var_18 - 1);
}
else
raiseIndexError2(0xd, var_18 - 1);
}
else
raiseIndexError2(0xc, var_18 - 1);
}
else
raiseIndexError2(0xb, var_18 - 1);
}
else
raiseIndexError2(0xa, var_18 - 1);
}
else
raiseIndexError2(9, var_18 - 1);
}
else
raiseIndexError2(8, var_18 - 1);
}
else
raiseIndexError2(7, var_18 - 1);
}
else
raiseIndexError2(6, var_18 - 1);
}
else
raiseIndexError2(5, var_18 - 1);
}
else
raiseIndexError2(4, var_18 - 1);
}
else
raiseIndexError2(3, var_18 - 1);
}
else
raiseIndexError2(2, var_18 - 1);
}
else
raiseIndexError2(1, var_18 - 1);
}
else
raiseIndexError2(0, var_18 - 1);
popFrame();
*arg1 = var_18;
arg1[1] = var_50;
return arg1;
}
int64_t* xorStrings__crackme_u3(int64_t* arg1, int64_t* arg2, int64_t* arg3)
{
uint64_t rax = *arg2;
int64_t rdx = arg2[1];
int64_t rax_1 = *arg3;
int64_t rdx_1 = arg3[1];
char const* const var_70 = "xorStrings";
char const* const var_60 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_68 = 0;
int16_t var_58 = 0;
void* var_78;
nimFrame(&var_78);
int64_t var_48 = 0;
int64_t var_40 = 0;
int64_t var_68_1 = 6;
if (rax >= 0)
{
int64_t var_b8;
mnewString(&var_b8, rax);
var_48 = var_b8;
int64_t var_b0;
var_40 = var_b0;
int64_t var_28_1 = 0;
int64_t var_30_1 = 0;
int64_t var_68_2 = 0x7e;
char const* const var_60_1 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
int64_t var_68_3 = 7;
char const* const var_60_2 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_68_4 = 0x80;
char const* const var_60_3 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
uint64_t var_20_1 = 0;
int64_t var_68_5 = 0x81;
while (var_20_1 < rax)
{
int64_t var_68_6 = 7;
char const* const var_60_4 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_68_7 = 8;
if (var_20_1 < 0 || var_20_1 >= var_48)
{
raiseIndexError2(var_20_1, var_48 - 1);
break;
}
nimPrepareStrMutationV2(&var_48);
if (var_20_1 < 0 || var_20_1 >= rax)
{
raiseIndexError2(var_20_1, rax - 1);
break;
}
if (!rax_1)
{
raiseDivByZero();
break;
}
int64_t temp1_1 = var_20_1 % rax_1;
if (temp1_1 < 0 || rax_1 <= temp1_1)
{
raiseIndexError2(temp1_1, rax_1 - 1);
break;
}
*(var_20_1 + var_40 + 8) = *(rdx_1 + temp1_1 + 8) ^ *(var_20_1 + rdx + 8);
int64_t var_68_8 = 0x83;
char const* const var_60_5 =
"C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system\iterators_1.nim";
char rdx_13 = 0;
if (var_20_1 + 1)
rdx_13 = 1;
if (rdx_13 & 1)
{
raiseOverflow();
break;
}
var_20_1 += 1;
continue;
}
}
else
raiseRangeErrorI(rax, 0, 0x7fffffffffffffff);
popFrame();
*arg1 = var_48;
arg1[1] = var_40;
return arg1;
}
void* nimErrorFlag()
{
return __emutls_get_address(&__emutls_v.nimInErrorMode__system_u4460);
}
int64_t* main__crackme_u20()
{
char const* const var_60 = "main";
char const* const var_50 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_58 = 0;
int16_t var_48 = 0;
void* var_68;
nimFrame(&var_68);
char* rax = nimErrorFlag();
int64_t var_38;
__builtin_memset(&var_38, 0, 0x20);
int64_t var_58_1 = 0x36;
char const* const var_50_1 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_28;
buildEncodedFlag__crackme_u18(&var_28);
int64_t* var_30;
int64_t* var_20;
if (!*rax)
{
int64_t var_58_2 = 0x37;
int64_t var_98 = var_28;
int64_t* var_90_1 = var_20;
int64_t var_a8 = 0x17;
void* const var_a0_1 = &TM__cGo7QGde1ZstH4i7xlaOag_4;
xorStrings__crackme_u3(&var_38, &var_98, &var_a8);
if (!*rax)
{
int64_t var_58_3 = 0x3a;
int64_t var_78;
getTime__pureZtimes_u1281(&var_78);
if (!*rax)
{
int64_t var_18_1 = 0;
var_98 = var_78;
int64_t var_70;
int64_t var_90_2 = var_70;
int64_t rax_12 = toUnix__pureZtimes_u1230(&var_98);
if (!*rax)
{
if (rax_12)
{
int64_t var_58_5 = 0x3d;
echoBinSafe(&TM__cGo7QGde1ZstH4i7xlaOag_6, 1);
}
else
{
int64_t var_58_4 = 0x3b;
int64_t var_88 = var_38;
int64_t* var_80_1 = var_30;
echoBinSafe(&var_88, 1);
}
}
}
}
}
int64_t var_58_6 = 0x18a;
char const* const var_50_2 = "C:\CTF\nim-2.2.4_x64\nim-2.2.4\lib\system.nim";
if (var_30 && !(0x4000000000000000 & *var_30))
deallocShared(var_30);
if (var_20 && !(0x4000000000000000 & *var_20))
deallocShared(var_20);
return popFrame();
}
int64_t* PreMainInner()
{
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatsexitprocsdotnim_Init000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_Init000();
return atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_Init000();
}
int64_t* PreMain()
{
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatsstdatssynciodotnim_DatInit000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatssystemdotnim_Init000();
atmdotdotatsnimminus2dot2dot4_x64atsnimminus2dot2dot4atslibatswindowsatswinleandotnim_DatInit000();
return PreMainInner();
}
int64_t* NimMainInner()
{
return NimMainModule();
}
int64_t* NimMain()
{
PreMain();
return NimMainInner();
}
int64_t main(int32_t arg1, int64_t arg2, int64_t arg3)
{
__main();
cmdLine = arg2;
_.bss = arg1;
gEnv = arg3;
NimMain();
return _.bss;
}
int64_t* NimMainModule()
{
char const* const var_40 = "crackme";
char const* const var_30 = "C:\CTF\nimcrackme1\crackme.nim";
int64_t var_38 = 0;
int16_t var_28 = 0;
void* var_48;
nimFrame(&var_48);
char* var_10 = nimErrorFlag();
int64_t var_38_1 = 0x3f;
char const* const var_30_1 = "C:\CTF\nimcrackme1\crackme.nim";
main__crackme_u20();
nimTestErrorFlag();
return popFrame();
}
int64_t __do_global_dtors()
{
int64_t i = **&_.data;
while (i)
{
i();
void* _.data_1 = _.data;
i = *(_.data_1 + 8);
_.data = _.data_1 + 8;
}
return i;
}
int64_t __do_global_ctors()
{
int32_t rax_4 = 0;
int32_t rcx;
uint64_t r8_2;
do
{
r8_2 = rax_4 + 1;
rcx = rax_4;
rax_4 = r8_2;
} while (*(&__CTOR_LIST__ + (r8_2 << 3)));
if (rcx)
{
uint64_t rax_1 = rcx;
void* i = &__CTOR_LIST__ + (rax_1 << 3);
do
{
(*i)();
i -= 8;
} while (i != ((rax_1 - (rcx - 1)) << 3) + 0x14001ee08);
}
/* tailcall */
return atexit(__do_global_dtors);
}
int64_t __main()
{
int32_t _.bss_1 = _.bss;
if (_.bss_1)
return _.bss_1;
_.bss = 1;
/* tailcall */
return __do_global_ctors();
}
int64_t _setargv() __pure
{
return 0;
}
int64_t _TLS_Entry_1(int64_t arg1, int32_t arg2)
{
if (arg2 != 3 && arg2)
return 1;
__mingw_TLScallback(arg1, arg2);
return 1;
}
int64_t _TLS_Entry_0(int64_t arg1, int32_t arg2)
{
if (_.data != 2)
_.data = 2;
if (arg2 != 2 && arg2 == 1)
__mingw_TLScallback(arg1, arg2);
return 1;
}
int64_t __tlregdtor() __pure
{
return 0;
}
int64_t _matherr(int32_t* arg1)
{
char const* const rbx;
if (*arg1 > 6)
rbx = "Unknown error";
else
switch (*arg1)
{
case 0:
{
rbx = "Unknown error";
break;
}
case 1:
{
rbx = "Argument domain error (DOMAIN)";
break;
}
case 2:
{
rbx = "Argument singularity (SIGN)";
break;
}
case 3:
{
rbx = "Overflow range error (OVERFLOW)";
break;
}
case 4:
{
rbx = "The result is too small to be represented (UNDERFLOW)";
break;
}
case 5:
{
rbx = "Total loss of significance (TLOSS)";
break;
}
case 6:
{
rbx = "Partial loss of significance (PLOSS)";
break;
}
}
*(arg1 + 8);
uint64_t var_58 = *(arg1 + 0x20);
uint64_t var_60 = *(arg1 + 0x18);
uint64_t var_68 = *(arg1 + 0x10);
fprintf(__acrt_iob_func(2), "_matherr(): %s in %s(%g, %g) (retval=%g)\n", rbx);
return 0;
}
int64_t _fpreset() __pure
{
return;
}
void __report_error(char* arg1, int64_t arg2) __noreturn
{
int64_t arg_10 = arg2;
int64_t r8;
int64_t arg_18 = r8;
int64_t r9;
int64_t arg_20 = r9;
fwrite("Mingw-w64 runtime failure:\n", 1, 0x1b, __acrt_iob_func(2));
vfprintf(__acrt_iob_func(2), arg1, &arg_10);
abort();
/* no return */
}
int64_t* mark_section_writable(int64_t arg1)
{
int64_t maxSections_1 = maxSections;
int64_t* Protect;
if (maxSections_1 <= 0)
maxSections_1 = 0;
else
{
int32_t i = 0;
Protect = the_secs + 0x18;
do
{
int64_t r8_1 = *Protect;
if (arg1 >= r8_1 && arg1 < r8_1 + *(Protect[1] + 8))
return Protect;
i += 1;
Protect = &Protect[5];
} while (i != maxSections_1);
}
struct Section_Header* rax_2 = __mingw_GetSectionForAddress(arg1);
if (!rax_2)
{
__report_error("Address %p has no image-section", arg1);
/* no return */
}
int64_t rbx_2 = maxSections_1 * 0x28;
int32_t* rax_4 = the_secs + rbx_2;
*(rax_4 + 0x20) = rax_2;
*rax_4 = 0;
void* lpAddress = &_GetPEImageBase()->e_magic[rax_2->virtualAddress];
*(the_secs + rbx_2 + 0x18) = lpAddress;
MEMORY_BASIC_INFORMATION buffer;
if (!VirtualQuery(lpAddress, &buffer, 0x30))
{
*(the_secs + rbx_2 + 0x18);
__report_error(" VirtualQuery failed for %d bytes at address %p", rax_2->virtualSize);
/* no return */
}
Protect = buffer.Protect;
if (&Protect[-8] & 0xffffffbf && (Protect - 4) & 0xfffffffb)
{
enum PAGE_PROTECTION_FLAGS flNewProtect = PAGE_EXECUTE_READWRITE;
void* BaseAddress = buffer.BaseAddress;
if (Protect == 2)
flNewProtect = PAGE_READWRITE;
uint64_t RegionSize = buffer.RegionSize;
enum PAGE_PROTECTION_FLAGS* lpflOldProtect = rbx_2 + the_secs;
*(lpflOldProtect + 8) = BaseAddress;
*(lpflOldProtect + 0x10) = RegionSize;
Protect = VirtualProtect(BaseAddress, RegionSize, flNewProtect, lpflOldProtect);
if (!Protect)
{
__report_error(" VirtualProtect failed with code 0x%x", GetLastError());
/* no return */
}
}
maxSections += 1;
return Protect;
}
void _pei386_runtime_relocator()
{
if (_.bss)
return;
_.bss = 1;
void* rax_5 = (__mingw_GetSectionCount() * 0x28 + 0xf) & 0xfffffffffffffff0;
_.text(rax_5);
maxSections = 0;
void var_88;
the_secs = &var_88 - rax_5 + 0x30;
}
int64_t __mingw_raise_matherr(int32_t arg1, int64_t arg2, double arg3[0x2] @ zmm2, int64_t arg4 @ zmm3, int64_t arg5)
{
int64_t _.bss_1 = _.bss;
double temp0[0x2] = _mm_unpacklo_pd(arg3, arg4);
if (!_.bss_1)
return _.bss_1;
int32_t var_38 = arg1;
int64_t var_30_1 = arg2;
double var_28_1[0x2] = temp0;
int64_t var_18_1 = arg5;
return _.bss_1(&var_38);
}
int64_t __mingw_setusermatherr(_UserMathErrorFunctionPointer arg1)
{
_.bss = arg1;
/* tailcall */
return __setusermatherr(arg1);
}
int64_t _gnu_exception_handler(int64_t* arg1)
{
int32_t* rdx = *arg1;
int32_t rax = *rdx;
if ((rax & 0x20ffffff) == 0x20474343 && !(rdx[1] & 1))
return 0xffffffff;
if (rax <= 0xc0000096)
{
if (rax > 0xc000008b)
{
uint64_t rax_1 = rax + 0x3fffff73;
if (rax_1 > 9)
return 0xffffffff;
_crt_signal_t rax_8;
switch (rax_1)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 6:
{
rax_8 = signal(8, nullptr);
if (rax_8 == 1)
{
signal(8, 1);
return 0xffffffff;
}
label_140013856:
if (rax_8)
{
rax_8(8);
return 0xffffffff;
}
break;
}
case 5:
case 8:
{
return 0xffffffff;
break;
}
case 7:
{
rax_8 = signal(8, nullptr);
if (rax_8 != 1)
goto label_140013856;
signal(8, 1);
return 0xffffffff;
break;
}
case 9:
{
label_1400137d2:
_crt_signal_t rax_4 = signal(4, nullptr);
if (rax_4 == 1)
{
signal(4, 1);
return 0xffffffff;
}
if (rax_4)
{
rax_4(4);
return 0xffffffff;
}
break;
}
}
}
else if (rax == 0xc0000005)
{
_crt_signal_t rax_9 = signal(0xb, nullptr);
if (rax_9 == 1)
{
signal(0xb, 1);
return 0xffffffff;
}
if (rax_9)
{
rax_9(0xb);
return 0xffffffff;
}
}
else
{
if (rax == 0xc0000008)
return 0xffffffff;
if (rax == 0xc000001d)
goto label_1400137d2;
if (rax == 0x80000002)
return 0xffffffff;
}
}
int64_t _.bss_1 = _.bss;
if (!_.bss_1)
return 0;
/* tailcall */
return _.bss_1(arg1);
}
int64_t __mingwthr_run_key_dtors.part.0()
{
EnterCriticalSection(&__mingwthr_cs);
for (int32_t* _.bss_1 = _.bss; _.bss_1; _.bss_1 = *(_.bss_1 + 0x10))
{
int64_t rax_1 = TlsGetValue(*_.bss_1);
if (!GetLastError() && rax_1)
(*(_.bss_1 + 8))(rax_1);
}
/* tailcall */
return LeaveCriticalSection(&__mingwthr_cs);
}
int64_t ___w64_mingwthr_add_key_dtor(int32_t arg1, int64_t arg2)
{
if (__mingwthr_cs_init)
{
int32_t* rax_2 = calloc(1, 0x18);
if (!rax_2)
return 0xffffffff;
*(rax_2 + 8) = arg2;
*rax_2 = arg1;
EnterCriticalSection(&__mingwthr_cs);
int64_t _.bss_1 = _.bss;
_.bss = rax_2;
*(rax_2 + 0x10) = _.bss_1;
LeaveCriticalSection(&__mingwthr_cs);
}
return 0;
}
int64_t ___w64_mingwthr_remove_key_dtor(int32_t arg1)
{
if (!__mingwthr_cs_init)
return 0;
EnterCriticalSection(&__mingwthr_cs);
int32_t* _.bss_1 = _.bss;
if (_.bss_1)
{
int32_t* _.bss_3 = nullptr;
while (true)
{
int32_t* _.bss_2 = *(_.bss_1 + 0x10);
if (*_.bss_1 == arg1)
{
if (!_.bss_3)
_.bss = _.bss_2;
else
*(_.bss_3 + 0x10) = _.bss_2;
free(_.bss_1);
break;
}
_.bss_3 = _.bss_1;
if (!_.bss_2)
break;
_.bss_1 = _.bss_2;
}
}
LeaveCriticalSection(&__mingwthr_cs);
return 0;
}
int64_t __mingw_TLScallback(int64_t arg1, int32_t arg2)
{
if (arg2 == 2)
return 1;
if (arg2 > 2)
{
if (arg2 == 3 && __mingwthr_cs_init)
__mingwthr_run_key_dtors.part.0();
}
else if (!arg2)
{
if (__mingwthr_cs_init)
__mingwthr_run_key_dtors.part.0();
if (__mingwthr_cs_init == 1)
{
void* _.bss_1 = _.bss;
while (_.bss_1)
{
void* _.bss_2 = _.bss_1;
_.bss_1 = *(_.bss_1 + 0x10);
free(_.bss_2);
}
_.bss = 0;
__mingwthr_cs_init = 0;
DeleteCriticalSection(&__mingwthr_cs);
}
}
else
{
if (!__mingwthr_cs_init)
InitializeCriticalSection(&__mingwthr_cs);
__mingwthr_cs_init = 1;
}
return 1;
}
void exit(int32_t arg1) __noreturn
{
exit(arg1);
/* no return */
}
void _exit(int32_t arg1) __noreturn
{
_exit(arg1);
/* no return */
}
int64_t _ValidateImageBase(int16_t* arg1)
{
if (*arg1 == 0x5a4d)
{
void* rcx = arg1 + *(arg1 + 0x3c);
if (*rcx == 0x4550)
{
int64_t result;
result = *(rcx + 0x18) == 0x20b;
return result;
}
}
return 0;
}
void* _FindPESection(void* arg1, int64_t arg2)
{
void* rcx = arg1 + *(arg1 + 0x3c);
uint32_t r8 = *(rcx + 6);
void* result = rcx + *(rcx + 0x14) + 0x18;
if (r8)
{
void* r9_1 = result + (r8 - 1) * 0x28 + 0x28;
do
{
uint64_t r8_1 = *(result + 0xc);
if (arg2 >= r8_1 && arg2 < r8_1 + *(result + 8))
return result;
result += 0x28;
} while (result != r9_1);
}
return nullptr;
}
struct Section_Header* const _FindPESectionByName(char* arg1)
{
if (strlen(arg1) <= 8)
{
for (struct Section_Header* const _Str1 = &__section_headers; _Str1 != 0x140000480;
_Str1 = &_Str1[1])
{
if (!strncmp(_Str1, arg1, 8))
return _Str1;
}
}
return 0;
}
struct Section_Header* const __mingw_GetSectionForAddress(int64_t arg1)
{
for (struct Section_Header* const i = &__section_headers; i != 0x140000480; i = &i[1])
{
uint64_t virtualAddress = i->virtualAddress;
if (arg1 - &__dos_header >= virtualAddress
&& arg1 - &__dos_header < virtualAddress + i->virtualSize)
return i;
}
return 0;
}
int64_t __mingw_GetSectionCount() __pure
{
return 0x13;
}
struct Section_Header* const _FindPESectionExec(int64_t arg1)
{
for (struct Section_Header* const i = &__section_headers; i != 0x140000480; i = &i[1])
{
if (*i->characteristics[3] & 0x20)
{
if (!arg1)
return i;
arg1 -= 1;
}
}
return 0;
}
struct DOS_Header* const _GetPEImageBase() __pure
{
return &__dos_header;
}
uint64_t _IsNonwritableInCurrentImage(int64_t arg1)
{
struct Section_Header* const i = &__section_headers;
do
{
uint64_t virtualAddress = i->virtualAddress;
if (arg1 - &__dos_header >= virtualAddress
&& arg1 - &__dos_header < virtualAddress + i->virtualSize)
return ~i->characteristics >> 0x1f;
i = &i[1];
} while (0x140000480 != i);
return 0;
}
void* __mingw_enum_import_library_names(int32_t arg1)
{
for (struct Section_Header* const i = &__section_headers; i != 0x140000480; i = &i[1])
{
uint64_t virtualAddress = i->virtualAddress;
if (0x28000 >= virtualAddress && 0x28000 < virtualAddress + i->virtualSize)
{
void* rax_3 = &_.idata$2;
while (*(rax_3 + 4) || *(rax_3 + 0xc))
{
if (arg1 <= 0)
return &__dos_header.e_magic[*(rax_3 + 0xc)];
arg1 -= 1;
rax_3 += 0x14;
}
break;
}
}
return 0;
}
int64_t _.text(int64_t arg1 @ rax)
{
int64_t result = arg1;
void arg_8;
void* rcx = &arg_8;
if (arg1 >= 0x1000)
{
do
{
rcx -= 0x1000;
*rcx = *rcx;
arg1 -= 0x1000;
} while (arg1 > 0x1000);
}
void* rcx_1 = rcx - arg1;
*rcx_1 = *rcx_1;
return result;
}
int64_t emutls_destroy(void* ptr)
{
int64_t rdi = *ptr;
if (rdi)
{
int64_t rbx_1 = 0;
do
{
void* rax_1 = *(ptr + (rbx_1 << 3) + 8);
if (rax_1)
free(*(rax_1 - 8));
rbx_1 += 1;
} while (rdi != rbx_1);
}
/* tailcall */
return free(ptr);
}
int64_t emutls_init()
{
pthread_mutex_init(&emutls_mutex, nullptr);
int32_t result = pthread_key_create(&emutls_key, emutls_destroy);
if (!result)
return result;
abort();
/* no return */
}
void* __emutls_get_address(struct __emutls_object* obj)
{
union offset = *(obj->loc + 0);
if (!offset)
{
pthread_once(&once, emutls_init);
pthread_mutex_lock(&emutls_mutex);
offset = *(obj->loc + 0);
if (!offset)
{
offset = emutls_size + 1;
emutls_size = offset;
*(obj->loc + 0) = offset;
}
pthread_mutex_unlock(&emutls_mutex);
}
int64_t* rax_1 = pthread_getspecific(emutls_key);
int64_t* rbx = rax_1;
int64_t rcx_1;
int64_t rsi;
if (!rax_1)
{
int64_t* rax_3 = calloc(offset + 0x21, 8);
rbx = rax_3;
if (rax_3)
{
unsigned int emutls_key_1 = emutls_key;
rsi = offset - 1;
*rax_3 = offset + 0x20;
pthread_setspecific(emutls_key_1, rax_3);
rcx_1 = rbx[rsi + 1];
if (rcx_1)
return rcx_1;
label_140014140:
long long unsigned int align = obj->align;
uint64_t size = obj->size;
void* rcx_4;
if (align > 8)
{
int64_t rax_9 = malloc(size + align + 7);
if (rax_9)
{
rcx_4 = (rax_9 + align + 7) & -(align);
*(rcx_4 - 8) = rax_9;
label_14001416b:
void* templ = obj->templ;
int64_t rcx_5;
if (!templ)
rcx_5 = memset(rcx_4, 0, size);
else
rcx_5 = memcpy(rcx_4, templ, size);
rbx[rsi + 1] = rcx_5;
return rcx_5;
}
}
else
{
int64_t* rax_4 = malloc(size + 8);
if (rax_4)
{
*rax_4 = rax_4;
rcx_4 = &rax_4[1];
goto label_14001416b;
}
}
}
}
else
{
int64_t rbp = *rax_1;
if (rbp >= offset)
goto label_140014095;
int64_t r12_1 = rbp * 2;
if (r12_1 < offset)
r12_1 = offset + 0x20;
int64_t* rax_8 = realloc(rbx, (r12_1 << 3) + 8);
rbx = rax_8;
if (rax_8)
{
*rax_8 = r12_1;
memset(&rax_8[rbp + 1], 0, (r12_1 - rbp) << 3);
pthread_setspecific(emutls_key, rbx);
label_140014095:
rsi = offset - 1;
rcx_1 = rbx[rsi + 1];
if (!rcx_1)
goto label_140014140;
return rcx_1;
}
}
abort();
/* no return */
}
void __emutls_register_common(struct __emutls_object* obj, long long unsigned int size, long long unsigned int align, void* templ)
{
if (obj->size < size)
{
obj->size = size;
obj->templ = nullptr;
}
if (obj->align < align)
obj->align = align;
if (!templ || obj->size != size)
return;
obj->templ = templ;
}
uint64_t __mingw_vfprintf(FILE* arg1, char* arg2, int64_t* arg3)
{
_lock_file(arg1);
int32_t rax = __mingw_pformat(0x6000, arg1, 0, arg2, arg3);
_unlock_file(arg1);
return rax;
}
void* __pformat_cvt(int32_t arg1, int64_t* arg2, int32_t arg3, int32_t* arg4, int32_t* arg5)
{
int64_t rax = *arg2;
int32_t rdx = arg2[1];
int64_t var_18 = rax;
int32_t var_10 = rdx;
int16_t r10 = rdx & 0x7fff;
int32_t var_24;
int32_t rcx_1;
int32_t rdx_4;
if (!r10)
{
uint32_t rdx_2 = rax >> 0x20;
if (!(rax | rdx_2))
{
rdx_4 = 0;
var_24 = 0;
rcx_1 = rdx & 0x8000;
}
else
{
if (rdx_2 < 0)
goto label_140014322;
rdx_4 = -0x403d;
var_24 = 2;
rcx_1 = rdx & 0x8000;
}
}
else if (r10 != 0x7fff)
{
label_140014322:
rdx_4 = r10 - 0x403e;
var_24 = 1;
rcx_1 = rdx & 0x8000;
}
else if (!((rax >> 0x20 & 0x7fffffff) | rax))
{
rdx_4 = 0;
var_24 = 3;
rcx_1 = rdx & 0x8000;
}
else
{
var_24 = 4;
rdx_4 = 0;
rcx_1 = 0;
}
*arg5 = rcx_1;
void* var_20;
return __gdtoa(&_.data, rdx_4, &var_18, &var_24, arg1, arg3, arg4, &var_20);
}
int64_t __pformat_putc(int32_t arg1, char** arg2)
{
int16_t rdx = arg2[1];
int32_t rax_1;
if (!(*rdx[1] & 0x40))
rax_1 = *(arg2 + 0x24);
if (*rdx[1] & 0x40 || arg2[5] > rax_1)
{
*rdx[1] &= 0x20;
char* _Stream = *arg2;
if (*rdx[1])
{
fputc(arg1, _Stream);
int32_t result = *(arg2 + 0x24) + 1;
*(arg2 + 0x24) = result;
return result;
}
_Stream[*(arg2 + 0x24)] = arg1;
rax_1 = *(arg2 + 0x24);
}
*(arg2 + 0x24) = rax_1 + 1;
return rax_1 + 1;
}
int64_t __pformat_wputchars(int64_t arg1, int32_t arg2, char** arg3)
{
int32_t rsi = arg2;
mbstate_t _State;
char var_58[0x18];
wcrtomb(&var_58, 0, &_State);
int32_t rax = arg3[2];
int32_t rdx = rax;
if (rsi <= rax)
rdx = rsi;
int32_t i_1 = *(arg3 + 0xc);
if (rax >= 0)
rsi = rdx;
int32_t r12;
if (i_1 > rsi)
{
int32_t rax_9 = i_1 - rsi;
bool cond:2_1 = *(arg3 + 9) & 4;
*(arg3 + 0xc) = rax_9;
if (!cond:2_1)
{
*(arg3 + 0xc) = rax_9 - 1;
int32_t i;
do
{
__pformat_putc(0x20, arg3);
i = *(arg3 + 0xc);
*(arg3 + 0xc) = i - 1;
} while (i);
r12 = rsi - 1;
if (rsi <= 0)
goto label_14001453d;
goto label_14001448c;
}
r12 = rsi - 1;
if (rsi > 0)
goto label_14001448c;
*(arg3 + 0xc) -= 1;
label_140014548:
do
{
__pformat_putc(0x20, arg3);
label_14001453d:
i_1 = *(arg3 + 0xc);
*(arg3 + 0xc) = i_1 - 1;
} while (i_1 > 0);
return i_1;
}
*(arg3 + 0xc) = 0xffffffff;
r12 = rsi - 1;
if (rsi <= 0)
*(arg3 + 0xc) = 0xfffffffe;
else
{
label_14001448c:
int64_t rsi_1 = 0;
while (true)
{
int32_t rax_1 = wcrtomb(&var_58, *(arg1 + (rsi_1 << 1)), &_State);
if (rax_1 <= 0)
goto label_14001453d;
void* r14_1 = &var_58;
while (true)
{
int16_t rdx_3 = arg3[1];
r14_1 += 1;
int32_t rax_3;
if (!(*rdx_3[1] & 0x40))
rax_3 = *(arg3 + 0x24);
if (*rdx_3[1] & 0x40 || arg3[5] > rax_3)
{
*rdx_3[1] &= 0x20;
int32_t _Character = *(r14_1 - 1);
char* _Stream = *arg3;
if (!*rdx_3[1])
{
_Stream[*(arg3 + 0x24)] = _Character;
rax_3 = *(arg3 + 0x24);
}
else
{
fputc(_Character, _Stream);
*(arg3 + 0x24) += 1;
if (r14_1 == &var_58[rax_1 - 1 + 1])
break;
continue;
}
}
*(arg3 + 0x24) = rax_3 + 1;
if (r14_1 == &var_58[rax_1 - 1 + 1])
break;
}
rsi_1 += 1;
if (r12 + 1 - rsi_1 <= 0)
break;
}
i_1 = *(arg3 + 0xc);
*(arg3 + 0xc) = i_1 - 1;
if (i_1 > 0)
goto label_140014548;
}
return i_1;
}
int64_t __pformat_putchars(void* arg1, int32_t arg2, char** arg3)
{
int32_t rax = arg3[2];
int32_t rdi = arg2;
int32_t rdx = rax;
if (arg2 <= rax)
rdx = rdi;
int32_t result = *(arg3 + 0xc);
void* rsi = arg1;
if (rax >= 0)
rdi = rdx;
int32_t rdx_1;
if (result <= rdi)
{
*(arg3 + 0xc) = 0xffffffff;
rdx_1 = rdi - 1;
if (rdi)
goto label_1400145fe;
*(arg3 + 0xc) = 0xfffffffe;
return result;
}
int32_t rax_4 = result - rdi;
*(arg3 + 0xc) = rax_4;
int16_t rax_1 = arg3[1];
if (*rax_1[1] & 4)
{
rdx_1 = rdi - 1;
if (rdi)
goto label_140014604;
*(arg3 + 0xc) -= 1;
goto label_140014671;
}
*(arg3 + 0xc) = rax_4 - 1;
int32_t i;
do
{
__pformat_putc(0x20, arg3);
i = *(arg3 + 0xc);
*(arg3 + 0xc) = i - 1;
} while (i);
rdx_1 = rdi - 1;
if (rdi)
{
label_1400145fe:
rax_1 = arg3[1];
label_140014604:
void* rdi_2 = rdx_1 + 1 + rsi;
while (true)
{
rsi += 1;
int32_t rdx_2;
if (!(*rax_1[1] & 0x40))
rdx_2 = *(arg3 + 0x24);
if (*rax_1[1] & 0x40 || arg3[5] > rdx_2)
{
int32_t _Character = *(rsi - 1);
char* _Stream = *arg3;
if (!(*rax_1[1] & 0x20))
{
_Stream[*(arg3 + 0x24)] = _Character;
rdx_2 = *(arg3 + 0x24);
}
else
{
fputc(_Character, _Stream);
rdx_2 = *(arg3 + 0x24);
}
}
*(arg3 + 0x24) = rdx_2 + 1;
if (rsi == rdi_2)
break;
rax_1 = arg3[1];
}
}
while (true)
{
result = *(arg3 + 0xc);
*(arg3 + 0xc) = result - 1;
if (result <= 0)
return result;
rax_1 = arg3[1];
label_140014671:
int32_t rdx_4;
if (!(*rax_1[1] & 0x40))
rdx_4 = *(arg3 + 0x24);
if (*rax_1[1] & 0x40 || arg3[5] > rdx_4)
{
char* _Stream_1 = *arg3;
if (!(*rax_1[1] & 0x20))
{
_Stream_1[*(arg3 + 0x24)] = 0x20;
rdx_4 = *(arg3 + 0x24);
}
else
{
fputc(0x20, _Stream_1);
rdx_4 = *(arg3 + 0x24);
}
}
*(arg3 + 0x24) = rdx_4 + 1;
}
}
int64_t __pformat_puts(char* arg1, char** arg2)
{
int64_t rdx = arg2[2];
char* _Str = arg1;
if (!arg1)
_Str = "(null)";
int32_t rax;
if (rdx < 0)
rax = strlen(_Str);
else
rax = strnlen(_Str, rdx);
/* tailcall */
return __pformat_putchars(_Str, rax, arg2);
}
int64_t __pformat_emit_inf_or_nan(int32_t arg1, char* arg2, char** arg3)
{
int32_t r10 = arg3[1];
arg3[2] = 0xffffffff;
char var_c;
void* r9;
void var_b;
if (arg1)
{
var_c = 0x2d;
r9 = &var_b;
}
else if (r10 & 0x100)
{
var_c = 0x2b;
r9 = &var_b;
}
else if (!(r10 & 0x40))
r9 = &var_c;
else
{
r9 = &var_b;
var_c = 0x20;
}
for (int64_t i = 0; i != 3; i += 1)
*(r9 + i) = (arg2[i] & 0xdf) | (r10 & 0x20);
return __pformat_putchars(&var_c, r9 + 3 - &var_c, arg3);
}
int64_t __pformat_xint.isra.0(int32_t arg1, uint64_t arg2, char** arg3)
{
void var_68;
int32_t rax_1;
char rcx;
int32_t rdi;
char r8_4;
int32_t r12;
void* r13;
int32_t r15;
if (arg1 != 0x6f)
{
r15 = arg3[2];
int32_t rax = 0;
rdi = arg3[1];
if (r15 >= 0)
rax = r15;
rax_1 = rax + 0x12;
if (rdi & 0x1000)
{
rcx = 4;
goto label_14001484e;
}
r12 = *(arg3 + 0xc);
if (r12 >= rax_1)
rax_1 = r12;
int64_t rax_7 = (rax_1 + 0xf) & 0xfffffffffffffff0;
_.text(rax_7);
rcx = 4;
r8_4 = 0xf;
r13 = &var_68 - rax_7 + 0x20;
goto label_140014910;
}
r15 = arg3[2];
int32_t rax_20 = 0;
rdi = arg3[1];
if (r15 >= 0)
rax_20 = r15;
rax_1 = rax_20 + 0x18;
void* rsi;
if (rdi & 0x1000)
{
rcx = 3;
label_14001484e:
if (arg3[4])
rax_1 += rax_1 / 3;
r12 = *(arg3 + 0xc);
if (r12 >= rax_1)
rax_1 = r12;
int64_t rax_4 = (rax_1 + 0xf) & 0xfffffffffffffff0;
_.text(rax_4);
r13 = &var_68 - rax_4 + 0x20;
int64_t r8_3;
r8_3 = arg1 != 0x6f;
r8_4 = (r8_3 << 3) + 7;
rsi = r13;
if (arg2)
goto label_140014947;
goto label_1400148b1;
}
r12 = *(arg3 + 0xc);
if (r12 >= rax_1)
rax_1 = r12;
int64_t rax_23 = (rax_1 + 0xf) & 0xfffffffffffffff0;
_.text(rax_23);
rcx = 3;
r8_4 = 7;
r13 = &var_68 - rax_23 + 0x20;
label_140014910:
rsi = r13;
if (arg2)
{
label_140014947:
do
{
rsi += 1;
char rax_9 = r8_4 & arg2;
char rax_11 = (rax_9 + 0x37) | (arg1 & 0x20);
if (rax_9 + 0x30 <= 0x39)
rax_11 = rax_9 + 0x30;
arg2 u>>= rcx;
*(rsi - 1) = rax_11;
} while (arg2);
if (rsi == r13)
goto label_1400148b1;
if (r15 <= 0)
goto label_1400148ba;
goto label_140014961;
}
label_1400148b1:
arg3[1] = rdi & 0xfffff7ff;
if (r15 <= 0)
{
label_1400148ba:
if (arg1 != 0x6f || !(*(arg3 + 9) & 8))
goto label_140014986;
label_1400148ce:
*rsi = 0x30;
rsi += 1;
goto label_140014986;
}
label_140014961:
int32_t result = rsi - r13;
int32_t _Size_3 = r15 - result;
if (_Size_3 > 0)
{
uint64_t _Size = _Size_3;
void* rcx_1 = rsi;
rsi += _Size;
memset(rcx_1, 0x30, _Size);
label_140014986:
if (rsi == r13 && r15)
goto label_140014c2c;
result = rsi - r13;
goto label_14001499a;
}
if (arg1 == 0x6f)
{
if (!(*(arg3 + 9) & 8))
goto label_140014986;
goto label_1400148ce;
}
int32_t rdi_2;
int32_t r12_1;
int32_t result_1;
if (rsi == r13)
{
label_140014c2c:
*rsi = 0x30;
int32_t rax_26 = (rsi + 1);
rsi += 1;
result = rax_26 - r13;
label_14001499a:
if (result < r12)
{
r12_1 = r12 - result;
rdi_2 = arg3[1];
*(arg3 + 0xc) = r12_1;
if (arg1 != 0x6f && rdi_2 & 0x800)
goto label_140014a10;
if (r15 >= 0 || (rdi_2 & 0x600) != 0x200)
goto label_140014a39;
uint64_t _Size_1 = r12_1;
void* rcx_2 = rsi;
rsi += _Size_1;
result = memset(rcx_2, 0x30, _Size_1);
if (arg1 == 0x6f)
goto label_1400149c1;
goto label_140014c10;
}
*(arg3 + 0xc) = 0xffffffff;
if (arg1 != 0x6f)
goto label_1400149b0;
if (r13 < rsi)
{
rdi_2 = arg3[1];
result_1 = -2;
r12_1 = -1;
label_140014a90:
while (true)
{
rsi -= 1;
int32_t rax_15;
if (!(rdi_2 & 0x4000))
rax_15 = *(arg3 + 0x24);
if (!(rdi_2 & 0x4000) && arg3[5] <= rax_15)
goto label_140014a82;
int32_t _Character = *rsi;
FILE* _Stream = *arg3;
if (!(rdi_2 & 0x2000))
{
*(_Stream + *(arg3 + 0x24)) = _Character;
rax_15 = *(arg3 + 0x24);
label_140014a82:
result = rax_15 + 1;
*(arg3 + 0x24) = result;
if (r13 >= rsi)
break;
}
else
{
fputc(_Character, _Stream);
result = *(arg3 + 0x24) + 1;
*(arg3 + 0x24) = result;
if (r13 >= rsi)
break;
}
label_140014a8d:
rdi_2 = arg3[1];
}
if (r12_1 > 0)
{
while (true)
{
rdi_2 = arg3[1];
label_140014af4:
int32_t rax_18;
if (!(rdi_2 & 0x4000))
rax_18 = *(arg3 + 0x24);
if (rdi_2 & 0x4000 || arg3[5] > rax_18)
{
char* _Stream_1 = *arg3;
if (!(rdi_2 & 0x2000))
{
_Stream_1[*(arg3 + 0x24)] = 0x20;
rax_18 = *(arg3 + 0x24);
}
else
{
fputc(0x20, _Stream_1);
rax_18 = *(arg3 + 0x24);
}
}
*(arg3 + 0x24) = rax_18 + 1;
result = result_1 - 1;
if (result_1 <= 0)
return result;
result_1 = result;
}
}
}
}
else if (result >= r12)
{
*(arg3 + 0xc) = 0xffffffff;
label_1400149b0:
if (!(*(arg3 + 9) & 8))
goto label_1400149c1;
*rsi = arg1;
rsi += 2;
*(rsi - 1) = 0x30;
label_1400149c1:
r12_1 = -1;
label_1400149c7:
if (r13 < rsi)
{
rdi_2 = arg3[1];
result_1 = r12_1 - 1;
goto label_140014a90;
}
}
else
{
rdi_2 = arg3[1];
r12_1 = r12 - result;
*(arg3 + 0xc) = r12_1;
if (!(rdi_2 & 0x800))
goto label_140014a39;
label_140014a10:
r12_1 -= 2;
if (r12_1 <= 0)
{
label_140014a1d:
*rsi = arg1;
rsi += 2;
*(rsi - 1) = 0x30;
goto label_1400149c7;
}
if (r15 < 0 && (rdi_2 & 0x600) == 0x200)
{
uint64_t _Size_2 = r12_1;
void* rcx_3 = rsi;
rsi += _Size_2;
result = memset(rcx_3, 0x30, _Size_2);
label_140014c10:
r12_1 = -1;
if (!(rdi_2 & 0x800))
goto label_1400149c7;
goto label_140014a1d;
}
*rsi = arg1;
rsi += 2;
*(rsi - 1) = 0x30;
label_140014a39:
result_1 = r12_1 - 1;
if (rdi_2 & 0x400)
{
if (r13 >= rsi)
goto label_140014af4;
goto label_140014a90;
}
r12_1 = result_1;
int32_t i;
do
{
result = __pformat_putc(0x20, arg3);
i = r12_1;
r12_1 -= 1;
} while (i >= 1);
result_1 = -2;
if (r13 < rsi)
goto label_140014a8d;
}
return result;
}
int64_t __pformat_int.isra.0(uint64_t arg1, char** arg2)
{
int32_t rax = 0;
int32_t r14 = arg2[2];
int32_t r12 = arg2[1];
if (r14 >= 0)
rax = r14;
int32_t rax_1 = rax + 0x17;
if (r12 & 0x1000 && arg2[4])
rax_1 += rax_1 / 3;
int32_t rsi = *(arg2 + 0xc);
if (rsi >= rax_1)
rax_1 = rsi;
int64_t rax_4 = (rax_1 + 0xf) & 0xfffffffffffffff0;
_.text(rax_4);
if (!(r12 & 0x80))
goto label_140014d29;
void var_68;
void* rdi_1;
if (arg1 < 0)
{
arg1 = -(arg1);
label_140014d3f:
void* r8_1 = &var_68 - rax_4 + 0x20;
while (true)
{
rdi_1 = r8_1 + 1;
uint64_t rdx_1 = arg1 / 0xa;
*r8_1 = arg1 - (rdx_1 + (rdx_1 << 2)) * 2 + 0x30;
if (arg1 <= 9)
break;
if (&var_68 - rax_4 + 0x20 != rdi_1 && r12 & 0x1000 && arg2[4]
&& ((rdi_1 - (&var_68 - rax_4 + 0x20)) & 0x8000000000000003) == 3)
{
*rdi_1 = 0x2c;
rdi_1 = r8_1 + 2;
}
arg1 = rdx_1;
r8_1 = rdi_1;
}
}
else
{
r12 &= 0x7f;
arg2[1] = r12;
label_140014d29:
rdi_1 = &var_68 - rax_4 + 0x20;
if (arg1)
goto label_140014d3f;
}
if (r14 <= 0)
goto label_140014df0;
int32_t _Size_3 = r14 - (rdi_1 - (&var_68 - rax_4 + 0x20));
void* rax_15;
if (_Size_3 > 0)
{
int64_t _Size_1 = _Size_3;
void* rcx = rdi_1;
rdi_1 += _Size_1;
memset(rcx, 0x30, _Size_1);
label_140014df0:
if (&var_68 - rax_4 + 0x20 == rdi_1)
{
rax_15 = rdi_1;
if (r14)
{
rdi_1 = rax_15 + 1;
*rax_15 = 0x30;
}
}
}
else if (&var_68 - rax_4 + 0x20 == rdi_1)
{
rax_15 = &var_68 - rax_4 + 0x20;
rdi_1 = rax_15 + 1;
*rax_15 = 0x30;
}
if (rsi > 0)
{
int32_t rsi_1 = rsi - (rdi_1 - (&var_68 - rax_4 + 0x20));
*(arg2 + 0xc) = rsi_1;
if (rsi_1 > 0)
{
if (!(r12 & 0x1c0))
{
if (r14 < 0 && (r12 & 0x600) == 0x200)
goto label_140014fc2;
goto label_140014e2a;
}
*(arg2 + 0xc) = rsi_1 - 1;
if (r14 >= 0 || (r12 & 0x600) != 0x200)
{
label_140014e2a:
if (!(r12 & 0x400))
{
int32_t rax_26 = *(arg2 + 0xc);
*(arg2 + 0xc) = rax_26 - 1;
if (rax_26 > 0)
{
int32_t i;
do
{
__pformat_putc(0x20, arg2);
i = *(arg2 + 0xc);
*(arg2 + 0xc) = i - 1;
} while (i > 0);
r12 = arg2[1];
}
}
}
else
{
label_140014fc2:
int32_t _Size_2 = *(arg2 + 0xc);
*(arg2 + 0xc) = _Size_2 - 1;
if (_Size_2 > 0)
{
uint64_t _Size = _Size_2;
void* rcx_2 = rdi_1;
rdi_1 += _Size;
memset(rcx_2, 0x30, _Size);
*(arg2 + 0xc) = 0xffffffff;
}
}
}
}
void* rsi_2;
if (r12 & 0x80)
{
rsi_2 = rdi_1 + 1;
*rdi_1 = 0x2d;
}
else if (!(r12 & 0x100))
{
rsi_2 = rdi_1;
if (r12 & 0x40)
{
rsi_2 += 1;
*rdi_1 = 0x20;
}
}
else
{
rsi_2 = rdi_1 + 1;
*rdi_1 = 0x2b;
}
if (&var_68 - rax_4 + 0x20 < rsi_2)
{
while (true)
{
rsi_2 -= 1;
int32_t rax_19;
if (!(r12 & 0x4000))
rax_19 = *(arg2 + 0x24);
if (!(r12 & 0x4000) && arg2[5] <= rax_19)
goto label_140014e70;
int32_t _Character = *rsi_2;
FILE* _Stream = *arg2;
if (!(r12 & 0x2000))
{
*(_Stream + *(arg2 + 0x24)) = _Character;
rax_19 = *(arg2 + 0x24);
label_140014e70:
*(arg2 + 0x24) = rax_19 + 1;
if (&var_68 - rax_4 + 0x20 == rsi_2)
break;
}
else
{
fputc(_Character, _Stream);
*(arg2 + 0x24) += 1;
if (&var_68 - rax_4 + 0x20 == rsi_2)
break;
}
r12 = arg2[1];
}
}
int32_t result = *(arg2 + 0xc);
while (true)
{
int32_t result_1 = result;
result -= 1;
*(arg2 + 0xc) = result;
if (result_1 <= 0)
break;
int16_t rcx_1 = arg2[1];
int32_t rdx_2;
if (!(*rcx_1[1] & 0x40))
rdx_2 = *(arg2 + 0x24);
if (*rcx_1[1] & 0x40 || arg2[5] > rdx_2)
{
*rcx_1[1] &= 0x20;
char* _Stream_1 = *arg2;
if (!*rcx_1[1])
{
_Stream_1[*(arg2 + 0x24)] = 0x20;
rdx_2 = *(arg2 + 0x24);
result = *(arg2 + 0xc);
}
else
{
fputc(0x20, _Stream_1);
rdx_2 = *(arg2 + 0x24);
result = *(arg2 + 0xc);
}
}
*(arg2 + 0x24) = rdx_2 + 1;
}
return result;
}
int64_t __pformat_emit_radix_point(char** arg1)
{
mbstate_t _State;
wchar16 _Source;
if (*(arg1 + 0x14) == 0xfffffffd)
{
__builtin_memset(&_State, 0, 8);
wchar16 _DstCh;
int32_t rax_10 = mbrtowc(&_DstCh, localeconv()->decimal_point, 0x10, &_State);
if (rax_10 <= 0)
_Source = arg1[3];
else
{
_Source = _DstCh;
arg1[3] = _Source;
}
*(arg1 + 0x14) = rax_10;
}
else
_Source = arg1[3];
if (!_Source)
return __pformat_putc(0x2e, arg1);
int64_t rax_3 = (*(arg1 + 0x14) + 0xf) & 0xfffffffffffffff0;
_.text(rax_3);
__builtin_memset(&_State, 0, 8);
void var_58;
void* rsi = &var_58 - rax_3 + 0x20;
int32_t rax_4 = wcrtomb(rsi, _Source, &_State);
if (rax_4 <= 0)
return __pformat_putc(0x2e, arg1);
void* r12_1 = rsi + rax_4 - 1 + 1;
int32_t result;
while (true)
{
int16_t rdx_1 = arg1[1];
rsi += 1;
int32_t rax_6;
if (!(*rdx_1[1] & 0x40))
rax_6 = *(arg1 + 0x24);
if (*rdx_1[1] & 0x40 || arg1[5] > rax_6)
{
*rdx_1[1] &= 0x20;
int32_t _Character = *(rsi - 1);
char* _Stream = *arg1;
if (!*rdx_1[1])
{
_Stream[*(arg1 + 0x24)] = _Character;
rax_6 = *(arg1 + 0x24);
}
else
{
fputc(_Character, _Stream);
result = *(arg1 + 0x24) + 1;
*(arg1 + 0x24) = result;
if (r12_1 == rsi)
break;
continue;
}
}
result = rax_6 + 1;
*(arg1 + 0x24) = result;
if (r12_1 == rsi)
break;
}
return result;
}
int64_t __pformat_emit_float(int32_t arg1, char* arg2, int32_t arg3, char** arg4)
{
char* rdi = arg2;
int32_t rcx = *(arg4 + 0xc);
int32_t i_4 = arg3;
int32_t rax_1;
int32_t rcx_1;
int32_t rcx_2;
if (arg3 <= 0)
{
if (rcx > 0)
{
rax_1 = arg4[2];
rcx_1 = rcx - 1;
if (rcx_1 <= rax_1)
goto label_1400152f9;
label_1400151c4:
rcx_2 = rcx_1 - rax_1;
*(arg4 + 0xc) = rcx_2;
if (rax_1 <= 0)
goto label_140015418;
label_1400151d1:
rcx_2 -= 1;
*(arg4 + 0xc) = rcx_2;
if (i_4 > 0 && *(arg4 + 9) & 0x10 && arg4[4])
goto label_14001552b;
label_1400151e5:
if (rcx_2 <= 0)
goto label_14001522b;
goto label_1400151e9;
}
int32_t rax_2;
if (rcx)
{
label_1400152f9:
*(arg4 + 0xc) = 0xffffffff;
if (!arg1)
{
label_140015233:
rax_2 = arg4[1];
label_140015236:
if (*rax_2[1] & 1)
__pformat_putc(0x2b, arg4);
else if (rax_2 & 0x40)
__pformat_putc(0x20, arg4);
}
else
__pformat_putc(0x2d, arg4);
}
else
{
int32_t rcx_9 = arg4[2];
if (rcx_9 >= 0)
goto label_1400152f9;
rcx_2 = -(rcx_9);
*(arg4 + 0xc) = rcx_2;
label_140015418:
int16_t rax_11 = arg4[1];
if (*rax_11[1] & 8)
goto label_1400151d1;
if (i_4 > 0 && *rax_11[1] & 0x10)
{
if (!arg4[4])
goto label_1400151e5;
goto label_14001552b;
}
label_1400151e9:
int32_t rcx_8;
if (!arg1)
{
rax_2 = arg4[1];
if (!(rax_2 & 0x1c0))
{
rcx_8 = rcx_2 - 1;
if (!(*rax_2[1] & 6))
goto label_1400153d6;
goto label_140015236;
}
*(arg4 + 0xc) = rcx_2 - 1;
if (rcx_2 == 1 || *rax_2[1] & 6)
goto label_140015236;
goto label_1400153d3;
}
*(arg4 + 0xc) = rcx_2 - 1;
if (rcx_2 != 1 && !(arg4[1] & 0x600))
{
label_1400153d3:
rcx_8 = rcx_2 - 2;
label_1400153d6:
*(arg4 + 0xc) = rcx_8;
int32_t i;
do
{
__pformat_putc(0x20, arg4);
i = *(arg4 + 0xc);
*(arg4 + 0xc) = i - 1;
} while (i > 0);
goto label_14001522b;
}
__pformat_putc(0x2d, arg4);
}
}
else
{
int32_t rax_15;
if (arg3 <= rcx)
{
rax_1 = arg4[2];
rcx_1 = rcx - arg3;
if (rcx_1 > rax_1)
goto label_1400151c4;
bool cond:5_1 = !(*(arg4 + 9) & 0x10);
*(arg4 + 0xc) = 0xffffffff;
if (cond:5_1 || !arg4[4])
goto label_14001522b;
rcx_2 = -1;
label_14001552b:
rax_15 = (i_4 + 2) / 3;
if (rax_15 != 1)
goto label_1400154be;
goto label_1400151e5;
}
bool cond:2_1 = *(arg4 + 9) & 0x10;
*(arg4 + 0xc) = 0xffffffff;
if (cond:2_1 && arg4[4])
{
rcx_2 = -1;
rax_15 = (arg3 + 2) / 3;
if (rax_15 == 1)
goto label_14001522b;
label_1400154be:
int32_t i_1 = rax_15 - 1 - rcx_2;
do
{
if (rcx_2 <= 0)
goto label_14001522b;
rcx_2 -= 1;
*(arg4 + 0xc) = rcx_2;
} while (i_1 != -(rcx_2));
goto label_1400151e5;
}
label_14001522b:
if (!arg1)
goto label_140015233;
__pformat_putc(0x2d, arg4);
}
int32_t rax_3 = *(arg4 + 0xc);
if (rax_3 > 0 && (arg4[1] & 0x600) == 0x200)
{
*(arg4 + 0xc) = rax_3 - 1;
int32_t i_2;
do
{
__pformat_putc(0x30, arg4);
i_2 = *(arg4 + 0xc);
*(arg4 + 0xc) = i_2 - 1;
} while (i_2 > 0);
}
int32_t rax_6;
if (i_4 <= 0)
{
__pformat_putc(0x30, arg4);
rax_6 = arg4[2];
if (rax_6 <= 0 && !(*(arg4 + 9) & 8))
{
if (i_4)
goto label_140015399;
arg4[2] = rax_6 - 1;
return rax_6 - 1;
}
label_14001538b:
__pformat_emit_radix_point(arg4);
if (i_4)
{
rax_6 = arg4[2];
label_140015399:
arg4[2] = rax_6 + i_4;
int32_t i_3;
do
{
__pformat_putc(0x30, arg4);
i_3 = i_4;
i_4 += 1;
} while (i_3 != 0xffffffff);
}
}
else
{
while (true)
{
char rax_4 = *rdi;
int32_t rcx_3 = 0x30;
if (rax_4)
{
rdi = &rdi[1];
rcx_3 = rax_4;
}
__pformat_putc(rcx_3, arg4);
int32_t i_5 = i_4;
i_4 -= 1;
if (i_5 == 1)
break;
if (*(arg4 + 9) & 0x10 && arg4[4] && i_4 * 0xaaaaaaab <= 0x55555555)
__pformat_wputchars(&arg4[4], 1, arg4);
}
rax_6 = arg4[2];
if (rax_6 <= 0)
{
if (*(arg4 + 9) & 8)
goto label_14001538b;
arg4[2] = rax_6 - 1;
return rax_6 - 1;
}
__pformat_emit_radix_point(arg4);
}
int32_t result;
while (true)
{
result = arg4[2];
arg4[2] = result - 1;
if (result <= 0)
break;
char rax_8 = *rdi;
int32_t rcx_6 = 0x30;
if (rax_8)
{
rdi = &rdi[1];
rcx_6 = rax_8;
}
__pformat_putc(rcx_6, arg4);
}
return result;
}
int64_t __pformat_emit_efloat(int32_t arg1, char* arg2, int32_t arg3, char** arg4)
{
int32_t r10 = 1;
int64_t rsi = arg3 - 1;
int32_t r8_1 = (arg3 - 1) >> 0x1f;
int32_t rcx_1 = (rsi * 0x66666667) >> 0x22;
int32_t rcx_2 = rcx_1 - r8_1;
if (rcx_1 != r8_1)
{
int32_t rax_3;
int32_t rcx_3;
do
{
rcx_3 = rcx_2 >> 0x1f;
r10 += 1;
rax_3 = (rcx_2 * 0x66666667) >> 0x22;
rcx_2 s/= 0xa;
} while (rax_3 != rcx_3);
}
int32_t rax_5 = *(arg4 + 0x2c);
if (rax_5 == 0xffffffff)
{
*(arg4 + 0x2c) = 2;
rax_5 = 2;
}
int32_t r8_2 = *(arg4 + 0xc);
int32_t rdi = r10;
if (rax_5 >= r10)
rdi = rax_5;
int32_t rax_7 = r8_2 - (rdi + 2);
if (r8_2 <= rdi + 2)
rax_7 = -1;
*(arg4 + 0xc) = rax_7;
__pformat_emit_float(arg1, arg2, 1, arg4);
int32_t rcx_6 = arg4[1];
arg4[2] = *(arg4 + 0x2c);
arg4[1] = rcx_6 | 0x1c0;
__pformat_putc((rcx_6 & 0x20) | 0x45, arg4);
*(arg4 + 0xc) += rdi + 1;
/* tailcall */
return __pformat_int.isra.0(rsi, arg4);
}
int64_t __pformat_efloat(int80_t* arg1, char** arg2)
{
int32_t r8 = arg2[2];
int32_t r8_1;
if (r8 < 0)
{
arg2[2] = 6;
r8_1 = 7;
}
else
r8_1 = r8 + 1;
int80_t var_38 = *arg1;
int32_t var_20;
int32_t var_1c;
void* rax = __pformat_cvt(2, &var_38, r8_1, &var_1c, &var_20);
int32_t r8_2 = var_1c;
if (r8_2 == 0xffff8000)
{
__pformat_emit_inf_or_nan(var_20, rax, arg2);
return __freedtoa(rax);
}
__pformat_emit_efloat(var_20, rax, r8_2, arg2);
return __freedtoa(rax);
}
int64_t __pformat_float(int80_t* arg1, char** arg2)
{
int32_t r8 = arg2[2];
if (r8 < 0)
{
arg2[2] = 6;
r8 = 6;
}
int80_t var_38 = *arg1;
int32_t var_20;
int32_t var_1c;
void* rax = __pformat_cvt(3, &var_38, r8, &var_1c, &var_20);
int32_t r8_1 = var_1c;
if (r8_1 == 0xffff8000)
__pformat_emit_inf_or_nan(var_20, rax, arg2);
else
{
__pformat_emit_float(var_20, rax, r8_1, arg2);
int32_t rax_1 = *(arg2 + 0xc);
while (true)
{
int32_t rdx_4 = rax_1;
rax_1 -= 1;
*(arg2 + 0xc) = rax_1;
if (rdx_4 <= 0)
break;
int16_t rcx_1 = arg2[1];
int32_t rdx_2;
if (!(*rcx_1[1] & 0x40))
rdx_2 = *(arg2 + 0x24);
if (*rcx_1[1] & 0x40 || arg2[5] > rdx_2)
{
*rcx_1[1] &= 0x20;
char* _Stream = *arg2;
if (!*rcx_1[1])
{
_Stream[*(arg2 + 0x24)] = 0x20;
rdx_2 = *(arg2 + 0x24);
rax_1 = *(arg2 + 0xc);
}
else
{
fputc(0x20, _Stream);
rdx_2 = *(arg2 + 0x24);
rax_1 = *(arg2 + 0xc);
}
}
*(arg2 + 0x24) = rdx_2 + 1;
}
}
return __freedtoa(rax);
}
int64_t __pformat_gfloat(int80_t* arg1, char** arg2)
{
int32_t r8 = arg2[2];
if (r8 < 0)
{
arg2[2] = 6;
r8 = 6;
}
else if (!r8)
{
arg2[2] = 1;
r8 = 1;
}
int80_t var_38 = *arg1;
int32_t var_20;
int32_t var_1c;
void* _Str = __pformat_cvt(2, &var_38, r8, &var_1c, &var_20);
int32_t rdi = var_1c;
if (rdi == 0xffff8000)
{
__pformat_emit_inf_or_nan(var_20, _Str, arg2);
return __freedtoa(_Str);
}
int32_t rax_1 = arg2[1] & 0x800;
if (rdi >= 0xfffffffd)
{
int32_t rdx_1 = arg2[2];
if (rdi <= rdx_1)
{
if (!rax_1)
{
int32_t rax_9 = strlen(_Str);
int32_t rax_10 = rax_9 - rdi;
arg2[2] = rax_10;
if (rax_9 - rdi < 0)
{
int32_t rdx_8 = *(arg2 + 0xc);
if (rdx_8 > 0)
*(arg2 + 0xc) = rax_10 + rdx_8;
}
}
else
arg2[2] = rdx_1 - rdi;
__pformat_emit_float(var_20, _Str, rdi, arg2);
while (true)
{
int32_t rax_2 = *(arg2 + 0xc);
*(arg2 + 0xc) = rax_2 - 1;
if (rax_2 <= 0)
break;
__pformat_putc(0x20, arg2);
}
return __freedtoa(_Str);
}
}
int32_t rax_5;
if (rax_1)
rax_5 = arg2[2] - 1;
else
rax_5 = strlen(_Str) - 1;
arg2[2] = rax_5;
__pformat_emit_efloat(var_20, _Str, rdi, arg2);
return __freedtoa(_Str);
}
int64_t __pformat_emit_xfloat.isra.0(uint64_t arg1, int32_t arg2, char** arg3)
{
int32_t r10 = arg3[2];
uint64_t r9 = arg1;
int32_t rcx_4;
int32_t i_4;
int64_t rbp;
int32_t r8;
if (arg2 || arg1)
{
r8 = arg2 - 3;
if (r10 <= 0xe)
goto label_140015a1f;
rbp = r8;
i_4 = 0x10;
if (r9 || r10 > 0)
goto label_140015984;
rcx_4 = arg3[1];
goto label_140015a69;
}
if (r10 <= 0xe)
{
r8 = 0;
label_140015a1f:
uint64_t r9_1 = r9 >> 1;
int64_t rax_5 = 4 << (0xe - r10) << 2;
char rcx_3 = (0xf - r10) << 2;
int64_t rax_6 = rax_5 + r9_1;
if (rax_5 + r9_1 < 0)
{
r8 += 4;
r9 = rax_6 >> 3 >> rcx_3;
}
else
{
uint64_t rax_8 = (rax_6 * 2) >> rcx_3;
r9 = rax_8;
if (!rax_8 && !r10)
{
rcx_4 = arg3[1];
rbp = r8;
goto label_140015a69;
}
}
i_4 = r10 + 1;
rbp = r8;
goto label_140015984;
}
char var_58;
char* i_3;
int32_t r10_4;
int32_t r12_3;
if (r10 > 0)
{
rbp = 0;
r8 = 0;
i_4 = 0x10;
r9 = 0;
label_140015984:
rcx_4 = arg3[1];
i_3 = &var_58;
int32_t i;
do
{
int32_t rax_3 = r9 & 0xf;
char* i_5;
if (i_4 != 1)
{
int32_t r10_1 = arg3[2];
if (r10_1 > 0)
arg3[2] = r10_1 - 1;
i_5 = i_3;
goto label_1400159f2;
}
int32_t r10_3;
if (&var_58 >= i_3 && !(rcx_4 & 0x800))
r10_3 = arg3[2];
if (&var_58 >= i_3 && !(rcx_4 & 0x800) && r10_3 <= 0)
{
if (rax_3)
{
i_5 = i_3;
goto label_1400159f6;
}
if (!r10_3)
{
*i_3 = 0x30;
i_3 = &i_3[1];
}
break;
}
i_5 = &i_3[1];
*i_3 = 0x2e;
label_1400159f2:
if (rax_3)
{
label_1400159f6:
if (rax_3 <= 9)
goto label_1400159b8;
i_3 = &i_5[1];
*i_5 = (rax_3 + 0x37) | (rcx_4 & 0x20);
}
else if (&var_58 < i_5 || arg3[2] >= 0)
{
label_1400159b8:
i_3 = &i_5[1];
*i_5 = rax_3 + 0x30;
}
else
i_3 = i_5;
r9 u>>= 4;
i = i_4;
i_4 -= 1;
} while (i != 1);
if (i_3 == &var_58)
{
if (arg3[2] > 0)
goto label_140015a6e;
goto label_140015a69;
}
r10_4 = *(arg3 + 0xc);
r12_3 = 2;
if (r10_4 <= 0)
goto label_140015a92;
goto label_140015bcc;
}
rcx_4 = arg3[1];
rbp = 0;
r8 = 0;
label_140015a69:
char* rax_9 = &var_58;
if (!(*rcx_4[1] & 8))
goto label_140015a78;
label_140015a6e:
var_58 = 0x2e;
void var_57;
rax_9 = &var_57;
label_140015a78:
r10_4 = *(arg3 + 0xc);
i_3 = &rax_9[1];
*rax_9 = 0x30;
r12_3 = 2;
if (r10_4 <= 0)
goto label_140015a92;
label_140015bcc:
int32_t rdx_5 = arg3[2];
int32_t r9_3 = i_3 - &var_58;
if (rdx_5 > 0)
r9_3 += rdx_5;
int32_t r9_4 = r9_3 + 6;
int32_t rax_16 = r8 >> 0x1f;
int32_t r11_4 = r9_4;
int32_t rdx_10 = (r8 * 0x66666667) >> 0x22;
int32_t rdx_11 = rdx_10 - rax_16;
if (rdx_10 != rax_16)
{
int32_t rax_19;
int32_t rdx_12;
do
{
rdx_12 = rdx_11 >> 0x1f;
r11_4 += 1;
rax_19 = (rdx_11 * 0x66666667) >> 0x22;
rdx_11 s/= 0xa;
} while (rax_19 != rdx_12);
r12_3 = r11_4 - r9_4 + 2;
}
int32_t r10_5;
if (r10_4 <= r11_4)
{
r10_5 = -1;
label_140015d46:
*(arg3 + 0xc) = r10_5;
label_140015a92:
if (rcx_4 & 0x80)
__pformat_putc(0x2d, arg3);
else
{
label_140015a9b:
if (*rcx_4[1] & 1)
__pformat_putc(0x2b, arg3);
else if (rcx_4 & 0x40)
__pformat_putc(0x20, arg3);
}
}
else
{
r10_5 = r10_4 - r11_4;
if (*rcx_4[1] & 6)
goto label_140015d46;
*(arg3 + 0xc) = r10_5 - 1;
int32_t i_1;
do
{
__pformat_putc(0x20, arg3);
i_1 = *(arg3 + 0xc);
*(arg3 + 0xc) = i_1 - 1;
} while (i_1 > 0);
rcx_4 = arg3[1];
if (!(rcx_4 & 0x80))
goto label_140015a9b;
__pformat_putc(0x2d, arg3);
}
__pformat_putc(0x30, arg3);
__pformat_putc((arg3[1] & 0x20) | 0x58, arg3);
int32_t rax_10 = *(arg3 + 0xc);
if (rax_10 > 0 && *(arg3 + 9) & 2)
{
*(arg3 + 0xc) = rax_10 - 1;
int32_t i_2;
do
{
__pformat_putc(0x30, arg3);
i_2 = *(arg3 + 0xc);
*(arg3 + 0xc) = i_2 - 1;
} while (i_2 > 0);
}
if (&var_58 < i_3)
{
do
{
int32_t rcx_9 = i_3[-1];
i_3 -= 1;
if (rcx_9 == 0x2e)
__pformat_emit_radix_point(arg3);
else if (rcx_9 == 0x2c)
{
int16_t rax_12 = arg3[4];
int16_t var_5a = rax_12;
if (rax_12)
__pformat_wputchars(&var_5a, 1, arg3);
}
else
__pformat_putc(rcx_9, arg3);
} while (i_3 != &var_58);
}
while (true)
{
int32_t rax_21 = arg3[2];
arg3[2] = rax_21 - 1;
if (rax_21 <= 0)
break;
__pformat_putc(0x30, arg3);
}
__pformat_putc((arg3[1] & 0x20) | 0x50, arg3);
arg3[1] = _mm_unpacklo_epi32(arg3[1] | 0x1c0, r12_3 + *(arg3 + 0xc));
/* tailcall */
return __pformat_int.isra.0(rbp, arg3);
}
uint64_t __mingw_pformat(int32_t arg1, char* arg2, int32_t arg3, char* arg4, int64_t* arg5)
{
int64_t* r13 = arg5;
int32_t rdi_1 = arg1 & 0x6000;
int32_t* rax = _errno();
int32_t _Character = *arg4;
char* _Stream_1 = arg2;
int32_t rax_1 = *rax;
void* rbx_1 = &arg4[1];
int32_t var_70 = rdi_1;
int32_t var_6c = 0xffffffff;
int32_t var_5c = 0;
int64_t var_68 = -0x200000001;
int16_t var_60 = 0;
char _Character_2 = _Character;
int16_t var_58 = 0;
int32_t _Character_1 = 0;
int32_t var_4c = 0xffffffff;
if (_Character)
{
do
{
if (_Character != 0x25)
{
int16_t rdx = var_70;
if (*rdx[1] & 0x40 || arg3 > _Character_1)
{
*rdx[1] &= 0x20;
char* _Stream = _Stream_1;
if (*rdx[1])
fputc(_Character, _Stream);
else
_Stream[_Character_1] = _Character_2;
}
_Character_1 += 1;
}
else
{
char rax_2 = *rbx_1;
var_70 = rdi_1;
var_6c = -1;
if (!rax_2)
break;
void* rsi_3 = rbx_1;
int32_t* r11_1 = &var_6c;
int32_t r10_1 = 0;
int32_t r14_1 = 0;
while (true)
{
int32_t rcx = rax_2;
long double var_a8;
int16_t _State;
int32_t rax_13;
uint64_t* rcx_4;
int80_t* rdx_16;
long double* rdx_18;
long double* rdx_20;
void* rbx_5;
int64_t* rbx_6;
if (rax_2 - 0x20 > 0x5a)
{
label_140015f4b:
if (rax_2 - 0x30 > 9 || r14_1 > 3)
{
label_140016171:
__pformat_putc(0x25, &_Stream_1);
break;
break;
}
if (r14_1)
goto label_1400166b9;
r14_1 = 1;
label_140015f6c:
if (!r11_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
uint64_t rax_4 = *r11_1;
if (rax_4 < 0)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
*r11_1 = rcx - 0x30;
}
else
{
*r11_1 = rcx + ((rax_4 * 5) << 1) - 0x30;
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
}
}
else
switch (rax_2)
{
case 0x20:
{
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
var_70 |= 0x40;
}
break;
}
case 0x21:
case 0x22:
case 0x24:
case 0x26:
case 0x28:
case 0x29:
case 0x2c:
case 0x2f:
case 0x31:
case 0x32:
case 0x33:
case 0x34:
case 0x35:
case 0x36:
case 0x37:
case 0x38:
case 0x39:
case 0x3a:
case 0x3b:
case 0x3c:
case 0x3d:
case 0x3e:
case 0x3f:
case 0x40:
case 0x42:
case 0x44:
case 0x48:
case 0x4a:
case 0x4b:
case 0x4d:
case 0x4e:
case 0x4f:
case 0x50:
case 0x51:
case 0x52:
case 0x54:
case 0x55:
case 0x56:
case 0x57:
case 0x59:
case 0x5a:
case 0x5b:
case 0x5c:
case 0x5d:
case 0x5e:
case 0x5f:
case 0x60:
case 0x62:
case 0x6b:
case 0x71:
case 0x72:
case 0x76:
case 0x77:
case 0x79:
{
goto label_140015f4b;
}
case 0x23:
{
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
var_70 |= 0x800;
}
break;
}
case 0x25:
{
rbx_1 = rsi_3 + 1;
__pformat_putc(0x25, &_Stream_1);
break;
break;
break;
}
case 0x27:
{
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
var_70 |= 0x1000;
_State = 0;
wchar16 _DstCh;
int32_t rax_29 = mbrtowc(&_DstCh, localeconv()->thousands_sep,
0x10, &_State);
if (rax_29 > 0)
wchar16 _DstCh_1 = _DstCh;
int32_t var_5c_1 = rax_29;
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
break;
}
case 0x2a:
{
if (!r11_1)
goto label_140016371;
if (r14_1 & 0xfffffffd)
{
rax_2 = *(rsi_3 + 1);
r11_1 = nullptr;
rsi_3 += 1;
r14_1 = 4;
}
else
{
int32_t rax_30 = *r13;
*r11_1 = rax_30;
if (rax_30 >= 0)
goto label_1400165d3;
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
r13 = &r13[1];
rsi_3 += 1;
r11_1 = nullptr;
var_68 = 0xffffffff;
r14_1 = 2;
}
else
{
int32_t rax_37;
*rax_37[1] = *var_70[1] | 4;
var_70 = _mm_unpacklo_epi32(rax_37, -(var_6c));
label_1400165d3:
rax_2 = *(rsi_3 + 1);
r13 = &r13[1];
rsi_3 += 1;
r11_1 = nullptr;
}
}
break;
}
case 0x2b:
{
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
var_70 |= 0x100;
}
break;
}
case 0x2d:
{
if (r14_1)
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
}
else
{
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
var_70 |= 0x400;
}
break;
}
case 0x2e:
{
if (r14_1 <= 1)
{
rax_2 = *(rsi_3 + 1);
r14_1 = 2;
rsi_3 += 1;
var_68 = 0;
r11_1 = &var_68;
}
else
{
label_140016371:
rax_2 = *(rsi_3 + 1);
r14_1 = 4;
rsi_3 += 1;
}
break;
}
case 0x30:
{
if (r14_1)
{
if (r14_1 == 4)
goto label_140016171;
rcx = 0x30;
label_1400166b9:
if (r14_1 != 2)
goto label_140015f6c;
r14_1 = 3;
goto label_140015f6c;
}
rax_2 = *(rsi_3 + 1);
rsi_3 += 1;
var_70 |= 0x200;
break;
}
case 0x41:
{
rax_13 = var_70;
rcx_4 = *r13;
if (rax_13 & 4)
goto label_1400161ae;
goto label_1400163b5;
}
case 0x43:
{
var_68 = 0xffffffff;
rbx_5 = &r13[1];
label_14001645f:
int16_t _State_1 = *r13;
r13 = rbx_5;
rbx_1 = rsi_3 + 1;
_State = _State_1;
__pformat_wputchars(&_State, 1, &_Stream_1);
break;
break;
break;
}
case 0x45:
{
rdx_20 = *r13;
if (var_70 & 4)
goto label_140016320;
goto label_1400164a5;
}
case 0x46:
{
rdx_18 = *r13;
if (var_70 & 4)
goto label_1400162f2;
goto label_1400164d6;
}
case 0x47:
{
rdx_16 = *r13;
if (var_70 & 4)
goto label_1400162b5;
goto label_140016507;
}
case 0x49:
{
rax_2 = *(rsi_3 + 1);
if (rax_2 == 0x36)
{
if (*(rsi_3 + 2) != 0x34)
goto label_140016171;
rax_2 = *(rsi_3 + 3);
r10_1 = 3;
rsi_3 += 3;
r14_1 = 4;
}
else if (rax_2 != 0x33)
{
rsi_3 += 1;
r10_1 = 3;
r14_1 = 4;
}
else
{
if (*(rsi_3 + 2) != 0x32)
goto label_140016171;
rax_2 = *(rsi_3 + 3);
r10_1 = 2;
rsi_3 += 3;
r14_1 = 4;
}
break;
}
case 0x4c:
{
rax_2 = *(rsi_3 + 1);
r14_1 = 4;
rsi_3 += 1;
var_70 |= 4;
break;
}
case 0x53:
{
rbx_6 = &r13[1];
label_14001666a:
wchar16* _String = *r13;
if (!_String)
_String = u"(null)";
int32_t rax_33 = var_68;
if (rax_33 < 0)
__pformat_wputchars(_String, wcslen(_String), &_Stream_1);
else
__pformat_wputchars(_String, wcsnlen(_String, rax_33),
&_Stream_1);
goto label_14001628c;
}
case 0x58:
case 0x6f:
case 0x75:
case 0x78:
{
var_70 &= 0xfffffeff;
uint64_t rax_9;
if (r10_1 == 3)
rax_9 = *r13;
else if (r10_1 == 2)
rax_9 = *r13;
else
{
int32_t rax_8 = *r13;
if (r10_1 == 1)
rax_9 = rax_8;
else
{
rax_9 = rax_8;
if (r10_1 != 5)
rax_9 = rax_8;
}
}
_State = rax_9;
if (rcx == 0x75)
__pformat_int.isra.0(rax_9, &_Stream_1);
else
__pformat_xint.isra.0(rcx, rax_9, &_Stream_1);
goto label_1400162c8;
}
case 0x61:
{
rcx_4 = *r13;
rax_13 = var_70 | 0x20;
var_70 = rax_13;
int32_t rdx_14;
if (rax_13 & 4)
{
label_1400161ae:
int32_t rbx_4 = rcx_4[1];
uint64_t rcx_5 = *rcx_4;
int32_t r10_2 = rbx_4;
int32_t r9_3 = (rcx_5 >> 0x20 & 0x7fffffff) | rcx_5;
if ((0xfffe - ((-(r9_3) | r9_3) >> 0x1f | (r10_2 * 2))) >> 0x10)
{
__pformat_emit_inf_or_nan(0, "NaN", &_Stream_1);
goto label_1400162c8;
}
if (rbx_4 < 0)
{
rax_13 |= 0x80;
var_70 = rax_13;
}
rdx_14 = rbx_4 & 0x7fff;
if (!rdx_14)
{
if (rcx_5)
rdx_14 = -0x3ffe;
__pformat_emit_xfloat.isra.0(rcx_5, rdx_14, &_Stream_1);
goto label_1400162c8;
}
if (rdx_14 != 0x7fff || r9_3)
{
rdx_14 -= 0x3fff;
__pformat_emit_xfloat.isra.0(rcx_5, rdx_14, &_Stream_1);
goto label_1400162c8;
}
__pformat_emit_inf_or_nan(r10_2 & 0x8000, "Inf", &_Stream_1);
goto label_1400162c8;
}
label_1400163b5:
uint32_t r8_9 = rcx_4 >> 0x20;
if (0x7ff00000 - ((-(rcx_4) | rcx_4) >> 0x1f | (r8_9 & 0x7fffffff))
< 0)
{
__pformat_emit_inf_or_nan(0, "NaN", &_Stream_1);
goto label_1400162c8;
}
uint64_t* var_c8_1;
var_c8_1 = rcx_4;
int32_t var_c0;
if (var_c0 < 0)
{
rax_13 |= 0x80;
var_70 = rax_13;
}
int32_t r8_10 = r8_9 & 0x7ff00000;
int32_t rax_23 = (r8_9 & 0xfffff) | rcx_4;
rcx_4 = rax_23;
rcx_4 |= r8_10 != 0x7ff00000;
if (!rcx_4 && rax_23 | r8_10)
{
__pformat_emit_inf_or_nan(var_c0 & 0x8000, "Inf", &_Stream_1);
goto label_1400162c8;
}
rdx_14 = var_c0 & 0x7fff;
uint64_t* rax_31 = var_c8_1;
if (!rdx_14)
{
label_140016749:
if (rax_31)
rdx_14 = -0x3fb;
}
else if (rdx_14 > 0x3c00)
{
if (!rdx_14)
goto label_140016749;
rdx_14 -= 0x3ffc;
}
else
{
rax_31 u>>= (0x3c01 - rdx_14);
rdx_14 = (rdx_14 + 0x3c01 - rdx_14) - 0x3ffc;
}
__pformat_emit_xfloat.isra.0(rax_31 >> 3, rdx_14, &_Stream_1);
goto label_1400162c8;
}
case 0x63:
{
rbx_5 = &r13[1];
var_68 = 0xffffffff;
if (r10_1 - 2 <= 1)
goto label_14001645f;
_State = *r13;
r13 = rbx_5;
rbx_1 = rsi_3 + 1;
__pformat_putchars(&_State, 1, &_Stream_1);
break;
break;
}
case 0x64:
case 0x69:
{
var_70 |= 0x80;
int64_t rcx_1;
if (r10_1 == 3)
rcx_1 = *r13;
else
{
rcx_1 = *r13;
if (r10_1 != 2)
{
if (r10_1 == 1)
rcx_1 = rcx_1;
else if (r10_1 == 5)
rcx_1 = rcx_1;
}
}
r13 = &r13[1];
rbx_1 = rsi_3 + 1;
__pformat_int.isra.0(rcx_1, &_Stream_1);
break;
break;
break;
}
case 0x65:
{
rdx_20 = *r13;
int32_t rax_20 = var_70 | 0x20;
var_70 = rax_20;
if (!(rax_20 & 4))
{
label_1400164a5:
var_a8 = rdx_20;
__pformat_efloat(&var_a8, &_Stream_1);
goto label_1400162c8;
}
label_140016320:
var_a8 = *rdx_20;
__pformat_efloat(&var_a8, &_Stream_1);
goto label_1400162c8;
}
case 0x66:
{
rdx_18 = *r13;
int32_t rax_18 = var_70 | 0x20;
var_70 = rax_18;
if (!(rax_18 & 4))
{
label_1400164d6:
var_a8 = rdx_18;
__pformat_float(&var_a8, &_Stream_1);
goto label_1400162c8;
}
label_1400162f2:
var_a8 = *rdx_18;
__pformat_float(&var_a8, &_Stream_1);
goto label_1400162c8;
}
case 0x67:
{
rdx_16 = *r13;
int32_t rax_16 = var_70 | 0x20;
var_70 = rax_16;
if (rax_16 & 4)
{
label_1400162b5:
var_a8 = *rdx_16;
__pformat_gfloat(&var_a8, &_Stream_1);
goto label_1400162c8;
}
label_140016507:
var_a8 = rdx_16;
__pformat_gfloat(&var_a8, &_Stream_1);
label_1400162c8:
r13 = &r13[1];
rbx_1 = rsi_3 + 1;
break;
break;
break;
}
case 0x68:
{
rax_2 = *(rsi_3 + 1);
if (rax_2 == 0x68)
{
rax_2 = *(rsi_3 + 2);
r10_1 = 5;
rsi_3 += 2;
r14_1 = 4;
}
else
{
rsi_3 += 1;
r10_1 = 1;
r14_1 = 4;
}
break;
}
case 0x6a:
case 0x74:
case 0x7a:
{
rax_2 = *(rsi_3 + 1);
r10_1 = 3;
rsi_3 += 1;
r14_1 = 4;
break;
}
case 0x6c:
{
rax_2 = *(rsi_3 + 1);
if (rax_2 == 0x6c)
{
rax_2 = *(rsi_3 + 2);
r10_1 = 3;
rsi_3 += 2;
r14_1 = 4;
}
else
{
rsi_3 += 1;
r10_1 = 2;
r14_1 = 4;
}
break;
}
case 0x6d:
{
rbx_1 = rsi_3 + 1;
__pformat_puts(strerror(rax_1), &_Stream_1);
break;
break;
break;
}
case 0x6e:
{
int64_t* rdx_12 = *r13;
int64_t _Character_3 = _Character_1;
if (r10_1 == 5)
*rdx_12 = _Character_3;
else if (r10_1 == 1)
*rdx_12 = _Character_3;
else if (r10_1 == 2 || r10_1 != 3)
*rdx_12 = _Character_3;
else
*rdx_12 = _Character_3;
goto label_1400162c8;
}
case 0x70:
{
if (!r14_1 && var_70 == rdi_1)
{
var_68 = 0x10;
int32_t rax_35;
*rax_35[1] = *rdi_1[1] | 2;
var_70 = rax_35;
}
uint64_t rdx_10 = *r13;
r13 = &r13[1];
rbx_1 = rsi_3 + 1;
__pformat_xint.isra.0(0x78, rdx_10, &_Stream_1);
break;
break;
break;
}
case 0x73:
{
rbx_6 = &r13[1];
if (r10_1 - 2 <= 1)
goto label_14001666a;
__pformat_puts(*r13, &_Stream_1);
label_14001628c:
r13 = rbx_6;
rbx_1 = rsi_3 + 1;
break;
break;
break;
}
}
if (!rax_2)
goto label_140015fa0;
}
}
_Character_2 = *rbx_1;
rbx_1 += 1;
_Character = _Character_2;
} while (_Character);
label_140015fa0:
_Character = _Character_1;
}
return _Character;
}
void* __rv_alloc_D2A(int32_t arg1)
{
int32_t rbx = 0;
if (arg1 > 0x1b)
{
int32_t rax_1 = 4;
do
{
rax_1 *= 2;
rbx += 1;
} while (rax_1 + 0x17 < arg1);
}
int64_t* rax_2 = __Balloc_D2A(rbx);
*rax_2 = rbx;
return rax_2 + 4;
}
void* __nrv_alloc_D2A(char* arg1, void** arg2, int32_t arg3)
{
int32_t rbx;
if (arg3 <= 0x1b)
rbx = 0;
else
{
int32_t rax_1 = 4;
rbx = 0;
do
{
rax_1 *= 2;
rbx += 1;
} while (arg3 > rax_1 + 0x17);
}
int64_t* rax_2 = __Balloc_D2A(rbx);
void* rdx_1 = &arg1[1];
*rax_2 = rbx;
char rcx_1 = *arg1;
*(rax_2 + 4) = rcx_1;
void* rax_3 = rax_2 + 4;
if (rcx_1)
{
char i;
do
{
i = *rdx_1;
rax_3 += 1;
rdx_1 += 1;
*rax_3 = i;
} while (i);
}
if (arg2)
*arg2 = rax_3;
return rax_2 + 4;
}
int64_t __freedtoa(void* arg1)
{
int32_t rcx = *(arg1 - 4);
*(arg1 + 4) = _mm_unpacklo_epi32(rcx, 1 << rcx);
/* tailcall */
return __Bfree_D2A(arg1 - 4);
}
uint64_t __quorem_D2A(void* arg1, void* arg2)
{
int32_t rdi = *(arg2 + 0x14);
if (*(arg1 + 0x14) < rdi)
return 0;
void* rbx_1 = arg2 + 0x18;
int32_t rdi_1 = rdi - 1;
void* rbp_1 = rbx_1 + (rdi_1 << 2);
int32_t* r11_3 = &(arg1 + 0x18)[rdi_1];
int32_t r8_1 = *r11_3;
int32_t rcx = *rbp_1 + 1;
uint32_t temp0_1 = COMBINE(0, r8_1) / rcx;
uint32_t rsi_1 = temp0_1;
if (r8_1 >= rcx)
{
void* r10_1 = rbx_1;
void* r9_1 = arg1 + 0x18;
uint64_t rax_4 = 0;
uint64_t r8_2 = 0;
do
{
uint64_t rdx_1 = *r10_1;
r10_1 += 4;
r9_1 += 4;
int64_t rdx_3 = rdx_1 * temp0_1 + rax_4;
rax_4 = rdx_3 >> 0x20;
uint64_t rcx_3 = *(r9_1 - 4) - rdx_3 - r8_2;
*(r9_1 - 4) = rcx_3;
r8_2 = rcx_3 >> 0x20 & 1;
} while (rbp_1 >= r10_1);
}
if (r8_1 >= rcx && !*r11_3)
{
while (true)
{
r11_3 -= 4;
if (arg1 + 0x18 >= r11_3)
break;
if (*r11_3)
break;
rdi_1 -= 1;
}
*(arg1 + 0x14) = rdi_1;
if (__cmp_D2A(arg1, arg2) >= 0)
goto label_140016a94;
}
else if (__cmp_D2A(arg1, arg2) >= 0)
{
label_140016a94:
int32_t* rcx_5 = arg1 + 0x18;
uint64_t rdx_6 = 0;
do
{
uint64_t rax_7 = *rcx_5;
rbx_1 += 4;
rcx_5 = &rcx_5[1];
uint64_t rax_9 = rax_7 - *(rbx_1 - 4) - rdx_6;
rcx_5[-1] = rax_9;
rdx_6 = rax_9 >> 0x20 & 1;
} while (rbp_1 >= rbx_1);
int32_t* rax_11 = &(arg1 + 0x18)[rdi_1];
if (!*rax_11)
{
while (true)
{
rax_11 -= 4;
if (arg1 + 0x18 >= rax_11)
break;
if (*rax_11)
break;
rdi_1 -= 1;
}
*(arg1 + 0x14) = rdi_1;
rsi_1 = temp0_1 + 1;
}
else
rsi_1 = temp0_1 + 1;
}
return rsi_1;
}
void* __gdtoa(int32_t* arg1, int32_t arg2, int32_t* arg3, int32_t* arg4, int32_t arg5, int32_t arg6, int32_t* arg7, void** arg8)
{
int32_t rdi = *arg4;
int32_t r15 = arg5;
int32_t r14 = arg6;
int32_t* rbx = arg4;
*arg4 = rdi & 0xffffffcf;
int32_t rax_5 = rdi & 7;
char* rcx_8;
void** rdx_16;
int32_t r8_4;
if (rax_5 == 3)
{
r8_4 = 8;
rdx_16 = arg8;
rcx_8 = "Infinity";
*arg7 = 0xffff8000;
}
else
{
int32_t rsi_2 = rdi & 4;
int32_t var_b4_1 = rsi_2;
if (!rsi_2)
{
if (!rax_5)
{
*arg7 = 1;
return __nrv_alloc_D2A(U"0", arg8, 1);
}
int32_t rbp_1 = *arg1;
int32_t rcx = 0;
int32_t rax_6 = 0x20;
if (rbp_1 > 0x20)
{
do
{
rax_6 *= 2;
rcx += 1;
} while (rbp_1 > rax_6);
}
int64_t* rsi_3 = __Balloc_D2A(rcx);
int32_t* rax_8 = arg3;
void* rdx = &rsi_3[3];
int64_t r8_2 = (rbp_1 - 1) >> 5;
void* rcx_1 = &rax_8[r8_2];
do
{
int32_t r9 = *rax_8;
rax_8 = &rax_8[1];
rdx += 4;
*(rdx - 4) = r9;
} while (rcx_1 >= rax_8);
void* rax_9 = (r8_2 << 2) + 4;
if (rcx_1 + 1 < arg3 + 1)
rax_9 = 4;
int64_t rax_10 = rax_9 >> 2;
int32_t r13_1 = rax_10;
void* rax_11 = rsi_3 + (rax_10 << 2);
while (true)
{
int32_t rdx_3 = r13_1;
r13_1 -= 1;
if (*(rax_11 + 0x14))
{
*(rsi_3 + 0x14) = rdx_3;
uint64_t rflags_1;
int32_t temp0_1;
temp0_1 = __bsr_gprv_memv(*(rsi_3 + (r13_1 << 2) + 0x18));
r13_1 = (rdx_3 << 5) - (temp0_1 ^ 0x1f);
break;
}
rax_11 -= 4;
if (!r13_1)
{
*(rsi_3 + 0x14) = 0;
break;
}
}
int32_t rax_14 = __trailz_D2A(rsi_3);
int32_t var_4c = rax_14;
int32_t var_a8_1 = arg2;
if (rax_14)
{
__rshift_D2A(rsi_3, rax_14);
int32_t rax_30 = var_4c;
r13_1 -= rax_30;
var_a8_1 = rax_30 + arg2;
}
if (!*(rsi_3 + 0x14))
{
__Bfree_D2A(rsi_3);
*arg7 = 1;
return __nrv_alloc_D2A(U"0", arg8, 1);
}
double zmm0_1 = __b2d_D2A(rsi_3, &var_4c);
int32_t r8_3 = var_a8_1 + r13_1;
uint64_t rdx_10 = (zmm0_1 >> 0x20 & 0xfffff) | 0x3ff00000;
uint64_t rax_18 = zmm0_1 | rdx_10 << 0x20;
int32_t r9_3 = 1 - r8_3;
if (r8_3 - 1 >= 0)
r9_3 = r8_3 - 1;
zmm0_1 = (rax_18 - 1.5) * 0.28952965460216801 + 0.1760912590558
+ (r8_3 - 1) * 0.30102999566398098;
if (r9_3 - 0x435 > 0)
zmm0_1 = zmm0_1 + (r9_3 - 0x435) * 7.0000000000000003e-17;
int32_t r10_2 = zmm0_1;
int32_t var_ac_1 = r10_2;
if (0.0 > zmm0_1)
{
int64_t zmm1_1 = r10_2;
zmm1_1 - zmm0_1;
if (FCMP_UO(zmm1_1, zmm0_1) || !(zmm1_1 == zmm0_1))
var_ac_1 -= 1;
}
uint64_t rax_20 = rax_18 | (rdx_10 + ((r8_3 - 1) << 0x14)) << 0x20;
int64_t rdx_14 = var_ac_1;
int32_t rax_22 = r13_1 - (r8_3 - 1);
int32_t r9_7 = rax_22 - 1;
int32_t var_98_1;
int32_t var_78_1;
if (rdx_14 > 0x16)
var_78_1 = 1;
else
{
if (!(*(&__tens_D2A + (rdx_14 << 3)) > rax_20))
{
var_98_1 = 0;
var_78_1 = 0;
if (rax_22 <= 0)
{
r9_7 = 0;
var_98_1 = 1 - rax_22;
}
goto label_140016de4;
}
var_ac_1 -= 1;
var_78_1 = 0;
}
var_98_1 = 0;
if (r9_7 < 0)
{
r9_7 = 0;
var_98_1 = 1 - rax_22;
}
int32_t var_90_1;
int32_t var_7c_1;
if (var_ac_1 >= 0)
{
label_140016de4:
var_7c_1 = 0;
r9_7 += var_ac_1;
var_90_1 = var_ac_1;
}
else
{
int32_t rax_31 = var_ac_1;
var_ac_1 = 0;
var_98_1 -= rax_31;
var_90_1 = rax_31;
var_7c_1 = -(rax_31);
}
int32_t var_b0_1;
void* result_1;
uint64_t var_88;
int32_t var_80_1;
char var_60_1;
int32_t var_5c_1;
int32_t r9_9;
uint64_t r10_5;
if (r15 <= 9)
{
if (r15 <= 5)
{
var_60_1 = r8_3 + 0x3fd <= 0x7f7;
if (r15 == 4)
goto label_140017c8c;
if (r15 == 5)
goto label_140017b08;
if (r15 == 2)
{
var_88 = 0;
goto label_140016f8f;
}
if (r15 != 3)
goto label_1400171fe;
var_88 = 0;
goto label_1400172b4;
}
var_60_1 = 0;
r15 -= 4;
int32_t rax_33;
int32_t rcx_15;
if (r15 == 4)
{
label_140017c8c:
var_88 = 1;
label_140016f8f:
rcx_15 = 1;
if (r14 > 0)
rcx_15 = r14;
rax_33 = rcx_15;
var_5c_1 = rcx_15;
r14 = rcx_15;
var_b0_1 = rcx_15;
}
else
{
if (r15 != 5)
{
var_88 = 0;
if (r15 == 2)
goto label_140016f8f;
r15 = 3;
goto label_1400172b4;
}
label_140017b08:
var_88 = 1;
label_1400172b4:
int32_t rax_52 = var_90_1 + r14;
var_5c_1 = rax_52;
rax_33 = 1;
var_b0_1 = rax_52 + 1;
if (rax_52 + 1 > 0)
rax_33 = rax_52 + 1;
rcx_15 = rax_33;
}
var_4c = rax_33;
r9_9 = r9_7;
result_1 = __rv_alloc_D2A(rcx_15);
int32_t rax_35 = arg1[3];
r10_5 = rax_20;
var_80_1 = rax_35 - 1;
if (rax_35 == 1)
goto label_14001701a;
goto label_140016feb;
}
r15 = 0;
var_60_1 = r8_3 + 0x3fd <= 0x7f7;
label_1400171fe:
var_4c = rbp_1 * 0.30103000000000002 + 3;
r9_9 = r9_7;
result_1 = __rv_alloc_D2A(rbp_1 * 0.30103000000000002 + 3);
int32_t rax_49 = arg1[3];
r10_5 = rax_20;
var_80_1 = rax_49 - 1;
int32_t var_a8_2;
void* result;
int32_t var_74_2;
void* result_3;
void* result_4;
char rdx_33;
int32_t rbp_3;
int32_t rdi_4;
int64_t* rdi_7;
int64_t* r11_5;
uint128_t zmm0_3;
uint128_t zmm1_3;
uint128_t zmm2;
double zmm3;
if (rax_49 == 1)
{
r14 = 0;
var_b0_1 = 0xffffffff;
if (var_a8_1 < 0)
{
var_5c_1 = 0xffffffff;
label_140017460:
int32_t rbp_2 = rbp_1 - r13_1;
int32_t rdx_39 = arg1[1];
int32_t rax_61 = rbp_2 + 1;
var_4c = rax_61;
int32_t rax_122;
if (var_a8_1 - rbp_2 < rdx_39)
{
if (!((r15 - 3) & 0xfffffffd))
goto label_140017b62;
rax_61 = var_a8_1 - rdx_39 + 1;
int32_t rcx_27;
rcx_27 = r15 > 1;
var_4c = rax_61;
rdx_39 = var_b0_1 > 0;
if (!(rcx_27 & rdx_39) || rax_61 <= var_b0_1)
goto label_1400174b9;
rax_122 = var_b0_1 - 1;
if (var_7c_1 < rax_122)
goto label_140017cda;
r9_9 += var_b0_1;
var_4c = var_b0_1;
rbp_3 = var_7c_1 - rax_122;
var_74_2 = var_98_1;
var_98_1 += var_b0_1;
}
else if (r15 <= 1)
{
label_1400174b9:
r9_9 += rax_61;
rbp_3 = var_7c_1;
var_74_2 = var_98_1;
var_98_1 += rax_61;
}
else
{
label_140017b62:
rax_122 = var_b0_1 - 1;
if (var_7c_1 < rax_122)
{
label_140017cda:
int32_t rdi_19 = var_7c_1;
rbp_3 = 0;
var_7c_1 = rax_122;
var_ac_1 += rax_122 - rdi_19;
var_74_2 = var_98_1;
var_4c = var_b0_1;
r9_9 += var_b0_1;
var_98_1 += var_b0_1;
}
else
{
rbp_3 = var_7c_1 - rax_122;
if (var_b0_1 >= 0)
{
var_4c = var_b0_1;
r9_9 += var_b0_1;
var_74_2 = var_98_1;
var_98_1 += var_b0_1;
}
else
{
var_4c = 0;
var_74_2 = var_98_1 - var_b0_1;
}
}
}
var_88 = 1;
rdi_7 = __i2b_D2A(1);
goto label_1400174fa;
}
var_88 = 1;
var_5c_1 = 0xffffffff;
if (var_90_1 > arg1[5])
{
label_140017453:
if (var_88)
goto label_140017460;
label_140017754:
rdi_7 = nullptr;
rbp_3 = var_7c_1;
var_74_2 = var_98_1;
label_1400174fa:
if (var_74_2 > 0 && r9_9 > 0)
{
int32_t rax_68 = var_74_2;
if (var_74_2 > r9_9)
rax_68 = r9_9;
var_98_1 -= rax_68;
var_4c = rax_68;
r9_9 -= rax_68;
var_74_2 -= rax_68;
}
if (var_7c_1)
{
if (!var_88 || !rbp_3)
rsi_3 = __pow5mult_D2A(rsi_3, var_7c_1);
else
{
uint64_t var_70;
var_70 = r9_9;
int64_t* rax_130 = __pow5mult_D2A(rdi_7, rbp_3);
rdi_7 = rax_130;
var_a8_1 = __mult_D2A(rax_130, rsi_3);
__Bfree_D2A(rsi_3);
rsi_3 = var_a8_1;
r9_9 = var_70;
if (var_7c_1 != rbp_3)
rsi_3 = __pow5mult_D2A(rsi_3, var_7c_1 - rbp_3);
}
}
int32_t r9_10 = r9_9;
r11_5 = __i2b_D2A(1);
int32_t rbp_4;
if (var_ac_1)
{
r9_10 = r9_9;
r11_5 = __pow5mult_D2A(r11_5, var_ac_1);
if (r15 <= 1 && r13_1 == 1 && arg2 > arg1[1] + 1)
{
var_98_1 += 1;
r9_10 += 1;
var_ac_1 = 1;
}
else
var_ac_1 = 0;
uint64_t rflags_2;
int32_t temp0_4;
temp0_4 = __bsr_gprv_memv(*(r11_5 + ((*(r11_5 + 0x14) - 1) << 2) + 0x18));
rbp_4 = temp0_4 ^ 0x1f;
}
else
{
if (r15 <= 1 && r13_1 == 1 && arg2 > arg1[1] + 1)
{
var_98_1 += 1;
r9_10 += 1;
var_ac_1 = 1;
}
rbp_4 = 0x1f;
}
int32_t rbp_7 = (rbp_4 - r9_10 - 4) & 0x1f;
var_4c = rbp_7;
int32_t rdx_42 = rbp_7;
int32_t rax_73 = var_98_1 + rbp_7;
if (rax_73 > 0)
{
int32_t var_a8_4;
var_a8_4 = r11_5;
int64_t* rax_74 = __lshift_D2A(rsi_3, rax_73);
rdx_42 = var_4c;
r11_5 = var_a8_4;
rsi_3 = rax_74;
}
int32_t rdx_44 = rdx_42 + r9_10;
if (rdx_44 > 0)
r11_5 = __lshift_D2A(r11_5, rdx_44);
int32_t* r12;
r12 = r15 > 2;
if (!var_78_1)
{
label_1400175f0:
if (var_b0_1 <= 0 && r12)
goto label_140017606;
var_a8_2 = var_90_1 + 1;
if (!var_88)
goto label_140017a08;
goto label_140017790;
}
int32_t var_c0;
var_c0 = r11_5;
int32_t rax_101 = __cmp_D2A(rsi_3, r11_5);
r11_5 = var_c0;
if (rax_101 >= 0)
goto label_1400175f0;
r11_5 = var_c0;
rsi_3 = __multadd_D2A(rsi_3, 0xa, 0);
int32_t rax_104;
rax_104 = var_5c_1 <= 0;
char r12_3 = r12 & rax_104;
void* result_5;
void* result_8;
int64_t* r11_7;
int32_t r13_4;
void* result_10;
int64_t* r15_2;
if (var_88)
{
r11_5 = var_c0;
rdi_7 = __multadd_D2A(rdi_7, 0xa, 0);
if (r12_3)
{
label_14001808e:
var_90_1 -= 1;
var_b0_1 = var_5c_1;
label_140017606:
if (var_b0_1)
goto label_14001766f;
int64_t* rax_78 = __multadd_D2A(r11_5, 5, 0);
r11_5 = rax_78;
if (__cmp_D2A(rsi_3, rax_78) <= 0)
goto label_14001766f;
result = result_1;
var_a8_2 = var_90_1 + 2;
goto label_140017386;
}
var_a8_2 = var_90_1;
var_b0_1 = var_5c_1;
label_140017790:
int32_t rdx_49 = var_74_2 + rbp_7;
if (rdx_49 > 0)
{
var_c0 = r11_5;
r11_5 = var_c0;
rdi_7 = __lshift_D2A(rdi_7, rdx_49);
}
int64_t* r12_2 = rdi_7;
if (var_ac_1)
{
var_c0 = r11_5;
int64_t* rax_140 = __Balloc_D2A(rdi_7[1]);
memcpy(&rax_140[2], &rdi_7[2], (*(rdi_7 + 0x14) << 2) + 8);
r11_5 = var_c0;
r12_2 = __lshift_D2A(rax_140, 1);
}
var_90_1 = rbx;
int32_t rax_86 = 1;
var_c0 = r11_5;
void* result_7 = result_1;
while (true)
{
var_4c = rax_86;
int32_t rax_92 = __quorem_D2A(rsi_3, var_c0);
r13_4 = rax_92 + 0x30;
int32_t rax_93 = __cmp_D2A(rsi_3, rdi_7);
int64_t* rax_94 = __diff_D2A(var_c0, r12_2);
int32_t rdx_50;
void* result_11;
if (rax_94[2])
{
__Bfree_D2A(rax_94);
rdx_50 = 1;
}
else
{
var_98_1 = rax_94;
int32_t* var_c8;
var_c8 = __cmp_D2A(rsi_3, rax_94);
__Bfree_D2A(var_98_1);
rdx_50 = var_c8 | r15;
if (rdx_50)
rdx_50 = var_c8;
else if (!((*arg3 & 1) | var_80_1))
{
result_11 = result_7;
r11_7 = var_c0;
rbx = var_90_1;
if (r13_4 == 0x39)
goto label_14001805c;
if (rax_93 <= 0)
{
var_b4_1 = 0x10;
if (*(rsi_3 + 0x14) <= 1)
{
int32_t rax_156;
rax_156 = rsi_3[3];
var_b4_1 = rax_156 << 4;
}
}
else
{
r13_4 = rax_92 + 0x31;
var_b4_1 = 0x20;
}
result_8 = result_11 + 1;
r15_2 = rdi_7;
*result_11 = r13_4;
rdi_7 = r12_2;
goto label_140017943;
}
}
if (rax_93 < 0 || (!(rax_93 | r15) && !(*arg3 & 1)))
{
result_11 = result_7;
r11_7 = var_c0;
rbx = var_90_1;
if (!var_80_1)
{
if (rdx_50 <= 0)
goto label_14001803f;
label_140017ffd:
var_c0 = result_11;
int64_t* rax_143 = __lshift_D2A(rsi_3, 1);
rsi_3 = rax_143;
int32_t rax_144 = __cmp_D2A(rax_143, r11_7);
result_11 = var_c0;
if (rax_144 <= 0 && (rax_144 || !(r13_4 & 1)))
{
var_80_1 = 0x20;
label_14001803f:
if (*(rsi_3 + 0x14) <= 1)
{
r15_2 = rdi_7;
rdi_7 = r12_2;
if (!rsi_3[3])
{
result_8 = result_11 + 1;
var_b4_1 = var_80_1;
*result_11 = r13_4;
goto label_140017943;
}
}
else
{
label_140018045:
r15_2 = rdi_7;
rdi_7 = r12_2;
}
var_b4_1 = 0x10;
result_8 = result_11 + 1;
*result_11 = r13_4;
goto label_140017943;
}
if (r13_4 != 0x39)
{
r13_4 = rax_92 + 0x31;
var_80_1 = 0x20;
goto label_14001803f;
}
label_14001805c:
result_8 = result_11 + 1;
}
else
{
if (*(rsi_3 + 0x14) <= 1 && !rsi_3[3])
{
if (rdx_50 > 0)
goto label_140017ffd;
result_8 = result_11 + 1;
r15_2 = rdi_7;
rdi_7 = r12_2;
*result_11 = r13_4;
goto label_140017943;
}
if (var_80_1 == 2)
goto label_140018045;
void* result_12 = result_11;
while (__cmp_D2A(r11_7, r12_2) > 0)
{
*result_12 = r13_4;
int64_t* rax_134 = __multadd_D2A(r12_2, 0xa, 0);
if (rdi_7 == r12_2)
rdi_7 = rax_134;
int64_t* rax_135 = __multadd_D2A(rsi_3, 0xa, 0);
result_12 += 1;
rsi_3 = rax_135;
r12_2 = rax_134;
r13_4 = __quorem_D2A(rax_135, r11_7) + 0x30;
}
result_11 = result_12;
result_8 = result_12 + 1;
if (r13_4 != 0x39)
{
r15_2 = rdi_7;
rdi_7 = r12_2;
var_b4_1 = 0x20;
*result_11 = (r13_4 + 1);
goto label_140017943;
}
}
}
else
{
result_8 = result_7 + 1;
result_10 = result_8;
if (rdx_50 <= 0 || var_80_1 == 2)
{
*(result_8 - 1) = r13_4;
if (var_4c == var_b0_1)
{
r15_2 = rdi_7;
r11_7 = var_c0;
rdi_7 = r12_2;
rbx = var_90_1;
break;
}
rsi_3 = __multadd_D2A(rsi_3, 0xa, 0);
if (rdi_7 == r12_2)
{
int64_t* rax_100 = __multadd_D2A(rdi_7, 0xa, 0);
rdi_7 = rax_100;
r12_2 = rax_100;
}
else
{
rdi_7 = __multadd_D2A(rdi_7, 0xa, 0);
r12_2 = __multadd_D2A(r12_2, 0xa, 0);
}
result_7 = result_8;
rax_86 = var_4c + 1;
continue;
}
else
{
result_11 = result_7;
r11_7 = var_c0;
rbx = var_90_1;
if (r13_4 != 0x39)
{
r15_2 = rdi_7;
var_b4_1 = 0x20;
rdi_7 = r12_2;
*result_11 = r13_4 + 1;
goto label_140017943;
}
}
}
r15_2 = rdi_7;
result_5 = result_1;
result_10 = result_8;
*result_11 = 0x39;
rdi_7 = r12_2;
goto label_140017ca9;
}
}
else
{
if (r12_3)
goto label_14001808e;
var_a8_2 = var_90_1;
var_b0_1 = var_5c_1;
label_140017a08:
result_10 = result_1;
int32_t rax_108 = 1;
while (true)
{
var_4c = rax_108;
result_10 += 1;
r13_4 = __quorem_D2A(rsi_3, r11_5) + 0x30;
*(result_10 - 1) = r13_4;
if (var_4c >= var_b0_1)
break;
rsi_3 = __multadd_D2A(rsi_3, 0xa, 0);
rax_108 = var_4c + 1;
}
r11_7 = r11_5;
r15_2 = nullptr;
}
int32_t rax_113;
if (var_80_1)
{
if (var_80_1 == 2)
goto label_140017df9;
if (*(rsi_3 + 0x14) > 1)
goto label_140017c99;
rax_113 = rsi_3[3];
if (rax_113)
goto label_140017c99;
goto label_140017a99;
}
int64_t* rax_132 = __lshift_D2A(rsi_3, 1);
rsi_3 = rax_132;
int32_t rax_133 = __cmp_D2A(rax_132, r11_7);
if (rax_133 > 0 || (!rax_133 && r13_4 & 1))
{
label_140017c99:
result_5 = result_1;
label_140017ca9:
while (true)
{
result_8 = result_10;
char rax_125 = *(result_8 - 1);
result_10 -= 1;
if (rax_125 != 0x39)
{
var_b4_1 = 0x20;
*result_10 = rax_125 + 1;
break;
}
if (result_5 == result_10)
{
var_b4_1 = 0x20;
var_a8_2 += 1;
*result_1 = 0x31;
break;
}
}
}
else
{
label_140017df9:
var_b4_1 = 0x10;
if (*(rsi_3 + 0x14) <= 1)
{
rax_113 = rsi_3[3];
label_140017a99:
rax_113 = rax_113;
var_b4_1 = rax_113 << 4;
}
do
{
result_8 = result_10;
result_10 -= 1;
} while (*result_10 == 0x30);
}
label_140017943:
__Bfree_D2A(r11_7);
if (!rdi_7)
{
result = result_1;
result_1 = result_8;
}
else
{
if (r15_2 && r15_2 != rdi_7)
__Bfree_D2A(r15_2);
result = result_1;
result_1 = result_8;
__Bfree_D2A(rdi_7);
}
}
else
{
label_140017336:
int64_t rax_55 = var_90_1;
zmm2 = *(&__tens_D2A + (rax_55 << 3));
if (r14 >= 0 || var_b0_1 > 0)
{
var_4c = 1;
char* result_9 = result_1;
zmm0_3 = rax_20;
zmm1_3 = zmm0_3 / zmm2;
result_3 = &result_9[1];
int32_t rcx_54 = zmm1_3;
zmm1_3 = rcx_54;
*result_9 = rcx_54 + 0x30;
zmm1_3 = zmm1_3 * zmm2;
var_a8_2 = var_90_1 + 1;
zmm0_3 = zmm0_3 - zmm1_3;
zmm1_3 = {0};
zmm0_3 - zmm1_3;
if (FCMP_UO(zmm0_3, zmm1_3) || !(zmm0_3 == zmm1_3))
{
zmm3 = {0};
while (true)
{
int32_t rdx_63 = var_4c;
if (rdx_63 == var_b0_1)
break;
zmm0_3 = zmm0_3 * 0x4024000000000000;
result_3 += 1;
var_4c = rdx_63 + 1;
zmm1_3 = zmm0_3 / zmm2;
rcx_54 = zmm1_3;
zmm1_3 = rcx_54;
*(result_3 - 1) = rcx_54 + 0x30;
zmm1_3 = zmm1_3 * zmm2;
zmm0_3 = zmm0_3 - zmm1_3;
zmm0_3 - zmm3;
if (!FCMP_UO(zmm0_3, zmm3))
{
if (zmm0_3 == zmm3)
goto label_140017dab;
}
}
if (!var_80_1)
{
zmm0_3 = zmm0_3 + zmm0_3;
rdx_33 = *(result_3 - 1);
if (zmm0_3 > zmm2)
{
result = result_1;
result_4 = result_3;
rdi_4 = var_90_1;
label_140017190:
char rdx_34;
while (true)
{
result_3 = result_4 - 1;
if (rdx_33 != 0x39)
{
result_1 = result_4;
rdx_34 = rdx_33 + 1;
break;
}
if (result == result_3)
{
result_1 = result_4;
rdi_4 += 1;
rdx_34 = 0x31;
break;
}
rdx_33 = *(result_3 - 1);
label_14001718d:
result_4 = result_3;
}
*result_3 = rdx_34;
var_a8_2 = rdi_4 + 1;
var_b4_1 = 0x20;
}
else
{
zmm0_3 - zmm2;
result = result_1;
rdi_4 = var_90_1;
if (!FCMP_UO(zmm0_3, zmm2) && !(zmm0_3 != zmm2))
{
rcx_54 &= 1;
if (rcx_54)
goto label_14001718d;
}
var_b4_1 = 0x10;
label_1400180db:
void* result_6;
do
{
result_6 = result_3;
result_3 -= 1;
} while (*(result_6 - 1) == 0x30);
result_1 = result_6;
var_a8_2 = rdi_4 + 1;
}
}
else
{
if (var_80_1 == 1)
{
rdx_33 = *(result_3 - 1);
result_4 = result_3;
result = result_1;
rdi_4 = var_90_1;
goto label_140017190;
}
result = result_1;
var_b4_1 = 0x10;
result_1 = result_3;
}
}
else
{
label_140017dab:
result = result_1;
result_1 = result_3;
}
}
else
{
if (var_b0_1)
{
label_140017667:
r11_5 = nullptr;
rdi_7 = nullptr;
label_14001766f:
result = result_1;
var_b4_1 = 0x10;
var_a8_2 = -(r14);
}
else
{
zmm2 = zmm2 * 5.0;
if (zmm2 >= rax_20)
goto label_140017667;
result = result_1;
r11_5 = nullptr;
var_a8_2 = rax_55 + 2;
rdi_7 = nullptr;
label_140017386:
result_1 += 1;
*result = 0x31;
var_b4_1 = 0x20;
}
__Bfree_D2A(r11_5);
if (rdi_7)
__Bfree_D2A(rdi_7);
}
}
}
else
{
r14 = 0;
var_88 = 1;
var_5c_1 = 0xffffffff;
var_b0_1 = 0xffffffff;
label_140016feb:
int32_t rax_37 = 2;
if (var_80_1 >= 0)
rax_37 = var_80_1;
var_80_1 = rax_37;
if (!(rdi & 8))
goto label_140017445;
var_80_1 = 3 - rax_37;
label_14001701a:
bool r8_7 = var_b0_1 <= 0xe & var_60_1;
if (!r8_7 || var_90_1 | var_80_1)
goto label_140017445;
var_4c = 0;
zmm0_3 = rax_20;
uint64_t rax_42;
int32_t r11_4;
if (var_78_1 && 0x3ff0000000000000 > zmm0_3)
{
if (!var_b0_1)
{
zmm1_3 = zmm0_3 + zmm0_3;
zmm1_3 = zmm1_3 + 7.0;
int64_t rax_59 = zmm1_3;
rax_42 = rax_59 | ((rax_59 >> 0x20) - 0x3400000) << 0x20;
label_14001740c:
zmm0_3 = zmm0_3 - 5.0;
zmm1_3 = rax_42;
if (zmm0_3 > zmm1_3)
{
result = result_1;
var_a8_2 = 2;
r11_5 = nullptr;
rdi_7 = nullptr;
goto label_140017386;
}
if (__xorpd_xmmxuq_memxuq(zmm1_3, data_140022150) > zmm0_3)
goto label_140017667;
}
else
{
r11_4 = var_5c_1;
if (r11_4 > 0)
{
zmm0_3 = zmm0_3 * 10.0;
rdi_4 = -1;
zmm1_3 = 0x4008000000000000 * zmm0_3;
r10_5 = zmm0_3;
zmm1_3 = zmm1_3 + 7.0;
int64_t rax_138 = zmm1_3;
rax_42 = rax_138 | ((rax_138 >> 0x20) - 0x3400000) << 0x20;
goto label_1400170ac;
}
}
label_140017435:
var_80_1 = 0;
label_140017445:
if (var_a8_1 >= 0 && var_90_1 <= arg1[5])
goto label_140017336;
goto label_140017453;
}
zmm1_3 = zmm0_3 + zmm0_3;
zmm1_3 = zmm1_3 + 7.0;
int64_t rax_40 = zmm1_3;
rax_42 = rax_40 | ((rax_40 >> 0x20) - 0x3400000) << 0x20;
if (!var_b0_1)
goto label_14001740c;
r11_4 = var_b0_1;
rdi_4 = 0;
label_1400170ac:
zmm2 = rax_42;
zmm3 = *(&__tens_D2A + ((r11_4 - 1) << 3));
if (!var_88)
{
zmm0_3 = r10_5;
result_3 = result_1;
var_4c = 1;
uint128_t zmm4_2;
zmm4_2 = zmm2 * zmm3;
zmm1_3 = zmm0_3;
bool r10_7 = false;
while (true)
{
int32_t rdx_47 = zmm1_3;
if (rdx_47)
{
r10_7 = r8_7;
zmm1_3 = zmm1_3 - rdx_47;
}
result_3 += 1;
rdx_33 = rdx_47 + 0x30;
*(result_3 - 1) = rdx_33;
int32_t rbp_8 = var_4c;
if (rbp_8 == r11_4)
break;
zmm1_3 = zmm1_3 * 0x4024000000000000;
r10_7 = r8_7;
var_4c = rbp_8 + 1;
}
if (!r10_7)
zmm1_3 = zmm0_3;
zmm0_3 = 0x3fe0000000000000;
zmm2 = zmm4_2 + zmm0_3;
if (zmm1_3 > zmm2)
{
result = result_1;
result_4 = result_3;
goto label_140017190;
}
zmm0_3 = zmm0_3 - zmm4_2;
if (zmm0_3 > zmm1_3)
{
zmm1_3 - 0.0;
result = result_1;
int32_t rdx_79;
rdx_79 = FCMP_UO(zmm1_3, 0.0);
if (zmm1_3 != 0.0)
rdx_79 = 1;
var_b4_1 = rdx_79 << 4;
goto label_1400180db;
}
if (var_a8_1 < 0)
{
var_80_1 = 0;
rdi_7 = nullptr;
rbp_3 = var_7c_1;
var_74_2 = var_98_1;
goto label_1400174fa;
}
var_80_1 = 0;
if (arg1[5] >= 0)
goto label_140017336;
goto label_140017754;
}
int32_t rdx_27 = zmm0_3;
zmm1_3 = 0x3fe0000000000000 / zmm3;
void* result_2 = result_1 + 1;
zmm1_3 = zmm1_3 - zmm2;
zmm2 = rdx_27;
*result_1 = rdx_27 + 0x30;
zmm0_3 = zmm0_3 - zmm2;
if (!(zmm1_3 > zmm0_3))
{
zmm3 = 10.0;
while (true)
{
zmm2 = 0x3ff0000000000000 - zmm0_3;
if (!(zmm1_3 <= zmm2))
{
rdx_33 = *(result_2 - 1);
result_4 = result_2;
result = result_1;
break;
}
bool cond:28_1 = var_4c + 1 >= r11_4;
var_4c += 1;
if (cond:28_1)
goto label_140017435;
zmm0_3 = zmm0_3 * zmm3;
result_2 += 1;
zmm1_3 = zmm1_3 * zmm3;
int32_t rdx_31 = zmm0_3;
zmm2 = rdx_31;
*(result_2 - 1) = rdx_31 + 0x30;
zmm0_3 = zmm0_3 - zmm2;
if (zmm1_3 > zmm0_3)
goto label_1400180f4;
}
goto label_140017190;
}
label_1400180f4:
zmm0_3 - 0.0;
result = result_1;
result_1 = result_2;
int32_t rdx_77;
rdx_77 = FCMP_UO(zmm0_3, 0.0);
if (zmm0_3 != 0.0)
rdx_77 = 1;
var_a8_2 = rdi_4 + 1;
var_b4_1 = rdx_77 << 4;
}
__Bfree_D2A(rsi_3);
*result_1 = 0;
*arg7 = var_a8_2;
if (arg8)
*arg8 = result_1;
*rbx |= var_b4_1;
return result;
}
if (rax_5 != 4)
return nullptr;
r8_4 = 3;
rdx_16 = arg8;
rcx_8 = &data_1400220e9;
*arg7 = 0xffff8000;
}
/* tailcall */
return __nrv_alloc_D2A(rcx_8, rdx_16, r8_4);
}
void __rshift_D2A(void* arg1, int32_t arg2)
{
int64_t rbx = *(arg1 + 0x14);
int32_t rbp_1 = arg2 >> 5;
if (rbx > rbp_1)
{
int64_t rbp_2 = rbp_1;
int32_t rdx = arg2 & 0x1f;
void* r11_1 = arg1 + 0x18 + (rbx << 2);
void* rsi_1 = arg1 + 0x18 + (rbp_2 << 2);
void* rax_4;
if (!rdx)
{
int32_t* rdi_2 = arg1 + 0x18;
if (rsi_1 < r11_1)
{
do
{
*rdi_2 = *rsi_1;
rdi_2 = &rdi_2[1];
rsi_1 += 4;
} while (rsi_1 < r11_1);
rax_4 = arg1 + 0x18 + ((rbx - rbp_2) << 2);
goto label_140018388;
}
*(arg1 + 0x14) = 0;
}
else
{
void* r8_1 = rsi_1 + 4;
uint32_t r9_2 = *rsi_1 >> rdx;
if (r8_1 < r11_1)
{
void* rsi_2 = arg1 + 0x18;
do
{
int32_t rax_1 = *r8_1;
rsi_2 += 4;
r8_1 += 4;
*(rsi_2 - 4) = rax_1 << (0x20 - rdx) | r9_2;
r9_2 = *(r8_1 - 4) >> rdx;
} while (r8_1 < r11_1);
rax_4 = arg1 + 0x18 + ((rbx - rbp_2) << 2) - 4;
*rax_4 = r9_2;
if (!r9_2)
goto label_140018388;
goto label_14001835b;
}
*(arg1 + 0x18) = r9_2;
if (!r9_2)
*(arg1 + 0x14) = 0;
else
{
rax_4 = arg1 + 0x18;
label_14001835b:
rax_4 += 4;
label_140018388:
int32_t rax = (rax_4 - (arg1 + 0x18)) >> 2;
*(arg1 + 0x14) = rax;
if (rax)
return;
}
}
}
else
*(arg1 + 0x14) = 0;
*(arg1 + 0x18) = 0;
}
uint64_t __trailz_D2A(void* arg1)
{
void* rax = arg1 + 0x18;
void* rcx = rax + (*(arg1 + 0x14) << 2);
int32_t rdx = 0;
if (rax < rcx)
{
do
{
if (*rax)
{
if (rax < rcx)
{
uint64_t rflags_1;
int32_t temp0_1;
temp0_1 = __bsf_gprv_memv(*rax);
rdx += temp0_1;
}
break;
}
rax += 4;
rdx += 0x20;
} while (rax < rcx);
}
return rdx;
}
int64_t dtoa_lock(int32_t arg1)
{
int32_t dtoa_CS_init_1 = dtoa_CS_init;
if (dtoa_CS_init_1 != 2)
{
if (dtoa_CS_init_1)
{
if (dtoa_CS_init_1 != 1)
return dtoa_CS_init_1;
label_140018440:
do
{
Sleep(1);
dtoa_CS_init_1 = dtoa_CS_init;
} while (dtoa_CS_init_1 == 1);
goto label_140018442;
}
int32_t dtoa_CS_init_2 = dtoa_CS_init;
dtoa_CS_init = 1;
if (!dtoa_CS_init_2)
{
InitializeCriticalSection(&dtoa_CritSec);
InitializeCriticalSection(&data_140027ca8);
atexit(dtoa_lock_cleanup);
dtoa_CS_init = 2;
}
else if (dtoa_CS_init_2 == 2)
dtoa_CS_init = 2;
else
{
dtoa_CS_init_1 = dtoa_CS_init;
if (dtoa_CS_init_1 == 1)
goto label_140018440;
label_140018442:
if (dtoa_CS_init_1 != 2)
return dtoa_CS_init_1;
}
}
/* tailcall */
return EnterCriticalSection(&dtoa_CritSec + arg1 * 0x28);
}
int64_t dtoa_lock_cleanup()
{
int32_t dtoa_CS_init_1 = dtoa_CS_init;
dtoa_CS_init = 3;
if (dtoa_CS_init_1 != 2)
return dtoa_CS_init_1;
DeleteCriticalSection(&dtoa_CritSec);
/* tailcall */
return DeleteCriticalSection(&data_140027ca8);
}
int64_t* __Balloc_D2A(int32_t arg1)
{
dtoa_lock(0);
int64_t* _.data_1;
uint64_t rcx_4;
int32_t rsi_1;
if (arg1 > 9)
{
rsi_1 = 1 << arg1;
rcx_4 = ((rsi_1 << 2) + 0x23) >> 3;
label_1400185a6:
_.data_1 = malloc(rcx_4 << 3);
if (_.data_1)
goto label_1400185b0;
}
else
{
int64_t rcx = arg1;
_.data_1 = *(&freelist + (rcx << 3));
if (!_.data_1)
{
rsi_1 = 1 << arg1;
_.data_1 = _.data;
rcx_4 = (((rsi_1 + 9) << 2) + -ffffffffffffffff) >> 3;
if (((_.data_1 - &private_mem) >> 3) + rcx_4 > 0x120)
goto label_1400185a6;
_.data = &_.data_1[rcx_4];
label_1400185b0:
bool cond:0_1 = dtoa_CS_init == 2;
_.data_1[1] = _mm_unpacklo_epi32(arg1, rsi_1)[0];
if (cond:0_1)
{
LeaveCriticalSection(&dtoa_CritSec);
_.data_1[2] = 0;
}
else
_.data_1[2] = 0;
}
else
{
bool cond:1_1 = dtoa_CS_init != 2;
*(&freelist + (rcx << 3)) = *_.data_1;
if (cond:1_1)
_.data_1[2] = 0;
else
{
LeaveCriticalSection(&dtoa_CritSec);
_.data_1[2] = 0;
}
}
}
return _.data_1;
}
void __Bfree_D2A(int64_t* arg1)
{
if (!arg1)
return;
if (arg1[1] > 9)
/* tailcall */
return free(arg1);
dtoa_lock(0);
int64_t rdx_2 = arg1[1];
bool cond:1_1 = dtoa_CS_init == 2;
int64_t rcx_1 = *(&freelist + (rdx_2 << 3));
*(&freelist + (rdx_2 << 3)) = arg1;
*arg1 = rcx_1;
if (cond:1_1)
/* tailcall */
return LeaveCriticalSection(&dtoa_CritSec);
}
int64_t* __multadd_D2A(int64_t* arg1, int32_t arg2, int32_t arg3)
{
int32_t i = *(arg1 + 0x14);
int64_t rsi = arg3;
int64_t rcx = 0;
do
{
int64_t rax_3 = *(arg1 + (rcx << 2) + 0x18) * arg2 + rsi;
*(arg1 + (rcx << 2) + 0x18) = rax_3;
rcx += 1;
rsi = rax_3 >> 0x20;
} while (i > rcx);
int64_t* result = arg1;
if (rsi)
{
if (*(arg1 + 0xc) <= i)
{
int64_t* result_1 = __Balloc_D2A(arg1[1] + 1);
result = result_1;
if (result_1)
{
memcpy(&result_1[2], &arg1[2], (*(arg1 + 0x14) << 2) + 8);
int64_t* result_2 = result;
__Bfree_D2A(arg1);
result = result_2;
*(result_2 + (i << 2) + 0x18) = rsi;
*(result_2 + 0x14) = i + 1;
}
}
else
{
result = arg1;
*(arg1 + (i << 2) + 0x18) = rsi;
*(arg1 + 0x14) = i + 1;
}
}
return result;
}
int64_t* __i2b_D2A(int32_t arg1)
{
dtoa_lock(0);
int64_t* _.data_1 = data_140027c28;
if (!_.data_1)
{
_.data_1 = _.data;
if (((_.data_1 - &private_mem) >> 3) + 5 <= 0x120)
{
_.data = &_.data_1[5];
label_1400187e3:
bool cond:1_1 = dtoa_CS_init != 2;
_.data_1[1] = 0x200000001;
if (!cond:1_1)
goto label_1400187fc;
_.data_1[3] = arg1;
_.data_1[2] = 0x100000000;
}
else
{
_.data_1 = malloc(0x28);
if (_.data_1)
goto label_1400187e3;
}
}
else
{
bool cond:0_1 = dtoa_CS_init == 2;
data_140027c28 = *_.data_1;
if (cond:0_1)
{
label_1400187fc:
LeaveCriticalSection(&dtoa_CritSec);
_.data_1[3] = arg1;
_.data_1[2] = 0x100000000;
}
else
{
_.data_1[3] = arg1;
_.data_1[2] = 0x100000000;
}
}
return _.data_1;
}
int64_t* __mult_D2A(void* arg1, void* arg2)
{
int64_t r13 = *(arg1 + 0x14);
int64_t rbp = *(arg2 + 0x14);
void* r12 = arg1;
void* r15 = arg2;
if (r13 >= rbp)
{
int32_t rax_1 = rbp;
r15 = arg1;
rbp = r13;
r12 = arg2;
r13 = rax_1;
}
int32_t i_1 = rbp + r13;
int32_t rcx = *(r15 + 8);
if (*(r15 + 0xc) < i_1)
rcx += 1;
int64_t* result = __Balloc_D2A(rcx);
if (result)
{
void* r11_1 = &result[3];
void* rsi_1 = r11_1 + (i_1 << 2);
if (r11_1 < rsi_1)
r11_1 = memset(r11_1, 0, ((rsi_1 - result - 0x19) >> 2 << 2) + 4);
void* r9_1 = r12 + 0x18;
void* r12_1 = r9_1 + (r13 << 2);
void* rbp_1 = r15 + 0x18 + (rbp << 2);
if (r9_1 < r12_1)
{
void* r13_1 = ((rbp_1 - r15 - 0x19) >> 2 << 2) + 4;
if (rbp_1 < r15 + 0x19)
r13_1 = 4;
while (true)
{
uint64_t r10_1 = *r9_1;
r9_1 += 4;
if (!r10_1)
{
r11_1 += 4;
if (r9_1 >= r12_1)
break;
}
else
{
void* rcx_2 = r11_1;
void* rdx = r15 + 0x18;
uint64_t r8_2 = 0;
do
{
uint64_t rax_12 = *rdx;
rdx += 4;
rcx_2 += 4;
int64_t rax_15 = rax_12 * r10_1 + *(rcx_2 - 4) + r8_2;
*(rcx_2 - 4) = rax_15;
r8_2 = rax_15 >> 0x20;
} while (rdx < rbp_1);
*(r11_1 + r13_1) = r8_2;
r11_1 += 4;
if (r9_1 >= r12_1)
break;
}
}
}
if (i_1 > 0)
{
int32_t i;
do
{
int32_t rax_16 = *(rsi_1 - 4);
rsi_1 -= 4;
if (rax_16)
break;
i = i_1;
i_1 -= 1;
} while (i != 1);
}
*(result + 0x14) = i_1;
}
return result;
}
int64_t* __pow5mult_D2A(int64_t* arg1, int32_t arg2)
{
int64_t* rsi = arg1;
int32_t rax_1 = arg2 & 3;
if (rax_1)
{
int64_t* rax_6 = __multadd_D2A(arg1, *(&_.rdata + ((rax_1 - 1) << 2)), 0);
rsi = rax_6;
if (!rax_6)
return nullptr;
}
int32_t rbx_1 = arg2 >> 2;
if (!rbx_1)
return rsi;
int64_t* _.bss_1 = _.bss;
if (!_.bss_1)
{
dtoa_lock(1);
_.bss_1 = _.bss;
if (!_.bss_1)
{
int64_t* _.bss_2 = __Balloc_D2A(1);
_.bss_1 = _.bss_2;
if (!_.bss_2)
{
_.bss = 0;
return nullptr;
}
_.bss = _.bss_1;
*(_.bss_1 + 0x14) = 0x27100000001;
*_.bss_1 = 0;
}
if (dtoa_CS_init == 2)
LeaveCriticalSection(&data_140027ca8);
}
int64_t* rbp_1 = rsi;
while (true)
{
if (!(rbx_1 & 1))
{
rbx_1 s>>= 1;
if (!rbx_1)
return rbp_1;
}
else
{
int64_t* rax_2 = __mult_D2A(rbp_1, _.bss_1);
if (!rax_2)
return nullptr;
int64_t* rcx_1 = rbp_1;
rbp_1 = rax_2;
__Bfree_D2A(rcx_1);
rbx_1 s>>= 1;
if (!rbx_1)
return rbp_1;
}
int64_t* _.bss_3 = *_.bss_1;
if (!_.bss_3)
{
dtoa_lock(1);
_.bss_3 = *_.bss_1;
if (!_.bss_3)
{
int64_t* _.bss_4 = __mult_D2A(_.bss_1, _.bss_1);
_.bss_3 = _.bss_4;
*_.bss_1 = _.bss_4;
if (!_.bss_4)
return nullptr;
*_.bss_4 = 0;
}
if (dtoa_CS_init == 2)
LeaveCriticalSection(&data_140027ca8);
}
_.bss_1 = _.bss_3;
}
}
int64_t* __lshift_D2A(int64_t* arg1, int32_t arg2)
{
int32_t rcx = arg1[1];
uint64_t rsi_1 = arg2 >> 5;
int32_t rax = *(arg1 + 0xc);
int32_t rbx_1 = *(arg1 + 0x14) + rsi_1;
int32_t r13 = rbx_1 + 1;
while (r13 > rax)
{
rax *= 2;
rcx += 1;
}
int64_t* result = __Balloc_D2A(rcx);
if (result)
{
void* rdi_1 = &result[3];
if (rsi_1 > 0)
{
uint64_t _Size = rsi_1 << 2;
void* rcx_1 = rdi_1;
rdi_1 += _Size;
memset(rcx_1, 0, _Size);
}
void* rsi_2 = &arg1[3];
int32_t rbp_1 = arg2 & 0x1f;
void* r9_1 = rsi_2 + (*(arg1 + 0x14) << 2);
if (!rbp_1)
{
do
{
*rdi_1 = *rsi_2;
void* rdi_2 = rdi_1 + 4;
void* rsi_3 = rsi_2 + 4;
if (rsi_3 >= r9_1)
break;
*rdi_2 = *rsi_3;
rdi_1 = rdi_2 + 4;
rsi_2 = rsi_3 + 4;
} while (rsi_2 < r9_1);
r13 = rbx_1;
}
else
{
void* r8_2 = rdi_1;
uint32_t rdx = 0;
do
{
int32_t rax_2 = *rsi_2;
r8_2 += 4;
rsi_2 += 4;
*(r8_2 - 4) = rax_2 << rbp_1 | rdx;
rdx = *(rsi_2 - 4) >> (0x20 - rbp_1);
} while (rsi_2 < r9_1);
void* rax_9 = ((r9_1 - arg1 - 0x19) >> 2 << 2) + 4;
if (r9_1 < arg1 + 0x19)
rax_9 = 4;
*(rdi_1 + rax_9) = rdx;
if (!rdx)
r13 = rbx_1;
}
*(result + 0x14) = r13;
__Bfree_D2A(arg1);
}
return result;
}
uint64_t __cmp_D2A(void* arg1, void* arg2)
{
int64_t rax_1 = *(arg2 + 0x14);
int32_t r9 = *(arg1 + 0x14);
int32_t r9_1 = r9 - rax_1;
if (r9 == rax_1)
{
int64_t r8_1 = rax_1 << 2;
void* i = arg1 + 0x18 + r8_1;
void* rdx = arg2 + r8_1 + 0x18;
do
{
i -= 4;
rdx -= 4;
int32_t r10_1 = *rdx;
int32_t temp1_1 = *i;
if (temp1_1 != r10_1)
{
r9_1 = (r9_1 - r9_1) | 1;
break;
}
} while (arg1 + 0x18 < i);
}
return r9_1;
}
int64_t* __diff_D2A(void* arg1, void* arg2)
{
int64_t rax = *(arg2 + 0x14);
int32_t rdi = *(arg1 + 0x14);
void* rsi = arg1;
void* rbx = arg2;
int32_t rdi_1 = rdi - rax;
int64_t* result;
if (rdi != rax)
{
rdi_1 = 0;
if (rdi - rax < 0)
{
label_140018df3:
void* rax_15 = rsi;
rdi_1 = 1;
rsi = rbx;
rbx = rax_15;
}
}
else
{
int64_t rdx = rax << 2;
void* rax_1 = arg1 + 0x18 + rdx;
void* rdx_1 = rbx + rdx + 0x18;
int32_t r14_1;
int32_t temp1_1;
while (true)
{
rax_1 -= 4;
rdx_1 -= 4;
r14_1 = *rdx_1;
temp1_1 = *rax_1;
if (temp1_1 != r14_1)
break;
if (arg1 + 0x18 >= rax_1)
{
int64_t* result_2 = __Balloc_D2A(0);
result = result_2;
if (result_2)
*(result_2 + 0x14) = 1;
goto label_140018de4;
}
}
if (temp1_1 < r14_1)
goto label_140018df3;
}
int64_t* result_1 = __Balloc_D2A(*(rsi + 8));
result = result_1;
if (result_1)
{
result_1[2] = rdi_1;
int64_t rax_2 = *(rsi + 0x14);
void* rcx_2 = 0x18;
uint64_t rdx_2 = 0;
void* rdi_2 = rsi + 0x18 + (rax_2 << 2);
int32_t r10_1 = rax_2;
void* i = rbx + (*(rbx + 0x14) << 2) + 0x18;
int32_t r11_1;
do
{
uint64_t rax_6 = *(rsi + rcx_2) - *(rbx + rcx_2) - rdx_2;
*(result + rcx_2) = rax_6;
rcx_2 += 4;
r11_1 = rax_6;
rdx_2 = rax_6 >> 0x20 & 1;
} while (rcx_2 + rbx < i);
uint64_t r14_3 = (i - rbx - 0x19) >> 2;
void* rax_10 = (r14_3 << 2) + 4;
if (i < rbx + 0x19)
rax_10 = 4;
void* r8_2 = &result[3] + rax_10;
void* r13_2 = rsi + 0x18 + rax_10;
void* rbx_1 = r8_2;
void* rcx_3 = r13_2;
void* rax_13;
if (r13_2 >= rdi_2)
{
uint64_t r14_4 = r14_3 << 2;
if (i < rbx + 0x19)
r14_4 = 0;
rax_13 = &result[3] + r14_4;
}
else
{
do
{
uint64_t rax_11 = *rcx_3;
rcx_3 += 4;
rbx_1 += 4;
uint64_t rax_12 = rax_11 - rdx_2;
r11_1 = rax_12;
*(rbx_1 - 4) = rax_12;
rdx_2 = rax_12 >> 0x20 & 1;
} while (rcx_3 < rdi_2);
rax_13 = r8_2 + ((rdi_2 - 1 - r13_2) & 0xfffffffffffffffc);
}
if (!r11_1)
{
int32_t i_1;
do
{
i_1 = *(rax_13 - 4);
rax_13 -= 4;
r10_1 -= 1;
} while (!i_1);
}
*(result + 0x14) = r10_1;
}
label_140018de4:
return result;
}
int512_t __b2d_D2A(void* arg1, int32_t* arg2)
{
void* rbx = arg1 + 0x18 + (*(arg1 + 0x14) << 2);
int32_t r11 = *(rbx - 4);
uint64_t rflags;
int32_t temp0;
temp0 = _bit_scan_reverse(r11);
int32_t rdi_1 = temp0 ^ 0x1f;
*arg2 = 0x20 - rdi_1;
int512_t result;
if (rdi_1 <= 0xa)
{
uint32_t r8_2 = 0;
if (arg1 + 0x18 < rbx - 4)
r8_2 = *(rbx - 8) >> (0xb - rdi_1);
result = (r11 >> (0xb - rdi_1) | 0x3ff00000) << 0x20 | r11 << (rdi_1 + 0x15) | r8_2;
return result;
}
uint64_t rax_5;
uint64_t rdx;
if (arg1 + 0x18 >= rbx - 4)
{
rdx = 0;
if (rdi_1 != 0xb)
{
result = (r11 << (rdi_1 - 0xb) | 0x3ff00000) << 0x20;
return result;
}
rax_5 = (r11 | 0x3ff00000) << 0x20;
}
else
{
rdx = *(rbx - 8);
if (rdi_1 == 0xb)
rax_5 = (r11 | 0x3ff00000) << 0x20;
else
{
int32_t rax_3 = r11 << (rdi_1 - 0xb) | rdx >> (0x20 - (rdi_1 - 0xb));
rdx = rdx << (rdi_1 - 0xb);
rax_5 = (rax_3 | 0x3ff00000) << 0x20;
if (arg1 + 0x18 < rbx - 8)
{
result = rax_5 | rdx | *(rbx - 0xc) >> (0x20 - (rdi_1 - 0xb));
return result;
}
}
}
result = rax_5 | rdx;
return result;
}
int64_t* __d2b_D2A(int64_t arg1 @ zmm0, int32_t* arg2, int32_t* arg3)
{
int64_t* result = __Balloc_D2A(1);
if (result)
{
uint32_t rcx_2 = arg1 >> 0x20;
uint32_t r9_2 = rcx_2 & 0xfffff;
int32_t rcx_4 = rcx_2 >> 0x14 & 0x7ff;
if (rcx_4)
r9_2 |= 0x100000;
int32_t rax_2;
int32_t r8_2;
if (!arg1)
{
uint64_t rflags_3;
int32_t temp0_4;
temp0_4 = _bit_scan_forward(r9_2);
rax_2 = 1;
r8_2 = temp0_4 + 0x20;
*(result + 0x14) = 1;
result[3] = r9_2 >> temp0_4;
if (!rcx_4)
{
label_14001900d:
uint64_t rflags_2;
int32_t temp0_3;
temp0_3 = __bsr_gprv_memv(*(result + (rax_2 << 2) + 0x14));
*arg2 = r8_2 - 0x432;
*arg3 = (rax_2 << 5) - (temp0_3 ^ 0x1f);
}
else
{
*arg2 = rcx_4 + r8_2 - 0x433;
*arg3 = 0x35 - r8_2;
}
}
else
{
uint64_t rflags_1;
int32_t temp0_1;
temp0_1 = _bit_scan_forward(arg1);
r8_2 = temp0_1;
uint32_t rax_1 = arg1 >> r8_2;
if (r8_2)
{
rax_1 |= r9_2 << (0x20 - r8_2);
r9_2 u>>= r8_2;
}
rax_2 = 1 + 1;
uint128_t zmm0 = _mm_unpacklo_epi32(rax_1, r9_2);
*(result + 0x14) = rax_2;
result[3] = zmm0;
if (!rcx_4)
goto label_14001900d;
*arg2 = rcx_4 + r8_2 - 0x433;
*arg3 = 0x35 - r8_2;
}
}
return result;
}
char* __strcp_D2A(char* arg1, char* arg2)
{
char* result = arg1;
void* rcx = &arg2[1];
char rdx = *arg2;
*result = rdx;
if (rdx)
{
char i;
do
{
i = *rcx;
result = &result[1];
rcx += 1;
*result = i;
} while (i);
}
return result;
}
void* strnlen(char* arg1, int64_t arg2)
{
void* result = nullptr;
char* rax = arg1;
if (arg2)
{
while (*rax)
{
rax = &rax[1];
result = rax - arg1;
if (result >= arg2)
break;
}
}
return result;
}
int64_t wcsnlen(int64_t arg1, int64_t arg2)
{
int64_t r8 = 0;
if (arg2)
{
do
{
if (!*(arg1 + (r8 << 1)))
return r8;
r8 += 1;
} while (arg2 != r8);
}
return arg2;
}
int64_t vfprintf(FILE* arg1, char* arg2, va_list arg3)
{
return __stdio_common_vfprintf(0, arg1, arg2, nullptr, arg3);
}
int64_t fprintf(FILE* arg1, char* arg2, int64_t arg3)
{
int64_t _ArgList = arg3;
int64_t r9;
int64_t arg_20 = r9;
int64_t* var_10 = &_ArgList;
return __stdio_common_vfprintf(0, arg1, arg2, nullptr, &_ArgList);
}
int64_t _get_output_format() __pure
{
return 0;
}
int64_t __getmainargs(int32_t* arg1, char*** arg2, char*** arg3, int32_t arg4, int32_t* arg5)
{
_initialize_narrow_environment();
_configure_narrow_argv(1 + 1);
*arg1 = *__p___argc();
*arg2 = *__p___argv();
*arg3 = *__p__environ();
if (arg5)
_set_new_mode(*arg5);
return 0;
}
int64_t __wgetmainargs(int32_t* arg1, wchar16*** arg2, wchar16*** arg3, int32_t arg4, int32_t* arg5)
{
_initialize_wide_environment();
_configure_wide_argv(1 + 1);
*arg1 = *__p___argc();
*arg2 = *__p___wargv();
*arg3 = *__p__wenviron();
if (arg5)
_set_new_mode(*arg5);
return 0;
}
_PVFV _onexit(_PVFV arg1)
{
if (!_crt_atexit(arg1))
return arg1;
return nullptr;
}
int64_t at_quick_exit(_PVFV arg1)
{
if (!_.bss)
/* tailcall */
return _crt_at_quick_exit(arg1);
return 0;
}
void _amsg_exit(int32_t arg1) __noreturn
{
fprintf(__acrt_iob_func(2), "runtime error %d\n", arg1);
_exit(0xff);
/* no return */
}
int64_t __ms_fwprintf(FILE* arg1, wchar16* arg2, int64_t arg3)
{
int64_t _ArgList = arg3;
int64_t r9;
int64_t arg_20 = r9;
int64_t* var_10 = &_ArgList;
return __stdio_common_vfwprintf(4, arg1, arg2, nullptr, &_ArgList);
}
int32_t* tzset()
{
_tzset();
__imp_tzname = __tzname();
__imp_timezone = __timezone();
int32_t* result = __daylight();
__imp_daylight = result;
return result;
}
int32_t* _tzset()
{
_tzset();
__imp_tzname = __tzname();
__imp_timezone = __timezone();
int32_t* result = __daylight();
__imp_daylight = result;
return result;
}
int32_t* __daylight()
{
/* tailcall */
return __daylight();
}
int32_t* __timezone()
{
/* tailcall */
return __timezone();
}
char** __tzname()
{
/* tailcall */
return __tzname();
}
int64_t memset(void* _Dst, int32_t _Val, uint64_t _Size)
{
/* tailcall */
return memset(_Dst, _Val, _Size);
}
uint64_t strlen(char const* _Str)
{
/* tailcall */
return strlen(_Str);
}
int32_t strncmp(char const* _Str1, char const* _Str2, uint64_t _MaxCount)
{
/* tailcall */
return strncmp(_Str1, _Str2, _MaxCount);
}
uint64_t wcslen(wchar16 const* _String)
{
/* tailcall */
return wcslen(_String);
}
FILE* __acrt_iob_func(uint32_t _Ix)
{
/* tailcall */
return __acrt_iob_func(_Ix);
}
int32_t* __p__commode()
{
/* tailcall */
return __p__commode();
}
int32_t* __p__fmode()
{
/* tailcall */
return __p__fmode();
}
int32_t __stdio_common_vfprintf(uint64_t _Options, FILE* _Stream, char const* _Format, _locale_t _Locale, va_list _ArgList)
{
/* tailcall */
return __stdio_common_vfprintf(_Options, _Stream, _Format, _Locale, _ArgList);
}
int32_t __stdio_common_vfwprintf(uint64_t _Options, FILE* _Stream, wchar16 const* _Format, _locale_t _Locale, va_list _ArgList)
{
/* tailcall */
return __stdio_common_vfwprintf(_Options, _Stream, _Format, _Locale, _ArgList);
}
int32_t _.text(FILE* _Stream)
{
/* tailcall */
return _fileno(_Stream);
}
int32_t _.text(int32_t _FileHandleSrc, int32_t _FileHandleDst)
{
/* tailcall */
return _setmode(_FileHandleSrc, _FileHandleDst);
}
int32_t fflush(FILE* _Stream)
{
/* tailcall */
return fflush(_Stream);
}
int32_t fputc(int32_t _Character, FILE* _Stream)
{
/* tailcall */
return fputc(_Character, _Stream);
}
uint64_t fwrite(void const* _Buffer, uint64_t _ElementSize, uint64_t _ElementCount, FILE* _Stream)
{
/* tailcall */
return fwrite(_Buffer, _ElementSize, _ElementCount, _Stream);
}
int32_t* __p___argc()
{
/* tailcall */
return __p___argc();
}
char*** __p___argv()
{
/* tailcall */
return __p___argv();
}
wchar16*** __p___wargv()
{
/* tailcall */
return __p___wargv();
}
void _cexit()
{
/* tailcall */
return _cexit();
}
errno_t _configure_narrow_argv(enum _crt_argv_mode mode)
{
/* tailcall */
return _configure_narrow_argv(mode);
}
errno_t _configure_wide_argv(enum _crt_argv_mode mode)
{
/* tailcall */
return _configure_wide_argv(mode);
}
int32_t _crt_at_quick_exit(_PVFV _Function)
{
/* tailcall */
return _crt_at_quick_exit(_Function);
}
int32_t _crt_atexit(_PVFV _Function)
{
/* tailcall */
return _crt_atexit(_Function);
}
int32_t* _errno()
{
/* tailcall */
return _errno();
}
int32_t _initialize_narrow_environment()
{
/* tailcall */
return _initialize_narrow_environment();
}
int32_t _initialize_wide_environment()
{
/* tailcall */
return _initialize_wide_environment();
}
void _initterm(_PVFV* _First, _PVFV* _Last)
{
/* tailcall */
return _initterm(_First, _Last);
}
void _set_app_type(enum _crt_app_type _Type)
{
/* tailcall */
return _set_app_type(_Type);
}
_invalid_parameter_handler_1 _set_invalid_parameter_handler(_invalid_parameter_handler_1 _Handler)
{
/* tailcall */
return _set_invalid_parameter_handler(_Handler);
}
void abort() __noreturn
{
/* tailcall */
return abort();
}
_crt_signal_t signal(int32_t _Signal, _crt_signal_t _Function)
{
/* tailcall */
return signal(_Signal, _Function);
}
char* strerror(char const* _Source)
{
/* tailcall */
return strerror(_Source);
}
int64_t _.text()
{
/* tailcall */
return __C_specific_handler();
}
int64_t memcpy(void* _Dst, void const* _Src, uint64_t _Size)
{
/* tailcall */
return memcpy(_Dst, _Src, _Size);
}
void __setusermatherr(_UserMathErrorFunctionPointer _UserMathErrorFunction)
{
/* tailcall */
return __setusermatherr(_UserMathErrorFunction);
}
struct lconv* localeconv()
{
/* tailcall */
return localeconv();
}
int32_t _set_new_mode(int32_t _NewMode)
{
/* tailcall */
return _set_new_mode(_NewMode);
}
int64_t calloc(uint64_t _Count, uint64_t _Size)
{
/* tailcall */
return calloc(_Count, _Size);
}
void free(void* _Block)
{
/* tailcall */
return free(_Block);
}
int64_t malloc(uint64_t _Size)
{
/* tailcall */
return malloc(_Size);
}
int64_t realloc(void* _Block, uint64_t _Size)
{
/* tailcall */
return realloc(_Block, _Size);
}
void _lock_file(FILE* _Stream)
{
/* tailcall */
return _lock_file(_Stream);
}
void _unlock_file(FILE* _Stream)
{
/* tailcall */
return _unlock_file(_Stream);
}
char*** __p__environ()
{
/* tailcall */
return __p__environ();
}
wchar16*** __p__wenviron()
{
/* tailcall */
return __p__wenviron();
}
uint64_t mbrtowc(wchar16* _DstCh, char const* _SrcCh, uint64_t _SizeInBytes, mbstate_t* _State)
{
/* tailcall */
return mbrtowc(_DstCh, _SrcCh, _SizeInBytes, _State);
}
uint64_t wcrtomb(char* _Dest, wchar16 _Source, mbstate_t* _State)
{
/* tailcall */
return wcrtomb(_Dest, _Source, _State);
}
uint64_t VirtualQuery(void* lpAddress, MEMORY_BASIC_INFORMATION* lpBuffer, uint64_t dwLength)
{
/* tailcall */
return VirtualQuery(lpAddress, lpBuffer, dwLength);
}
BOOL VirtualProtect(void* lpAddress, uint64_t dwSize, enum PAGE_PROTECTION_FLAGS flNewProtect, enum PAGE_PROTECTION_FLAGS* lpflOldProtect)
{
/* tailcall */
return VirtualProtect(lpAddress, dwSize, flNewProtect, lpflOldProtect);
}
BOOL VirtualFree(void* lpAddress, uint64_t dwSize, enum VIRTUAL_FREE_TYPE dwFreeType)
{
/* tailcall */
return VirtualFree(lpAddress, dwSize, dwFreeType);
}
int64_t VirtualAlloc(void* lpAddress, uint64_t dwSize, enum VIRTUAL_ALLOCATION_TYPE flAllocationType, enum PAGE_PROTECTION_FLAGS flProtect)
{
/* tailcall */
return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
int64_t TlsGetValue(uint32_t dwTlsIndex)
{
/* tailcall */
return TlsGetValue(dwTlsIndex);
}
void Sleep(uint32_t dwMilliseconds)
{
/* tailcall */
return Sleep(dwMilliseconds);
}
LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter)
{
/* tailcall */
return SetUnhandledExceptionFilter(lpTopLevelExceptionFilter);
}
HMODULE LoadLibraryA(PSTR lpLibFileName)
{
/* tailcall */
return LoadLibraryA(lpLibFileName);
}
void LeaveCriticalSection(CRITICAL_SECTION* lpCriticalSection)
{
/* tailcall */
return LeaveCriticalSection(lpCriticalSection);
}
void InitializeCriticalSection(CRITICAL_SECTION* lpCriticalSection)
{
/* tailcall */
return InitializeCriticalSection(lpCriticalSection);
}
int64_t GetProcAddress(HMODULE hModule, PSTR lpProcName)
{
/* tailcall */
return GetProcAddress(hModule, lpProcName);
}
enum WIN32_ERROR GetLastError()
{
/* tailcall */
return GetLastError();
}
void EnterCriticalSection(CRITICAL_SECTION* lpCriticalSection)
{
/* tailcall */
return EnterCriticalSection(lpCriticalSection);
}
void DeleteCriticalSection(CRITICAL_SECTION* lpCriticalSection)
{
/* tailcall */
return DeleteCriticalSection(lpCriticalSection);
}
int32_t* mutex_impl_init(int32_t** arg1, int64_t arg2)
{
int32_t* result = malloc(0x18);
if (result)
{
*result = 0;
int32_t rax = 2;
if (arg2 != -3)
rax = arg2 == -2;
result[1] = rax;
*(result + 8) = 0;
result[4] = 0;
result[5] = 0xffffffff;
bool z_1;
if (arg2 == *arg1)
{
*arg1 = result;
z_1 = true;
}
else
{
*arg1;
z_1 = false;
}
if (!z_1)
{
free(result);
return *arg1;
}
}
return result;
}
int64_t pthread_mutex_lock(int64_t* arg1)
{
int32_t* rbx = *arg1;
if (rbx + 3 <= 3)
{
rbx = mutex_impl_init(arg1, rbx);
if (rbx)
{
label_140019641:
int32_t temp0_1 = *rbx;
*rbx = 1;
if (!temp0_1)
{
label_14001964a:
if (!rbx[1])
return 0;
rbx[5] = GetCurrentThreadId();
return 0;
}
uint32_t rax_9;
int32_t rbp_1;
if (rbx[1])
{
rbp_1 = rbx[5];
rax_9 = GetCurrentThreadId();
}
if (rbx[1] && rbp_1 == rax_9)
{
if (1 == *rbx)
*rbx = temp0_1;
else
*rbx;
if (rbx[1] != 2)
return 0x24;
rbx[4] += 1;
return 0;
}
if (*(rbx + 8))
{
label_1400196a5:
while (true)
{
int32_t temp0_2 = *rbx;
*rbx = 2;
if (!temp0_2)
break;
int32_t rax_7 = _pthread_wait_for_single_object(*(rbx + 8), 0xffffffff);
if (rax_7)
{
if (rax_7 != 0x102)
return 0x16;
return 0x8a;
}
}
goto label_14001964a;
}
HANDLE hObject = CreateEventA(nullptr, 0, 0, nullptr);
if (hObject)
{
bool z_1;
if (0 == *(rbx + 8))
{
*(rbx + 8) = hObject;
z_1 = true;
}
else
{
*(rbx + 8);
z_1 = false;
}
if (!z_1)
CloseHandle(hObject);
goto label_1400196a5;
}
if (GetLastError() == ERROR_ACCESS_DENIED)
return 1;
}
}
else if (rbx)
goto label_140019641;
return 0xc;
}
int64_t pthread_mutex_timedlock(int64_t* arg1, int64_t* arg2)
{
uint32_t rbp = -1;
int64_t rax_1;
uint64_t rax_2;
if (arg2)
{
rbp = 0;
rax_1 = _pthread_time_in_ms_from_timespec(arg2);
rax_2 = _pthread_time_in_ms();
}
int32_t* rbx_2;
if (arg2 && rax_2 < rax_1)
{
int64_t rbx_3 = rax_1 - rax_2;
uint32_t rax_5 = -1;
if (rbx_3 <= 0xffffffff)
rax_5 = rbx_3;
rbx_2 = *arg1;
rbp = rax_5;
if (rbx_2 + 3 > 3)
goto label_1400197ab;
goto label_140019802;
}
rbx_2 = *arg1;
if (rbx_2 + 3 <= 3)
{
label_140019802:
rbx_2 = mutex_impl_init(arg1, rbx_2);
if (rbx_2)
{
label_1400197b7:
int32_t temp0_1 = *rbx_2;
*rbx_2 = 1;
if (!temp0_1)
{
label_1400197c0:
if (!rbx_2[1])
return 0;
rbx_2[5] = GetCurrentThreadId();
return 0;
}
uint32_t rax_14;
int32_t r12_1;
if (rbx_2[1])
{
r12_1 = rbx_2[5];
rax_14 = GetCurrentThreadId();
}
if (rbx_2[1] && r12_1 == rax_14)
{
if (1 == *rbx_2)
*rbx_2 = temp0_1;
else
*rbx_2;
if (rbx_2[1] != 2)
return 0x24;
rbx_2[4] += 1;
return 0;
}
if (*(rbx_2 + 8))
{
label_140019845:
while (true)
{
int32_t temp0_2 = *rbx_2;
*rbx_2 = 2;
if (!temp0_2)
break;
int32_t rax_12 = _pthread_wait_for_single_object(*(rbx_2 + 8), rbp);
if (rax_12)
{
if (rax_12 != 0x102)
return 0x16;
return 0x8a;
}
}
goto label_1400197c0;
}
HANDLE hObject = CreateEventA(nullptr, 0, 0, nullptr);
if (hObject)
{
bool z_1;
if (0 == *(rbx_2 + 8))
{
*(rbx_2 + 8) = hObject;
z_1 = true;
}
else
{
*(rbx_2 + 8);
z_1 = false;
}
if (!z_1)
CloseHandle(hObject);
goto label_140019845;
}
if (GetLastError() == ERROR_ACCESS_DENIED)
return 1;
}
}
else
{
label_1400197ab:
if (rbx_2)
goto label_1400197b7;
}
return 0xc;
}
uint64_t pthread_mutex_unlock(int64_t* arg1)
{
int32_t* rdx = *arg1;
if (rdx + 3 <= 3)
{
rdx = mutex_impl_init(arg1, rdx);
if (!rdx)
return 0xc;
}
else if (!rdx)
return 0xc;
if (rdx[1])
{
uint64_t result = 0x16;
uint32_t rax_5;
int32_t rbx_1;
if (*rdx)
{
rbx_1 = rdx[5];
rax_5 = GetCurrentThreadId();
result = 1;
}
if (!*rdx || rbx_1 != rax_5)
return result;
int32_t rax_6 = rdx[4];
if (rax_6)
{
rdx[4] = rax_6 - 1;
return 0;
}
rdx[5] = 0xffffffff;
}
int32_t temp0_1 = *rdx;
*rdx = 0;
if (temp0_1 != 2)
return 0;
BOOL rax_4;
rax_4 = !SetEvent(*(rdx + 8));
return rax_4;
}
int64_t pthread_mutex_trylock(int64_t* arg1)
{
int32_t* rbx = *arg1;
if (rbx + 3 <= 3)
{
rbx = mutex_impl_init(arg1, rbx);
if (!rbx)
return 0xc;
}
else if (!rbx)
return 0xc;
bool z_1;
if (0 == *rbx)
{
*rbx = 1;
z_1 = true;
}
else
{
*rbx;
z_1 = false;
}
if (z_1)
{
if (rbx[1])
rbx[5] = GetCurrentThreadId();
return 0;
}
if (rbx[1] == 2 && rbx[5] == GetCurrentThreadId())
{
rbx[4] += 1;
return 0;
}
return 0x10;
}
int64_t pthread_mutex_init(int64_t* arg1, int32_t* arg2)
{
int64_t rdx;
if (!arg2)
rdx = -1;
else
{
int32_t rax_1 = *arg2;
if (rax_1 & 4)
return 0x28;
int32_t rax_2 = rax_1 & 3;
rdx = -2;
if (rax_2 != 1)
{
int64_t rdx_1;
rdx_1 = rax_2 != 2;
rdx = rdx_1 * 2 - 3;
}
}
*arg1 = rdx;
return 0;
}
int64_t pthread_mutex_destroy(int64_t* arg1)
{
void* rsi = *arg1;
if (rsi + 3 > 3)
{
HANDLE hObject = *(rsi + 8);
if (hObject)
CloseHandle(hObject);
free(rsi);
*arg1 = 0;
}
return 0;
}
int64_t pthread_mutexattr_init(int32_t* arg1)
{
*arg1 = 0;
return 0;
}
uint64_t pthread_mutexattr_destroy(int64_t arg1, int32_t arg2 @ rax) __pure
{
return (arg2 - arg2) & 0x16;
}
int64_t pthread_mutexattr_gettype(int32_t* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = *arg1 & 3;
return 0;
}
int64_t pthread_mutexattr_settype(int32_t* arg1, int32_t arg2)
{
if (!arg1 || arg2 > 2)
return 0x16;
*arg1 = (*arg1 & 0xfffffffc) | arg2;
return 0;
}
int64_t pthread_mutexattr_getpshared(int32_t* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = *arg1 >> 2 & 1;
return 0;
}
int64_t pthread_mutexattr_setpshared(int32_t* arg1, int32_t arg2)
{
if (!arg1 || arg2 > 1)
return 0x16;
int64_t result = 0x28;
if (arg2 != 1)
result = 0;
*arg1 &= 0xfffffffb;
return result;
}
int64_t pthread_mutexattr_getprotocol(int32_t* arg1, int32_t* arg2)
{
*arg2 = *arg1 & 0x18;
return 0;
}
int64_t pthread_mutexattr_setprotocol(int32_t* arg1, int32_t arg2)
{
if ((arg2 & 0x18) != 0x18)
return 0x16;
*arg1 = (*arg1 & 0xffffffe7) | arg2;
return 0;
}
int64_t pthread_mutexattr_getprioceiling(int32_t* arg1, uint32_t* arg2)
{
*arg2 = *arg1 >> 5;
return 0;
}
int64_t pthread_mutexattr_setprioceiling(int32_t* arg1, int32_t arg2)
{
*arg1 = (*arg1 & 0x1f) + (arg2 << 5);
return 0;
}
uint64_t SetThreadName_VEH(int64_t* arg1)
{
int32_t* rdx = *arg1;
if (!rdx)
return 0;
int32_t rax;
rax = *rdx == 0x406d1388;
return -(rax);
}
int64_t __pthread_get_pointer(int64_t arg1)
{
int64_t idListCnt_1 = idListCnt;
if (idListCnt_1)
{
int64_t* idList_1 = idList;
int64_t r10_1 = idListCnt_1 - 1;
int64_t r8_1 = 0;
if (idListCnt_1 != 1)
{
while (true)
{
uint64_t rax_1 = (r8_1 + r10_1) >> 1;
void* rdx_3 = &idList_1[rax_1 * 2];
int64_t r9_1 = *(rdx_3 + 8);
if (r9_1 == arg1)
return *rdx_3;
if (arg1 < r9_1)
{
if (rax_1 == r8_1)
break;
r10_1 = rax_1 - 1;
if (r10_1 < r8_1)
break;
}
else
{
r8_1 = rax_1 + 1;
if (r10_1 < r8_1)
break;
}
}
}
else if (idList_1[1] == arg1)
return *idList_1;
}
return 0;
}
int64_t* enterOnceObject(int64_t arg1)
{
pthread_spin_lock(&_.data);
int64_t* once_obj_1 = once_obj;
if (once_obj_1)
{
while (true)
{
if (*once_obj_1 == arg1)
{
once_obj_1[2] += 1;
goto label_140019ce8;
}
int64_t* once_obj_2 = once_obj_1[3];
if (!once_obj_2)
{
int64_t* once_obj_3 = calloc(1, 0x20);
*once_obj_3 = arg1;
once_obj_3[2] = 1;
once_obj_1[3] = once_obj_3;
once_obj_1 = once_obj_3;
break;
}
once_obj_1 = once_obj_2;
}
}
else
{
int64_t* once_obj_4 = calloc(1, 0x20);
once_obj_1 = once_obj_4;
*once_obj_4 = arg1;
once_obj_4[2] = 1;
once_obj = once_obj_4;
}
pthread_mutex_init(&once_obj_1[1], nullptr);
label_140019ce8:
pthread_spin_unlock(&_.data);
return once_obj_1;
}
int64_t __pthread_register_pointer(int64_t arg1)
{
if (arg1)
{
int64_t idListCnt_1 = idListCnt;
int64_t idListMax_1 = idListMax;
int64_t* idList_1 = idList;
if (idListCnt_1 < idListMax_1)
goto label_140019d94;
if (idListCnt_1)
{
int64_t* idList_3 = realloc(idList, (idListMax_1 + 0x10) << 4);
idList_1 = idList_3;
if (idList_3)
{
idListMax = idListMax_1 + 0x10;
idList = idList_3;
label_140019d94:
int64_t idListNextId_1 = idListNextId;
label_140019da8:
idListNextId_1 += 1;
idListNextId = idListNextId_1;
if (idListNextId_1 & 0x4000000000000000)
{
label_140019db8:
idListNextId = 1;
idListNextId_1 = 1;
goto label_140019dcb;
}
int64_t idListCnt_2;
while (true)
{
if (!idListNextId_1)
goto label_140019da8;
label_140019dcb:
if (!__pthread_get_pointer(idListNextId_1))
{
if (!idListCnt_1)
goto label_140019e3c;
idListCnt_2 = idListCnt_1;
break;
}
idListNextId_1 = idListNextId + 1;
idListNextId = idListNextId_1;
if (idListNextId_1 & 0x4000000000000000)
goto label_140019db8;
}
label_140019e1e:
int64_t* idList_4;
if (idListNextId_1 >= idList_1[idListCnt_1 * 2 - 1])
{
idList_4 = &idList_1[idListCnt_1 * 2];
if (idListCnt_1 != idListCnt_2)
goto label_140019ee4;
goto label_140019e32;
}
int64_t idListCnt_3 = idListCnt_2;
idListCnt_2 -= 1;
if (idListCnt_3 == 1)
{
idList_4 = idList_1;
label_140019ee4:
memmove(&idList_1[(idListCnt_2 + 1) * 2], idList_4,
(idListCnt_1 - idListCnt_2) << 4);
label_140019e32:
idList_1 = idList_4;
label_140019e3c:
idList_1[1] = idListNextId_1;
*idList_1 = arg1;
idListCnt = idListCnt_1 + 1;
return idListNextId_1;
}
}
}
else
{
int64_t* idList_2 = malloc(0x100);
idList_1 = idList_2;
if (idList_2)
{
idListMax = 0x10;
idList = idList_2;
goto label_140019d94;
}
}
}
return 0;
}
uint32_t pthread_tls_init()
{
uint32_t result = TlsAlloc();
_pthread_tls = result;
if (result == 0xffffffff)
/* tailcall */
return pthread_tls_init.cold();
return result;
}
void replace_spin_keys.part.0() __noreturn
{
int64_t var_78;
__builtin_strncpy(&var_78, "Error cleaning up spin_keys for thread ", 0x6b);
int64_t var_58;
_ultoa(GetCurrentThreadId(), &*var_58[7], 0xa);
int64_t* lpOutputString;
if (!*var_58[7])
{
lpOutputString = &var_78;
*(&var_78 + 0x27) = 0xa;
*(&var_78 + 0x28) = 0;
}
else
{
lpOutputString = &var_78;
int64_t rax_1 = 0x28;
while (*(&var_78 + rax_1))
{
rax_1 += 1;
if (rax_1 == 0x6b)
goto label_14001a01f;
}
if (rax_1 != 0x6a)
{
*(&var_78 + rax_1) = 0xa;
*(&var_78 + rax_1 + 1) = 0;
}
}
label_14001a01f:
OutputDebugStringA(lpOutputString);
abort();
/* no return */
}
int64_t leaveOnceObject.part.0(void* arg1)
{
pthread_spin_lock(&_.data);
void* once_obj_1 = once_obj;
void* const once_obj_2;
if (!once_obj_1 || once_obj_1 == arg1)
once_obj_2 = nullptr;
else
{
do
{
once_obj_2 = once_obj_1;
once_obj_1 = *(once_obj_1 + 0x18);
if (!once_obj_1)
goto label_14001a0f8;
} while (once_obj_1 != arg1);
}
if (!once_obj_1)
{
label_14001a0f8:
fprintf(__acrt_iob_func(2), "%p not found?!?!\n", arg1);
/* tailcall */
return pthread_spin_unlock(&_.data);
}
int32_t temp0 = *(arg1 + 0x10);
*(arg1 + 0x10) -= 1;
if (temp0 != 1)
/* tailcall */
return pthread_spin_unlock(&_.data);
pthread_mutex_destroy(arg1 + 8);
int64_t rax_1 = *(arg1 + 0x18);
if (!once_obj_2)
once_obj = rax_1;
else
*(once_obj_2 + 0x18) = rax_1;
free(arg1);
/* tailcall */
return pthread_spin_unlock(&_.data);
}
uint64_t _pthread_once_cleanup(void* arg1)
{
uint64_t result = pthread_mutex_unlock(arg1 + 8);
if (!arg1)
return result;
/* tailcall */
return leaveOnceObject.part.0(arg1);
}
void* const pop_pthread_mem()
{
pthread_mutex_lock(&mtx_pthr_locked);
void* const pthr_root_1 = pthr_root;
if (!pthr_root_1)
{
void* pthr_root_2 = calloc(1, 0x1e0);
if (pthr_root_2)
{
int64_t rax_3 = __pthread_register_pointer(pthr_root_2);
if (!rax_3)
free(pthr_root_2);
else
{
*(pthr_root_2 + 0x1d8) = rax_3;
pthr_root_1 = pthr_root_2;
}
}
}
else
{
int64_t rax = __pthread_register_pointer(pthr_root_1);
*(pthr_root_1 + 0x1d8) = rax;
if (!rax)
pthr_root_1 = nullptr;
else
{
int64_t rax_1 = *(pthr_root_1 + 0x1d0);
pthr_root = rax_1;
if (!rax_1)
pthr_last = 0;
*(pthr_root_1 + 0x1d0) = 0;
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return pthr_root_1;
}
int64_t push_pthread_mem.part.0(void* arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
int64_t r11 = *(arg1 + 0x1d8);
if (r11)
{
int64_t idListCnt_1 = idListCnt;
if (idListCnt_1)
{
int64_t idList_1 = idList;
int64_t rdx_2 = 0;
int64_t rcx_4 = idListCnt_1 - 1;
do
{
uint64_t rax_3 = (rcx_4 + rdx_2) >> 1;
uint64_t r10_3 = rax_3 << 4;
void* r9_2 = idList_1 + r10_3;
int64_t temp0_1 = *(r9_2 + 8);
if (r11 == temp0_1)
{
if (rax_3 + 1 < idListCnt_1)
{
memmove(r9_2, idList_1 + r10_3 + 0x10, (idListCnt_1 - (rax_3 + 1)) << 4);
idListCnt = idListCnt_1 - 1;
}
else
{
idListCnt = idListCnt_1 - 1;
if (idListCnt_1 == 1)
{
free(idList_1);
idListMax = 0;
idListCnt = 0;
}
}
break;
}
if (r11 < temp0_1)
{
if (rax_3 == rdx_2)
break;
rcx_4 = rax_3 - 1;
}
else
rdx_2 = rax_3 + 1;
} while (rcx_4 >= rdx_2);
}
}
int64_t rcx = *(arg1 + 0x50);
if (rcx)
free(rcx);
int64_t rcx_1 = *(arg1 + 0x58);
if (rcx_1)
free(rcx_1);
int64_t rcx_2 = *(arg1 + 0x60);
if (rcx_2)
free(rcx_2);
__builtin_memset(arg1, 0, 0x1e0);
void* pthr_last_1 = pthr_last;
if (!pthr_last_1)
pthr_root = arg1;
else
*(pthr_last_1 + 0x1d0) = arg1;
pthr_last = arg1;
/* tailcall */
return pthread_mutex_unlock(&mtx_pthr_locked);
}
void push_pthread_mem(void* arg1)
{
if (arg1 && !*(arg1 + 0x1d0))
/* tailcall */
return push_pthread_mem.part.0(arg1);
}
void _pthread_once_raw.constprop.0.isra.0()
{
if (_pthread_tls_once == 1)
return;
int64_t* rax_1 = enterOnceObject(&_pthread_tls_once);
pthread_mutex_lock(&rax_1[1]);
int32_t _pthread_tls_once_1 = _pthread_tls_once;
if (!_pthread_tls_once_1)
{
uint32_t rax_2 = TlsAlloc();
_pthread_tls = rax_2;
if (rax_2 == 0xffffffff)
/* tailcall */
return _pthread_once_raw.constprop.0.isra.0.cold();
_pthread_tls_once = 1;
}
else if (_pthread_tls_once_1 != 1)
fprintf(__acrt_iob_func(2), " once %p is %d\n", &_pthread_tls_once);
pthread_mutex_unlock(&rax_1[1]);
if (rax_1)
/* tailcall */
return leaveOnceObject.part.0(rax_1);
}
void* __pthread_self_lite.part.0()
{
void* lpTlsValue = pop_pthread_mem();
if (!_.CRT$XLF || !lpTlsValue)
return 0;
*(lpTlsValue + 0x44) = 1;
*(lpTlsValue + 0x70) = GetCurrentThreadId();
HANDLE rax_1 = CreateEventA(nullptr, 1, 0, nullptr);
*(lpTlsValue + 0x38) = -1;
*(lpTlsValue + 0x30) = rax_1;
*(lpTlsValue + 0x68) = -1;
*(lpTlsValue + 0xb8) = 0;
*(lpTlsValue + 0x28) = 0;
HANDLE hTargetProcessHandle = GetCurrentProcess();
HANDLE hSourceHandle = GetCurrentThread();
if (!DuplicateHandle(GetCurrentProcess(), hSourceHandle, hTargetProcessHandle,
lpTlsValue + 0x28, 0, 0, DUPLICATE_SAME_ACCESS))
/* tailcall */
return __pthread_self_lite.part.0.cold();
int32_t rax_4 = GetThreadPriority(*(lpTlsValue + 0x28));
uint32_t _pthread_tls_1 = _pthread_tls;
*(lpTlsValue + 0xbc) = 0;
*(lpTlsValue + 0xc0) = rax_4;
*(lpTlsValue + 0x40) = (*(lpTlsValue + 0x40) & 0xcf) | 0x10;
if (!TlsSetValue(_pthread_tls_1, lpTlsValue))
/* tailcall */
return __pthread_self_lite.part.0.cold();
return lpTlsValue;
}
int64_t __pthread_self_lite()
{
_pthread_once_raw.constprop.0.isra.0();
int64_t result = TlsGetValue(_pthread_tls);
if (!result)
/* tailcall */
return __pthread_self_lite.part.0();
return result;
}
void _pthread_cleanup_dest.part.0(int64_t arg1)
{
if (!arg1)
return;
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (!rax_1)
return;
int32_t i_1 = 0x100;
int32_t i;
do
{
pthread_spin_lock(rax_1 + 0x68);
if (!*(rax_1 + 0x48))
/* tailcall */
return pthread_spin_unlock(rax_1 + 0x68);
int32_t r14_1 = 0;
int32_t rbx_1 = 0;
while (true)
{
uint64_t rsi_1 = rbx_1;
if (!*(*(rax_1 + 0x58) + rsi_1))
{
rbx_1 += 1;
if (rbx_1 >= *(rax_1 + 0x48))
break;
}
else
{
int64_t r15_1 = *(*(rax_1 + 0x50) + (rsi_1 << 3));
pthread_rwlock_rdlock(&_pthread_key_lock);
bool cond:1_1 = *(_.bss + (rsi_1 << 3)) <= 1;
*(*(rax_1 + 0x50) + (rsi_1 << 3)) = 0;
*(*(rax_1 + 0x58) + rsi_1) = 0;
if (!cond:1_1)
{
r14_1 = 1;
pthread_spin_unlock(rax_1 + 0x68);
(*(_.bss + (rsi_1 << 3)))(r15_1);
pthread_spin_lock(rax_1 + 0x68);
}
rbx_1 += 1;
pthread_rwlock_unlock(&_pthread_key_lock);
if (rbx_1 >= *(rax_1 + 0x48))
break;
}
}
pthread_spin_unlock(rax_1 + 0x68);
if (!r14_1)
break;
i = i_1;
i_1 -= 1;
} while (i != 1);
}
void pthread_create_wrapper(int32_t* arg1) __noreturn
{
pthread_mutex_lock(&mtx_pthr_locked);
pthread_mutex_lock(&arg1[0xe]);
_pthread_once_raw.constprop.0.isra.0();
TlsSetValue(_pthread_tls, arg1);
arg1[0x1c] = GetCurrentThreadId();
pthread_mutex_unlock(&arg1[0xe]);
if (__intrinsic_setjmpex(&arg1[0x34]))
pthread_mutex_lock(&mtx_pthr_locked);
else
{
pthread_mutex_unlock(&mtx_pthr_locked);
int64_t rax_5 = *(arg1 + 0x10);
int64_t rbx_1;
if (!rax_5)
rbx_1 = 0x80;
else
rbx_1 = rax_5(*(arg1 + 8), arg1);
pthread_mutex_lock(&mtx_pthr_locked);
int64_t rcx_5 = *(arg1 + 0x1d8);
*(arg1 + 8) = rbx_1;
if (rcx_5)
_pthread_cleanup_dest.part.0(rcx_5);
}
void* rbx_2 = &arg1[0xe];
pthread_mutex_lock(rbx_2);
HANDLE hObject = *(arg1 + 0x30);
int32_t _ReturnCode = *(arg1 + 8);
if (hObject)
CloseHandle(hObject);
bool cond:0 = !*(arg1 + 0x28);
*(arg1 + 0x30) = 0;
if (!cond:0)
{
pthread_mutex_unlock(rbx_2);
pthread_mutex_destroy(rbx_2);
*(arg1 + 0x38) = -1;
arg1[0x2f] = 1;
goto label_14001a823;
}
while (true)
{
*arg1 = 0xdeadbeef;
pthread_mutex_unlock(rbx_2);
pthread_mutex_destroy(rbx_2);
push_pthread_mem(arg1);
TlsSetValue(_pthread_tls, nullptr);
label_14001a823:
rbx_2 = &mtx_pthr_locked;
label_14001a82d:
if (!pthread_mutex_unlock(&mtx_pthr_locked))
break;
_endthreadex(_ReturnCode);
}
Sleep(0);
goto label_14001a82d;
}
int64_t _TLS_Entry_2(int64_t arg1, int32_t arg2, int64_t arg3)
{
if (arg2)
{
if (arg2 == 1)
{
SetThreadName_VEH_handle = AddVectoredExceptionHandler(1, SetThreadName_VEH);
return 1;
}
if (arg2 == 3)
{
uint32_t _pthread_tls_1 = _pthread_tls;
if (_pthread_tls_1 != 0xffffffff)
{
int32_t* rax_2 = TlsGetValue(_pthread_tls_1);
if (rax_2)
{
if (rax_2[0x10] & 0x30)
{
int64_t rcx = *(rax_2 + 0x1d8);
if (rcx)
_pthread_cleanup_dest.part.0(rcx);
HANDLE hObject = *(rax_2 + 0x28);
if (hObject)
{
CloseHandle(hObject);
HANDLE hObject_1 = *(rax_2 + 0x30);
if (hObject_1)
CloseHandle(hObject_1);
*(rax_2 + 0x28) = {0};
}
goto label_14001a93a;
}
HANDLE hObject_2 = *(rax_2 + 0x30);
if (!rax_2[0x2f])
{
if (hObject_2)
CloseHandle(hObject_2);
int64_t rcx_4 = *(rax_2 + 0x1d8);
*(rax_2 + 0x30) = 0;
rax_2[0x2f] = 1;
if (rcx_4)
_pthread_cleanup_dest.part.0(rcx_4);
if (!(rax_2[0x11] & 4))
{
pthread_mutex_destroy(&rax_2[0xe]);
*(rax_2 + 0x68) = -1;
}
else
{
HANDLE hObject_3 = *(rax_2 + 0x28);
*rax_2 = 0xdeadbeef;
if (!hObject_3)
{
label_14001a93a:
pthread_mutex_destroy(&rax_2[0xe]);
}
else
{
CloseHandle(hObject_3);
*(rax_2 + 0x28) = 0;
pthread_mutex_destroy(&rax_2[0xe]);
}
bool cond:2_1 = !*(rax_2 + 0x1d0);
*(rax_2 + 0x68) = -1;
if (cond:2_1)
push_pthread_mem.part.0(rax_2);
TlsSetValue(_pthread_tls, nullptr);
}
}
else if (!hObject_2)
{
pthread_mutex_destroy(&rax_2[0xe]);
*(rax_2 + 0x68) = -1;
}
else
{
CloseHandle(hObject_2);
*(rax_2 + 0x30) = 0;
pthread_mutex_destroy(&rax_2[0xe]);
*(rax_2 + 0x68) = -1;
}
}
}
}
}
else if (!arg3)
{
int64_t SetThreadName_VEH_handle_1 = SetThreadName_VEH_handle;
if (SetThreadName_VEH_handle_1)
{
RemoveVectoredExceptionHandler(SetThreadName_VEH_handle_1);
SetThreadName_VEH_handle = 0;
}
}
return 1;
}
int64_t __pth_gpointer_locked(int64_t arg1)
{
int64_t result = 0;
if (arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
result = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
}
return result;
}
int64_t thread_print_set(int32_t arg1)
{
print_state = arg1;
}
int64_t thread_print(int64_t arg1)
{
int32_t print_state_1 = print_state;
if (!print_state_1)
return print_state_1;
if (!arg1)
{
GetCurrentThreadId();
/* tailcall */
return printf("T%p %d %s\n", 0);
}
if (!arg1)
/* tailcall */
return thread_print.cold();
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
int64_t r12_1 = *(rax_1 + 0x28);
if (!arg1)
{
*0;
trap(6);
}
pthread_mutex_lock(&mtx_pthr_locked);
int32_t* rax_2 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
*rax_2;
int64_t rdi_5 = 0;
GetCurrentThreadId();
if (arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
rdi_5 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
}
int64_t rdx;
int64_t var_40_1 = rdx;
int64_t var_48_1 = r12_1;
return printf("T%p %d V=%0X H=%p %s\n", rdi_5);
}
int64_t pthread_timechange_handler_np() __pure
{
return 0;
}
uint64_t pthread_num_processors_np()
{
int32_t rdx_1 = 1;
uint64_t processAffinityMask;
uint64_t systemAffinityMask[0x2];
if (GetProcessAffinityMask(GetCurrentProcess(), &processAffinityMask, &systemAffinityMask))
{
uint64_t i = processAffinityMask;
if (i)
{
rdx_1 = 0;
do
{
rdx_1 += i & 1;
i u>>= 1;
} while (i);
if (!rdx_1)
rdx_1 = 1;
}
}
return rdx_1;
}
uint64_t pthread_set_num_processors_np(int32_t arg1)
{
int32_t rdi = arg1;
if (!arg1)
rdi = 1;
uint64_t processAffinityMask;
uint64_t systemAffinityMask[0x2];
BOOL rax_1 =
GetProcessAffinityMask(GetCurrentProcess(), &processAffinityMask, &systemAffinityMask);
BOOL rbx = rax_1;
if (rax_1)
{
uint64_t i = processAffinityMask;
uint64_t dwProcessAffinityMask;
if (!i)
{
dwProcessAffinityMask = 0;
rbx = 0;
}
else
{
rbx = 0;
dwProcessAffinityMask = 0;
do
{
dwProcessAffinityMask *= 2;
if (rdi > rbx && i & 1)
{
dwProcessAffinityMask |= 1;
rbx += 1;
}
i u>>= 1;
} while (i);
processAffinityMask = 0;
}
SetProcessAffinityMask(GetCurrentProcess(), dwProcessAffinityMask);
}
return rbx;
}
int64_t pthread_once(int32_t* arg1, int64_t arg2)
{
if (!arg2)
return 0x16;
if (*arg1 != 1)
{
int64_t* rax_1 = enterOnceObject(arg1);
pthread_mutex_lock(&rax_1[1]);
int32_t r12_1 = *arg1;
if (!r12_1)
{
int64_t* var_40_1 = rax_1;
uint64_t (* var_48)(void* arg1) = _pthread_once_cleanup;
_pthread_once_raw.constprop.0.isra.0();
void* rax_3 = TlsGetValue(_pthread_tls);
if (!rax_3)
{
rax_3 = __pthread_self_lite.part.0();
if (!rax_3)
{
*0;
trap(6);
}
}
int64_t rax_4 = *(rax_3 + 0x18);
_pthread_once_raw.constprop.0.isra.0();
void* rax_5 = TlsGetValue(_pthread_tls);
if (!rax_5)
{
rax_5 = __pthread_self_lite.part.0();
if (!rax_5)
{
*0 = &var_48;
trap(6);
}
}
*(rax_5 + 0x18) = &var_48;
int64_t var_68;
int64_t var_68_2 = var_68;
arg2();
_pthread_once_raw.constprop.0.isra.0();
void* rax_6 = TlsGetValue(_pthread_tls);
if (!rax_6)
{
int64_t rcx_7;
rax_6 = __pthread_self_lite.part.0();
if (!rax_6)
/* tailcall */
return pthread_once.cold(rcx_7);
}
*(rax_6 + 0x18) = rax_4;
*arg1 = 1;
}
else if (r12_1 != 1)
fprintf(__acrt_iob_func(2), " once %p is %d\n", arg1);
pthread_mutex_unlock(&rax_1[1]);
if (rax_1)
leaveOnceObject.part.0(rax_1);
}
return 0;
}
int64_t pthread_key_create(int32_t* arg1, int64_t arg2)
{
int64_t rsi = arg2;
if (!arg1)
return 0x16;
pthread_rwlock_wrlock(&_pthread_key_lock);
int32_t _pthread_key_sch_1 = _pthread_key_sch;
int32_t _pthread_key_max_1 = _pthread_key_max;
int64_t* _.bss_1;
int32_t _pthread_key_sch_2;
if (_pthread_key_sch_1 < _pthread_key_max_1)
{
_.bss_1 = _.bss + (_pthread_key_sch_1 << 3);
_pthread_key_sch_2 = _pthread_key_sch_1;
do
{
if (!*_.bss_1)
{
label_14001af01:
*arg1 = _pthread_key_sch_2;
if (!rsi)
rsi = 1;
*_.bss_1 = rsi;
pthread_rwlock_unlock(&_pthread_key_lock);
goto label_14001af1b;
}
_pthread_key_sch_2 += 1;
_.bss_1 = &_.bss_1[1];
} while (_pthread_key_max_1 != _pthread_key_sch_2);
}
if (_pthread_key_sch_1)
{
_.bss_1 = _.bss;
_pthread_key_sch_2 = 0;
do
{
if (!*_.bss_1)
goto label_14001af01;
_pthread_key_sch_2 += 1;
_.bss_1 = &_.bss_1[1];
} while (_pthread_key_sch_1 != _pthread_key_sch_2);
}
int64_t rax_5;
int32_t rdx_1;
if (_pthread_key_max_1 != 0x100000)
{
rdx_1 = 0x100000;
int32_t rax_4 = _pthread_key_max_1 * 2;
if (_pthread_key_max_1 == -(_pthread_key_max_1))
rax_4 = _pthread_key_max_1 + 1;
if (rax_4 <= 0x100000)
rdx_1 = rax_4;
rax_5 = realloc(_.bss, rdx_1 << 3);
}
if (_pthread_key_max_1 == 0x100000 || !rax_5)
{
pthread_rwlock_unlock(&_pthread_key_lock);
return 0xc;
}
int64_t* rax_7 =
memset(rax_5 + (_pthread_key_max_1 << 3), 0, (rdx_1 - _pthread_key_max_1) << 3);
_.bss = rax_5;
*arg1 = _pthread_key_max_1;
if (!rsi)
rsi = 1;
_pthread_key_sch = _pthread_key_max_1 + 1;
_pthread_key_max = rdx_1;
*rax_7 = rsi;
pthread_rwlock_unlock(&_pthread_key_lock);
label_14001af1b:
return 0;
}
int64_t pthread_key_delete(int32_t arg1)
{
if (arg1 >= _pthread_key_max || !_.bss)
return 0x16;
uint64_t rdi_1 = arg1;
pthread_rwlock_wrlock(&_pthread_key_lock);
bool cond:1_1 = arg1 < _pthread_key_sch;
*(_.bss + (rdi_1 << 3)) = 0;
if (cond:1_1)
_pthread_key_sch = arg1;
pthread_mutex_lock(&mtx_pthr_locked);
int64_t idListCnt_1 = idListCnt;
if (idListCnt_1)
{
int64_t* idList_1 = idList;
do
{
void* rdx_1 = *idList_1;
if (rdx_1)
{
int64_t r8_1 = *(rdx_1 + 0x50);
if (r8_1 && arg1 < *(rdx_1 + 0x48))
{
*(r8_1 + (rdi_1 << 3)) = 0;
*(*(*idList_1 + 0x58) + rdi_1) = 0;
}
}
idList_1 = &idList_1[2];
} while (&idList_1[idListCnt_1 * 2] != idList_1);
}
pthread_mutex_unlock(&mtx_pthr_locked);
pthread_rwlock_unlock(&_pthread_key_lock);
return 0;
}
int64_t pthread_getspecific(int32_t arg1)
{
uint64_t rsi = arg1;
enum WIN32_ERROR dwErrCode = GetLastError();
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
void* rbx = rax;
if (!rax)
rbx = __pthread_self_lite.part.0();
int64_t result = 0;
pthread_spin_lock(rbx + 0x68);
if (rsi < *(rbx + 0x48) && *(*(rbx + 0x58) + rsi))
result = *(*(rbx + 0x50) + (rsi << 3));
pthread_spin_unlock(rbx + 0x68);
SetLastError(dwErrCode);
return result;
}
int64_t pthread_setspecific(int32_t arg1, int64_t arg2)
{
uint128_t zmm6;
uint128_t var_58 = zmm6;
uint64_t rsi = arg1;
enum WIN32_ERROR dwErrCode = GetLastError();
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
void* rbx = rax;
if (!rax)
rbx = __pthread_self_lite.part.0();
pthread_spin_lock(rbx + 0x68);
int64_t rdi;
if (rsi >= *(rbx + 0x48))
{
int32_t _Size_1 = rsi + 1;
int64_t _Size = _Size_1;
int64_t rax_3 = realloc(*(rbx + 0x50), _Size << 3);
rdi = rax_3;
int64_t rax_4;
if (rax_3)
{
rax_4 = realloc(*(rbx + 0x58), _Size);
zmm6 = _mm_unpacklo_epi64(rdi, rax_4);
}
if (!rax_3 || !rax_4)
{
pthread_spin_unlock(rbx + 0x68);
return 0xc;
}
uint64_t rax_5 = *(rbx + 0x48);
memset(rdi + (rax_5 << 3), 0, (_Size_1 - rax_5) << 3);
uint64_t rdx_4 = *(rbx + 0x48);
memset(rax_4 + rdx_4, 0, _Size_1 - rdx_4);
*(rbx + 0x50) = zmm6;
*(rbx + 0x48) = _Size_1;
}
else
rdi = *(rbx + 0x50);
*(rdi + (rsi << 3)) = arg2;
*(*(rbx + 0x58) + rsi) = 1;
pthread_spin_unlock(rbx + 0x68);
SetLastError(dwErrCode);
return 0;
}
int64_t pthread_equal(int64_t arg1, int64_t arg2) __pure
{
int64_t result;
result = arg1 == arg2;
return result;
}
void _pthread_cleanup_dest(int64_t arg1)
{
if (arg1)
/* tailcall */
return _pthread_cleanup_dest.part.0(arg1);
}
int64_t pthread_self()
{
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
if (!rax)
{
rax = __pthread_self_lite.part.0();
if (!rax)
return 0;
}
return *(rax + 0x1d8);
}
void* pthread_getevent()
{
_pthread_once_raw.constprop.0.isra.0();
void* result = TlsGetValue(_pthread_tls);
if (!result)
{
result = __pthread_self_lite.part.0();
if (!result)
return result;
}
return *(result + 0x30);
}
int64_t pthread_gethandle(int64_t arg1)
{
if (arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (rax_1)
return *(rax_1 + 0x28);
}
return 0;
}
void* pthread_getclean()
{
_pthread_once_raw.constprop.0.isra.0();
void* result = TlsGetValue(_pthread_tls);
if (!result)
{
result = __pthread_self_lite.part.0();
if (!result)
return result;
}
return result + 0x18;
}
int64_t pthread_get_concurrency(int32_t* arg1)
{
*arg1 = _pthread_concur;
return 0;
}
int64_t pthread_set_concurrency(int32_t arg1)
{
_pthread_concur = arg1;
return 0;
}
void pthread_exit(uint64_t arg1) __noreturn
{
uint64_t rsi = arg1;
void* rax = __pthread_self_lite();
int64_t rcx = *(rax + 0x1d8);
*(rax + 8) = rsi;
if (rcx)
_pthread_cleanup_dest.part.0(rcx);
if (!(*(rax + 0x40) & 0x30))
{
longjmp(rax + 0xd0, 1);
/* no return */
}
int32_t* rax_1 = TlsGetValue(_pthread_tls);
if (rax_1)
{
HANDLE hObject = *(rax_1 + 0x30);
if (!*(rax_1 + 0x28))
{
*rax_1 = 0xdeadbeef;
if (hObject)
CloseHandle(hObject);
rsi = rax_1[2];
*(rax_1 + 0x30) = 0;
goto label_14001b4d3;
}
rsi = *(rax_1 + 8);
rax_1[0x2f] = 1;
if (hObject)
CloseHandle(hObject);
bool cond:4_1 = rax_1[0x11] & 4;
*(rax_1 + 0x30) = 0;
if (cond:4_1)
goto label_14001b4ba;
}
while (true)
{
_endthreadex(rsi);
label_14001b4ba:
HANDLE hObject_1 = *(rax_1 + 0x28);
*rax_1 = 0xdeadbeef;
CloseHandle(hObject_1);
*(rax_1 + 0x28) = 0;
label_14001b4d3:
push_pthread_mem(rax_1);
TlsSetValue(_pthread_tls, nullptr);
}
}
uint64_t __pthread_shallcancel()
{
if (_pthread_cancelling)
{
_pthread_once_raw.constprop.0.isra.0();
void* rax_2 = TlsGetValue(_pthread_tls);
if (!rax_2)
{
rax_2 = __pthread_self_lite.part.0();
if (rax_2)
goto label_14001b541;
}
else
{
label_14001b541:
if (*(rax_2 + 0x20) <= 0 && *(rax_2 + 0x40) & 3)
return *(rax_2 + 0x44) & 1;
}
}
return 0;
}
void* _pthread_setnobreak(int32_t arg1)
{
_pthread_once_raw.constprop.0.isra.0();
void* result = TlsGetValue(_pthread_tls);
if (!result)
{
result = __pthread_self_lite.part.0();
if (!result)
return result;
}
if (arg1 <= 0)
{
*(result + 0x20) -= 1;
return result;
}
*(result + 0x20) += 1;
return result;
}
void _pthread_invoke_cancel() __noreturn
{
void* rax = __pthread_self_lite();
*(rax + 0x40) = (*(rax + 0x40) & 0xf3) | 4;
_pthread_setnobreak(1);
_pthread_cancelling -= 1;
for (void* i = *(rax + 0x18); i; i = *(i + 0x10))
(*i)(*(i + 8));
_pthread_setnobreak(0);
pthread_exit(0xdeadbeef);
/* no return */
}
void test_cancel_locked(int64_t arg1)
{
if (!arg1)
return;
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (!rax_1 || *(rax_1 + 0x40) & 0xc || *(rax_1 + 0xbc) || (*(rax_1 + 0x44) & 3) != 0x3
|| WaitForSingleObject(*(rax_1 + 0x30), 0))
return;
pthread_mutex_unlock(rax_1 + 0x38);
_pthread_invoke_cancel();
/* no return */
}
uint64_t pthread_testcancel()
{
_pthread_once_raw.constprop.0.isra.0();
uint64_t _pthread_cancelling_1 = TlsGetValue(_pthread_tls);
uint64_t _pthread_cancelling_2 = _pthread_cancelling_1;
if (!_pthread_cancelling_1)
{
_pthread_cancelling_1 = __pthread_self_lite.part.0();
_pthread_cancelling_2 = _pthread_cancelling_1;
if (!_pthread_cancelling_1)
return _pthread_cancelling_1;
}
if (!(*(_pthread_cancelling_2 + 0x40) & 0xc))
{
_pthread_cancelling_1 = _pthread_cancelling;
if (_pthread_cancelling_1)
{
pthread_mutex_lock(_pthread_cancelling_2 + 0x38);
char rax = *(_pthread_cancelling_2 + 0x40);
if (rax & 3)
{
int32_t rdx_1 = *(_pthread_cancelling_2 + 0x44);
if (rdx_1 & 1 && *(_pthread_cancelling_2 + 0x20) <= 0)
{
HANDLE hEvent = *(_pthread_cancelling_2 + 0x30);
*(_pthread_cancelling_2 + 0x44) = rdx_1 & 0xfffffffe;
*(_pthread_cancelling_2 + 0x40) = (rax & 0xf3) | 4;
if (hEvent)
ResetEvent(hEvent);
pthread_mutex_unlock(_pthread_cancelling_2 + 0x38);
_pthread_invoke_cancel();
/* no return */
}
}
/* tailcall */
return pthread_mutex_unlock(_pthread_cancelling_2 + 0x38);
}
}
return _pthread_cancelling_1;
}
int64_t pthread_delay_np(int64_t* arg1)
{
if (!arg1)
{
_pthread_once_raw.constprop.0.isra.0();
if (!TlsGetValue(_pthread_tls))
__pthread_self_lite.part.0();
}
else
{
int64_t rax = _pthread_time_in_ms_from_timespec(arg1);
void* rbx_1;
uint32_t dwMilliseconds;
if (0xfffffffe < rax)
{
_pthread_once_raw.constprop.0.isra.0();
dwMilliseconds = -1;
void* rax_5 = TlsGetValue(_pthread_tls);
rbx_1 = rax_5;
if (!rax_5)
rbx_1 = __pthread_self_lite.part.0();
goto label_14001b7a5;
}
_pthread_once_raw.constprop.0.isra.0();
dwMilliseconds = rax;
void* rax_1 = TlsGetValue(_pthread_tls);
rbx_1 = rax_1;
if (!rax_1)
rbx_1 = __pthread_self_lite.part.0();
if (rax)
{
label_14001b7a5:
pthread_testcancel();
HANDLE rcx_1 = *(rbx_1 + 0x30);
if (!rcx_1)
Sleep(dwMilliseconds);
else
_pthread_wait_for_single_object(rcx_1, dwMilliseconds);
pthread_testcancel();
return 0;
}
}
pthread_testcancel();
Sleep(0);
pthread_testcancel();
return 0;
}
int64_t pthread_delay_np_ms(uint32_t arg1)
{
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
void* rbx = rax;
if (!rax)
rbx = __pthread_self_lite.part.0();
if (!arg1)
{
pthread_testcancel();
Sleep(0);
pthread_testcancel();
return 0;
}
pthread_testcancel();
HANDLE rcx_1 = *(rbx + 0x30);
if (!rcx_1)
Sleep(arg1);
else
_pthread_wait_for_single_object(rcx_1, arg1);
pthread_testcancel();
return 0;
}
int64_t pthread_cancel(int64_t arg1)
{
if (arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (rax_1)
{
HANDLE hObject = *(rax_1 + 0x28);
void var_4f8;
if (hObject - 1 <= -3 && GetHandleInformation(hObject, &var_4f8))
{
pthread_mutex_lock(rax_1 + 0x38);
_pthread_once_raw.constprop.0.isra.0();
void* rax_4 = TlsGetValue(_pthread_tls);
uint32_t rdx_2;
if (!rax_4)
{
rax_4 = __pthread_self_lite.part.0();
if (rax_4)
goto label_14001b997;
rdx_2 = *(rax_1 + 0x40);
label_14001b9a3:
if ((*(rax_1 + 0x44) & 3) != 3)
{
if (rdx_2 & 3)
goto label_14001b9e3;
*(rax_1 + 0x40) = (rdx_2 & 0xfc) | 1;
_pthread_cancelling += 1;
HANDLE hEvent = *(rax_1 + 0x30);
if (hEvent)
SetEvent(hEvent);
pthread_mutex_unlock(rax_1 + 0x38);
return 0;
}
if (rdx_2 & 0xc)
goto label_14001b9e3;
if (!(rdx_2 & 0xf))
{
int32_t var_4c8_1 = 0x100001;
SuspendThread(*(rax_1 + 0x28));
if (WaitForSingleObject(*(rax_1 + 0x28), 0) == WAIT_TIMEOUT)
{
GetThreadContext(*(rax_1 + 0x28), &var_4f8);
void (* var_400_1)() __noreturn = _pthread_invoke_cancel;
SetThreadContext(*(rax_1 + 0x28), &var_4f8);
char rax_14 = *(rax_1 + 0x40);
*(rax_1 + 0x44) &= 0xfffffffe;
*(rax_1 + 0x40) = (rax_14 & 0xf0) | 5;
_pthread_cancelling += 1;
HANDLE hEvent_2 = *(rax_1 + 0x30);
if (hEvent_2)
SetEvent(hEvent_2);
pthread_mutex_unlock(rax_1 + 0x38);
ResumeThread(*(rax_1 + 0x28));
}
pthread_mutex_unlock(rax_1 + 0x38);
return 0;
}
}
else
{
label_14001b997:
rdx_2 = *(rax_1 + 0x40);
if (arg1 != *(rax_4 + 0x1d8))
goto label_14001b9a3;
if (!(rdx_2 & 3))
{
*(rax_1 + 0x40) = (rdx_2 & 0xfc) | 1;
_pthread_cancelling += 1;
HANDLE hEvent_1 = *(rax_1 + 0x30);
if (hEvent_1)
SetEvent(hEvent_1);
int32_t rax_8 = *(rax_1 + 0x44);
if ((rax_8 & 3) != 3)
{
pthread_mutex_unlock(rax_1 + 0x38);
return 0;
}
*(rax_1 + 0x44) = rax_8 & 0xfffffffe;
*(rax_1 + 0x40) = (*(rax_1 + 0x40) & 0xf3) | 4;
pthread_mutex_unlock(rax_1 + 0x38);
_pthread_invoke_cancel();
/* no return */
}
label_14001b9e3:
pthread_mutex_unlock(rax_1 + 0x38);
if (!(*(rax_1 + 0x40) & 0xc))
return 0;
}
}
}
}
return 3;
}
int64_t pthread_kill(int64_t arg1, int32_t arg2)
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax = __pthread_get_pointer(arg1);
if (!rax || *(rax + 0x1d8) != arg1 || *(rax + 0x40) & 0xc || *(rax + 0xbc)
|| *(rax + 0x28) - 1 > -3)
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
pthread_mutex_unlock(&mtx_pthr_locked);
if (!arg2)
return 0;
if (arg2 - 2 > 0x15)
return 0x16;
/* tailcall */
return pthread_cancel(arg1);
}
uint64_t _pthread_get_state(int32_t* arg1, int32_t arg2)
{
return *arg1 & arg2;
}
int64_t _pthread_set_state(int32_t* arg1, int32_t arg2, int32_t arg3)
{
int64_t result = 0x16;
int32_t rdx = ~arg2;
if (!(rdx & arg3))
{
result = 0;
*arg1 = (rdx & *arg1) | arg3;
}
return result;
}
int64_t pthread_attr_init(int32_t* arg1)
{
__builtin_memset(&arg1[1], 0, 0x1c);
*arg1 = 1;
return 0;
}
int64_t pthread_attr_destroy(int64_t arg1)
{
__builtin_memset(arg1, 0, 0x20);
return 0;
}
uint64_t pthread_attr_setdetachstate(int32_t* arg1, int32_t arg2)
{
int32_t r8 = arg2 & 0xfffffffb;
if (r8)
return 0x16;
*arg1 = (*arg1 & 0xfffffffb) | arg2;
return r8;
}
int64_t pthread_attr_getdetachstate(int32_t* arg1, int32_t* arg2)
{
*arg2 = *arg1 & 4;
return 0;
}
uint64_t pthread_attr_setinheritsched(int32_t* arg1, int32_t arg2)
{
if (arg1)
{
int32_t r8_2 = arg2 & 0xfffffff7;
if (!r8_2)
{
*arg1 = (*arg1 & 0xfffffff7) | arg2;
return r8_2;
}
}
return 0x16;
}
int64_t pthread_attr_getinheritsched(int32_t* arg1, int32_t* arg2)
{
*arg2 = *arg1 & 8;
return 0;
}
uint64_t pthread_attr_setscope(int32_t* arg1, int32_t arg2)
{
int32_t r8 = arg2 & 0xffffffef;
if (r8)
return 0x16;
*arg1 = (*arg1 & 0xffffffef) | arg2;
return r8;
}
int64_t pthread_attr_getscope(int32_t* arg1, int32_t* arg2)
{
*arg2 = *arg1 & 0x10;
return 0;
}
int64_t pthread_attr_getstack(void* arg1, int64_t* arg2, int64_t* arg3)
{
int64_t rdx = *(arg1 + 0x10);
*arg2 = *(arg1 + 8) - rdx;
*arg3 = rdx;
return 0;
}
int64_t pthread_attr_setstack(void* arg1, int64_t arg2, int64_t arg3)
{
*(arg1 + 0x10) = arg3;
*(arg1 + 8) = arg2 + arg3;
return 0;
}
int64_t pthread_attr_getstackaddr(void* arg1, int64_t* arg2)
{
*arg2 = *(arg1 + 8);
return 0;
}
int64_t pthread_attr_setstackaddr(void* arg1, int64_t arg2)
{
*(arg1 + 8) = arg2;
return 0;
}
int64_t pthread_attr_getstacksize(void* arg1, int64_t* arg2)
{
*arg2 = *(arg1 + 0x10);
return 0;
}
int64_t pthread_attr_setstacksize(void* arg1, int64_t arg2)
{
*(arg1 + 0x10) = arg2;
return 0;
}
int64_t pthread_setcancelstate(int32_t arg1, int32_t* arg2)
{
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
void* rbx = rax;
void* rax_7;
if (!rax)
{
rax_7 = __pthread_self_lite.part.0();
rbx = rax_7;
}
if ((!rax && !rax_7) || arg1 > 1)
return 0x16;
pthread_mutex_lock(rbx + 0x38);
if (arg2)
*arg2 = *(rbx + 0x44) & 1;
int64_t rcx_2 = *(rbx + 0x1d8);
*(rbx + 0x44) = (*(rbx + 0x44) & 0xfffffffe) | arg1;
test_cancel_locked(rcx_2);
pthread_mutex_unlock(rbx + 0x38);
return 0;
}
uint64_t pthread_setcanceltype(int32_t arg1, int32_t* arg2)
{
_pthread_once_raw.constprop.0.isra.0();
void* rax = TlsGetValue(_pthread_tls);
void* rbx = rax;
void* rax_7;
if (!rax)
{
rax_7 = __pthread_self_lite.part.0();
rbx = rax_7;
}
if (rax || rax_7)
{
int32_t rbp_2 = arg1 & 0xfffffffd;
if (!rbp_2)
{
pthread_mutex_lock(rbx + 0x38);
if (arg2)
*arg2 = *(rbx + 0x44) & 2;
int64_t rcx_2 = *(rbx + 0x1d8);
*(rbx + 0x44) = (*(rbx + 0x44) & 0xfffffffd) | arg1;
test_cancel_locked(rcx_2);
pthread_mutex_unlock(rbx + 0x38);
return rbp_2;
}
}
return 0x16;
}
int64_t pthread_create(int64_t* arg1, int32_t* arg2, int64_t arg3, int64_t arg4)
{
void* _ArgList = pop_pthread_mem();
if (_ArgList)
{
if (arg1)
*arg1 = *(_ArgList + 0x1d8);
*(_ArgList + 8) = arg4;
*(_ArgList + 0x10) = arg3;
int32_t rsi_1 = 0;
*(_ArgList + 0xbc) = 0;
*(_ArgList + 0x44) = 1;
*(_ArgList + 0x28) = -1;
while (true)
{
HANDLE rax_1 = CreateEventA(nullptr, 1, 0, nullptr);
*(_ArgList + 0x30) = rax_1;
if (rax_1)
break;
if (rsi_1)
{
rsi_1 += 1;
Sleep(0x14);
if (rsi_1 == 5)
break;
}
else
{
rsi_1 = 1;
Sleep(0);
}
}
*(_ArgList + 0x38) = -1;
bool cond:1_1 = !*(_ArgList + 0x30);
*_ArgList = 0xbab1f00d;
*(_ArgList + 0x68) = -1;
*(_ArgList + 0xc0) = 0;
*(_ArgList + 0xb8) = 0;
if (!cond:1_1)
{
uint32_t _StackSize = 0;
if (arg2)
{
int32_t rax_2 = *arg2;
int32_t _StackSize_1 = *(arg2 + 0x10);
*(_ArgList + 0x44) = rax_2;
int32_t rax_3;
if (rax_2 & 8)
{
_pthread_once_raw.constprop.0.isra.0();
void* rax_7 = TlsGetValue(_pthread_tls);
if (!rax_7)
rax_7 = __pthread_self_lite.part.0();
rax_3 = *(rax_7 + 0xc0);
}
else
rax_3 = arg2[6];
_StackSize = _StackSize_1;
*(_ArgList + 0xc0) = rax_3;
}
uintptr_t rax_4 =
_beginthreadex(nullptr, _StackSize, pthread_create_wrapper, _ArgList, 4, nullptr);
if (rax_4 - 1 <= -3)
{
enum THREAD_PRIORITY nPriority_1 = *(_ArgList + 0xc0);
enum THREAD_PRIORITY nPriority = 0xfffffff1;
if (nPriority_1 >= 0xfffffff2)
{
nPriority = ~THREAD_PRIORITY_ABOVE_NORMAL~THREAD_PRIORITY_NORMAL;
if (nPriority_1 >= ~THREAD_PRIORITY_NORMAL)
{
nPriority = THREAD_PRIORITY_HIGHEST;
if (nPriority_1 <= THREAD_PRIORITY_HIGHEST)
nPriority = nPriority_1;
if (nPriority_1 >= THREAD_PRIORITY_TIME_CRITICAL)
nPriority = THREAD_PRIORITY_TIME_CRITICAL;
}
}
SetThreadPriority(rax_4, nPriority);
ResetEvent(*(_ArgList + 0x30));
if (*(_ArgList + 0x44) & 4)
{
*(_ArgList + 0x28) = 0;
ResumeThread(rax_4);
CloseHandle(rax_4);
}
else
{
*(_ArgList + 0x28) = rax_4;
ResumeThread(rax_4);
}
Sleep(0);
return 0;
}
HANDLE hObject = *(_ArgList + 0x30);
if (hObject)
CloseHandle(hObject);
pthread_mutex_destroy(_ArgList + 0x38);
*(_ArgList + 0x68) = -1;
*(_ArgList + 0x28) = {0};
}
if (arg1)
*arg1 = 0;
if (!*(_ArgList + 0x1d0))
push_pthread_mem.part.0(_ArgList);
}
return 0xb;
}
int64_t pthread_join(int64_t arg1, int64_t* arg2)
{
if (arg1)
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (rax_1)
{
HANDLE hObject = *(rax_1 + 0x28);
uint32_t lpdwFlags;
if (hObject && GetHandleInformation(hObject, &lpdwFlags))
{
if (*(rax_1 + 0x44) & 4)
return 0x16;
_pthread_once_raw.constprop.0.isra.0();
void* rax_3 = TlsGetValue(_pthread_tls);
if (!rax_3)
{
rax_3 = __pthread_self_lite.part.0();
if (rax_3)
goto label_14001c1c6;
}
else
{
label_14001c1c6:
if (arg1 == *(rax_3 + 0x1d8))
return 0x24;
}
HANDLE rcx_2 = *(rax_1 + 0x28);
if (!*(rax_1 + 0xbc) || rcx_2 - 1 <= -3)
{
WaitForSingleObject(rcx_2, 0xffffffff);
rcx_2 = *(rax_1 + 0x28);
}
CloseHandle(rcx_2);
HANDLE hObject_1 = *(rax_1 + 0x30);
if (hObject_1)
CloseHandle(hObject_1);
*(rax_1 + 0x30) = 0;
if (!arg2)
pthread_mutex_destroy(rax_1 + 0x38);
else
{
*arg2 = *(rax_1 + 8);
pthread_mutex_destroy(rax_1 + 0x38);
}
bool cond:1 = !*(rax_1 + 0x1d0);
*(rax_1 + 0x68) = -1;
if (cond:1)
push_pthread_mem.part.0(rax_1);
return 0;
}
}
}
return 3;
}
int64_t _pthread_tryjoin(int64_t arg1, int64_t* arg2)
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax = __pthread_get_pointer(arg1);
if (rax)
{
HANDLE hObject = *(rax + 0x28);
uint32_t lpdwFlags;
if (hObject && GetHandleInformation(hObject, &lpdwFlags))
{
if (*(rax + 0x44) & 4)
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 0x16;
}
_pthread_once_raw.constprop.0.isra.0();
void* rax_2 = TlsGetValue(_pthread_tls);
int64_t rdx_1;
if (!rax_2)
{
rax_2 = __pthread_self_lite.part.0();
rdx_1 = 0;
if (rax_2)
rdx_1 = *(rax_2 + 0x1d8);
}
else
rdx_1 = *(rax_2 + 0x1d8);
if (arg1 == rdx_1)
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 0x24;
}
HANDLE rcx_2 = *(rax + 0x28);
if (!*(rax + 0xbc))
{
if (WaitForSingleObject(rcx_2, 0) && !*(rax + 0xbc))
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 0x10;
}
rcx_2 = *(rax + 0x28);
}
CloseHandle(rcx_2);
HANDLE hObject_1 = *(rax + 0x30);
if (hObject_1)
CloseHandle(hObject_1);
*(rax + 0x30) = 0;
if (!arg2)
pthread_mutex_destroy(rax + 0x38);
else
{
*arg2 = *(rax + 8);
pthread_mutex_destroy(rax + 0x38);
}
bool cond:1_1 = !*(rax + 0x1d0);
*(rax + 0x68) = -1;
if (cond:1_1)
push_pthread_mem.part.0(rax);
pthread_mutex_unlock(&mtx_pthr_locked);
return 0;
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
int64_t pthread_detach(int64_t arg1)
{
if (!arg1)
pthread_mutex_lock(&mtx_pthr_locked);
else
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
pthread_mutex_lock(&mtx_pthr_locked);
if (rax_1)
{
HANDLE hObject = *(rax_1 + 0x28);
uint32_t lpdwFlags;
if (hObject && GetHandleInformation(hObject, &lpdwFlags))
{
int32_t rax_3 = *(rax_1 + 0x44);
if (rax_3 & 4)
{
pthread_mutex_unlock(&mtx_pthr_locked);
return 0x16;
}
HANDLE hObject_1 = *(rax_1 + 0x28);
*(rax_1 + 0x28) = 0;
*(rax_1 + 0x44) = rax_3 | 4;
if (hObject_1)
{
CloseHandle(hObject_1);
if (*(rax_1 + 0xbc))
{
HANDLE hObject_2 = *(rax_1 + 0x30);
if (!hObject_2)
pthread_mutex_destroy(rax_1 + 0x38);
else
{
CloseHandle(hObject_2);
*(rax_1 + 0x30) = 0;
pthread_mutex_destroy(rax_1 + 0x38);
}
bool cond:0_1 = !*(rax_1 + 0x1d0);
*(rax_1 + 0x68) = -1;
if (cond:0_1)
push_pthread_mem.part.0(rax_1);
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return 0;
}
}
}
pthread_mutex_unlock(&mtx_pthr_locked);
return 3;
}
uint64_t pthread_getconcurrency()
{
return dummy_concurrency_level;
}
int64_t pthread_setconcurrency(int32_t arg1)
{
dummy_concurrency_level = arg1;
return 0;
}
uint64_t pthread_setname_np(int64_t arg1, char* arg2)
{
if (!arg2)
return 0x16;
int32_t rbx_1;
if (!arg1)
rbx_1 = 3;
else
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (!rax_1 || *(rax_1 + 0x1d8) != arg1 || *(rax_1 + 0x40) & 0xc)
rbx_1 = 3;
else
{
rbx_1 = *(rax_1 + 0xbc);
if (rbx_1 || *(rax_1 + 0x28) - 1 > -3)
rbx_1 = 3;
else
{
char* rax_4 = _strdup(arg2);
if (!rax_4)
rbx_1 = 0xc;
else
{
int64_t rcx_2 = *(rax_1 + 0x60);
if (rcx_2)
free(rcx_2);
int32_t rax_5 = *(rax_1 + 0x70);
*(rax_1 + 0x60) = rax_4;
uint64_t arguments;
arguments = 0x1000;
char* var_40_1 = arg2;
int32_t var_34_1 = 0;
int32_t var_38_1 = rax_5;
if (IsDebuggerPresent() || SetThreadName_VEH_handle)
{
RaiseException(0x406d1388, 0, 3, &arguments);
/* no return */
}
}
}
}
}
return rbx_1;
}
uint64_t pthread_getname_np(int64_t arg1, void* arg2, int64_t arg3)
{
void* rbx = arg2;
int64_t i = arg3;
if (!arg2)
return 0x16;
int32_t r12_1;
if (!arg1)
r12_1 = 3;
else
{
pthread_mutex_lock(&mtx_pthr_locked);
void* rax_1 = __pthread_get_pointer(arg1);
pthread_mutex_unlock(&mtx_pthr_locked);
if (!rax_1 || *(rax_1 + 0x1d8) != arg1 || *(rax_1 + 0x40) & 0xc)
r12_1 = 3;
else
{
r12_1 = *(rax_1 + 0xbc);
if (r12_1 || *(rax_1 + 0x28) - 1 > -3)
r12_1 = 3;
else
{
if (!i)
return 0x22;
char* _Str = *(rax_1 + 0x60);
if (_Str)
{
if (strlen(_Str) >= i || i - 1 > 0x7ffffffe)
return 0x22;
if (i != 1)
{
do
{
char rax_6 = *_Str;
if (!rax_6)
break;
i -= 1;
rbx += 1;
_Str = &_Str[1];
*(rbx - 1) = rax_6;
} while (i > 1);
}
}
*rbx = 0;
}
}
}
return r12_1;
}
uint64_t _pthread_time_in_ms()
{
FILETIME systemTimeAsFileTime;
GetSystemTimeAsFileTime(&systemTimeAsFileTime);
return ((systemTimeAsFileTime.dwHighDateTime << 0x20) + systemTimeAsFileTime.dwLowDateTime
- 0x19db1ded53e8000) / 0x2710;
}
int64_t _pthread_time_in_ms_from_timespec(int64_t* arg1)
{
int64_t rax;
int64_t rdx_3;
rdx_3 = HIGHQ(0x431bde82d7b634db * (arg1[1] + 0xf423f));
rax = LOWQ(0x431bde82d7b634db * (arg1[1] + 0xf423f));
return (rdx_3 >> 0x12) + *arg1 * 0x3e8;
}
int64_t _pthread_rel_time_in_ms(int64_t* arg1)
{
int64_t rax;
int64_t rdx_3;
rdx_3 = HIGHQ(0x431bde82d7b634db * (arg1[1] + 0xf423f));
rax = LOWQ(0x431bde82d7b634db * (arg1[1] + 0xf423f));
int64_t rbx = (rdx_3 >> 0x12) + *arg1 * 0x3e8;
FILETIME systemTimeAsFileTime;
GetSystemTimeAsFileTime(&systemTimeAsFileTime);
uint64_t rdx_9 = (systemTimeAsFileTime.dwLowDateTime - 0x19db1ded53e8000
+ (systemTimeAsFileTime.dwHighDateTime << 0x20)) / 0x2710;
if (rbx < rdx_9)
return 0;
return rbx - rdx_9;
}
uint64_t _pthread_wait_for_single_object(HANDLE arg1, uint32_t arg2)
{
if (arg2 - 1 > 0xfffffffd)
/* tailcall */
return WaitForSingleObject(arg1, arg2);
uint64_t rsi = arg2;
uint32_t dwMilliseconds = rsi;
uint64_t rsi_1 = rsi + GetTickCount64();
while (true)
{
enum WAIT_EVENT rax_3 = WaitForSingleObject(arg1, dwMilliseconds);
uint64_t rax_2;
if (rax_3 == WAIT_TIMEOUT)
rax_2 = GetTickCount64();
if (rax_3 != WAIT_TIMEOUT || rax_2 >= rsi_1)
return rax_3;
dwMilliseconds = rsi_1 - rax_2;
}
}
uint64_t _pthread_wait_for_multiple_objects(uint32_t arg1, HANDLE* arg2, BOOL arg3, uint32_t arg4)
{
if (arg4 - 1 > 0xfffffffd)
/* tailcall */
return WaitForMultipleObjects(arg1, arg2, arg3, arg4);
uint64_t rsi = arg4;
uint32_t dwMilliseconds = rsi;
uint64_t rsi_1 = rsi + GetTickCount64();
while (true)
{
enum WAIT_EVENT rax_3 = WaitForMultipleObjects(arg1, arg2, arg3, dwMilliseconds);
uint64_t rax_2;
if (rax_3 == WAIT_TIMEOUT)
rax_2 = GetTickCount64();
if (rax_3 != WAIT_TIMEOUT || rax_2 >= rsi_1)
return rax_3;
dwMilliseconds = rsi_1 - rax_2;
}
}
uint64_t rwl_ref_destroy(int64_t* arg1, int64_t* arg2)
{
*arg2 = 0;
pthread_spin_lock(&rwl_global);
int32_t rbp;
if (!arg1)
rbp = 0x16;
else
{
int32_t* rax_1 = *arg1;
rbp = 0x16;
if (rax_1)
{
if (rax_1 == -1)
{
*arg1 = 0;
rbp = 0;
}
else if (*rax_1 == 0xbab1f0ed)
{
rbp = 0x10;
if (!rax_1[1])
{
*arg2 = rax_1;
*arg1 = 0;
rbp = 0;
}
}
}
}
pthread_spin_unlock(&rwl_global);
return rbp;
}
uint64_t rwl_ref_unlock(int64_t* arg1)
{
pthread_spin_lock(&rwl_global);
int32_t rbx_1;
if (!arg1)
rbx_1 = 0x16;
else
{
int32_t* rax_1 = *arg1;
rbx_1 = 0x16;
if (rax_1 && *rax_1 == 0xbab1f0ed)
{
rbx_1 = 1;
if (rax_1 != -1)
{
rax_1[1] += 1;
rbx_1 = 0;
}
}
}
pthread_spin_unlock(&rwl_global);
return rbx_1;
}
uint64_t rwl_unref(int64_t* arg1, int32_t arg2)
{
pthread_spin_lock(&rwl_global);
if (**arg1 == 0xbab1f0ed && *(*arg1 + 4) > 0)
{
void* rax_3 = *arg1;
*(rax_3 + 4) -= 1;
pthread_spin_unlock(&rwl_global);
return arg2;
}
int32_t var_28 = 0x28;
fprintf(__acrt_iob_func(2), "Assertion failed: (%s), file %s, line %d\n",
"(((rwlock_t *)*rwl)->valid == LIFE_RWLOCK) && (((rwlock_t *)*rwl)->busy > 0)");
exit(1);
/* no return */
}
int64_t st_cancelwrite(void* arg1)
{
int32_t rax_1 = -(*(arg1 + 0x10));
*(arg1 + 0x10) = 0;
*(arg1 + 0xc) = rax_1;
pthread_mutex_unlock(arg1 + 0x20);
/* tailcall */
return pthread_mutex_unlock(arg1 + 0x18);
}
int64_t rwl_print_set(int32_t arg1)
{
_.bss = arg1;
}
int64_t rwl_print(int64_t* arg1)
{
int32_t _.bss_1 = _.bss;
if (!_.bss_1)
return _.bss_1;
int32_t* rax = *arg1;
if (!rax)
{
GetCurrentThreadId();
/* tailcall */
return printf("RWL%p %d %s\n", *arg1);
}
int32_t rbp_1 = rax[1];
*rax;
GetCurrentThreadId();
int64_t rdx;
int64_t var_38_1 = rdx;
int32_t var_48_1 = 0;
int64_t var_40_1 = 0;
int32_t var_50_1 = 0;
int32_t var_58_1 = rbp_1;
return printf("RWL%p %d V=%0X B=%d r=%ld w=%ld L=%p %s\n", *arg1);
}
uint64_t pthread_rwlock_init(int64_t* arg1)
{
if (!arg1)
return 0x16;
*arg1 = 0;
int32_t* rax = calloc(1, 0x30);
int32_t rsi_1;
if (!rax)
rsi_1 = 0xc;
else
{
*rax = 0xdeadb0ef;
rax[4] = 0;
*(rax + 8) = 0;
int32_t rax_1 = pthread_mutex_init(&rax[6], nullptr);
if (rax_1)
{
free(rax);
return rax_1;
}
int32_t rax_2 = pthread_mutex_init(&rax[8], nullptr);
if (rax_2)
{
pthread_mutex_destroy(&rax[6]);
free(rax);
return rax_2;
}
int32_t rax_3 = pthread_cond_init(&rax[0xa], nullptr);
rsi_1 = rax_3;
if (rax_3)
{
pthread_mutex_destroy(&rax[6]);
pthread_mutex_destroy(&rax[8]);
free(rax);
}
else
{
*rax = 0xbab1f0ed;
*arg1 = rax;
}
}
return rsi_1;
}
uint64_t rwlock_static_init(int64_t* arg1)
{
pthread_spin_lock(&_.data);
if (*arg1 != -1)
{
pthread_spin_unlock(&_.data);
return 0x16;
}
int32_t rax = pthread_rwlock_init(arg1);
pthread_spin_unlock(&_.data);
return rax;
}
uint64_t rwl_ref.constprop.0(int64_t* arg1)
{
int32_t rax_3;
int32_t rsi_1;
if (*arg1 == -1)
{
rax_3 = rwlock_static_init(arg1);
rsi_1 = rax_3;
}
if (*arg1 != -1 || !(rax_3 & 0xffffffef))
{
rsi_1 = 0x16;
pthread_spin_lock(&rwl_global);
int32_t* rax_1 = *arg1;
if (rax_1 && *rax_1 == 0xbab1f0ed)
{
rax_1[1] += 1;
rsi_1 = 0;
}
pthread_spin_unlock(&rwl_global);
}
return rsi_1;
}
uint64_t pthread_rwlock_destroy(int64_t* arg1)
{
pthread_spin_lock(&_.data);
int32_t* var_40;
int32_t rbx = rwl_ref_destroy(arg1, &var_40);
pthread_spin_unlock(&_.data);
if (!rbx)
{
int32_t* rsi_1 = var_40;
if (rsi_1)
{
int32_t rax_2 = pthread_mutex_lock(&rsi_1[6]);
if (rax_2)
{
*arg1 = rsi_1;
return rax_2;
}
int32_t rax_4 = pthread_mutex_lock(&rsi_1[8]);
if (rax_4)
{
pthread_mutex_unlock(&rsi_1[6]);
*arg1 = rsi_1;
return rax_4;
}
if (rsi_1[3] > rsi_1[4] || rsi_1[2] > 0)
{
*arg1 = rsi_1;
int32_t rax_7 = pthread_mutex_unlock(&rsi_1[8]);
int32_t rax_8 = pthread_mutex_unlock(&rsi_1[6]);
rbx = rax_8;
if (!rax_8)
{
rbx = 0x10;
if (rax_7)
rbx = rax_7;
}
}
else
{
*rsi_1 = 0xdeadb0ef;
int32_t rdi_1 = pthread_mutex_unlock(&rsi_1[8]);
int32_t rax_10 = pthread_mutex_unlock(&rsi_1[6]);
if (rdi_1)
{
*arg1 = rsi_1;
return rdi_1;
}
if (rax_10)
{
*arg1 = rsi_1;
return rax_10;
}
pthread_cond_destroy(&rsi_1[0xa]);
pthread_mutex_destroy(&rsi_1[6]);
pthread_mutex_destroy(&rsi_1[8]);
free(rsi_1);
}
}
}
return rbx;
}
int64_t pthread_rwlock_rdlock(int64_t* arg1)
{
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rsi = *arg1;
int32_t rax = pthread_mutex_lock(rsi + 0x18);
int32_t rdx;
if (rax)
rdx = rax;
else
{
*(rsi + 0xc) += 1;
if (*(rsi + 0xc) == 0x7fffffff)
{
int32_t rax_2 = pthread_mutex_lock(rsi + 0x20);
if (!rax_2)
{
int32_t rax_3 = *(rsi + 0x10);
*(rsi + 0x10) = 0;
*(rsi + 0xc) -= rax_3;
int32_t rsi_1 = pthread_mutex_unlock(rsi + 0x20);
int32_t rax_5 = pthread_mutex_unlock(rsi + 0x18);
if (!rsi_1)
rsi_1 = rax_5;
rdx = rsi_1;
}
else
{
pthread_mutex_unlock(rsi + 0x18);
rdx = rax_2;
}
}
else
rdx = pthread_mutex_unlock(rsi + 0x18);
}
/* tailcall */
return rwl_unref(arg1, rdx);
}
int64_t pthread_rwlock_timedrdlock(int64_t* arg1, int64_t* arg2)
{
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rsi = *arg1;
int32_t rax = pthread_mutex_timedlock(rsi + 0x18, arg2);
int32_t rdx_1;
if (rax)
rdx_1 = rax;
else
{
*(rsi + 0xc) += 1;
if (*(rsi + 0xc) == 0x7fffffff)
{
int32_t rax_2 = pthread_mutex_timedlock(rsi + 0x20, arg2);
if (!rax_2)
{
int32_t rax_3 = *(rsi + 0x10);
*(rsi + 0x10) = 0;
*(rsi + 0xc) -= rax_3;
int32_t rsi_1 = pthread_mutex_unlock(rsi + 0x20);
int32_t rax_5 = pthread_mutex_unlock(rsi + 0x18);
if (!rsi_1)
rsi_1 = rax_5;
rdx_1 = rsi_1;
}
else
{
if (rax_2 == 0x8a)
*(rsi + 0x10) += 1;
pthread_mutex_unlock(rsi + 0x18);
rdx_1 = rax_2;
}
}
else
rdx_1 = pthread_mutex_unlock(rsi + 0x18);
}
/* tailcall */
return rwl_unref(arg1, rdx_1);
}
int64_t pthread_rwlock_tryrdlock(int64_t* arg1)
{
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rsi = *arg1;
int32_t rax = pthread_mutex_trylock(rsi + 0x18);
int32_t rdx;
if (rax)
rdx = rax;
else
{
*(rsi + 0xc) += 1;
if (*(rsi + 0xc) == 0x7fffffff)
{
int32_t rax_2 = pthread_mutex_lock(rsi + 0x20);
if (!rax_2)
{
int32_t rax_3 = *(rsi + 0x10);
*(rsi + 0x10) = 0;
*(rsi + 0xc) -= rax_3;
int32_t rsi_1 = pthread_mutex_unlock(rsi + 0x20);
int32_t rax_5 = pthread_mutex_unlock(rsi + 0x18);
if (!rsi_1)
rsi_1 = rax_5;
rdx = rsi_1;
}
else
{
pthread_mutex_unlock(rsi + 0x18);
rdx = rax_2;
}
}
else
rdx = pthread_mutex_unlock(rsi + 0x18);
}
/* tailcall */
return rwl_unref(arg1, rdx);
}
int64_t pthread_rwlock_trywrlock(int64_t* arg1)
{
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rsi = *arg1;
int32_t rax = pthread_mutex_trylock(rsi + 0x18);
int32_t rdx = rax;
if (!rax)
{
int32_t rax_1 = pthread_mutex_trylock(rsi + 0x20);
int32_t rdi_1 = rax_1;
if (rax_1)
{
int32_t rax_7 = pthread_mutex_unlock(rsi + 0x18);
if (rax_7)
rdi_1 = rax_7;
rdx = rdi_1;
}
else
{
rdx = 0x10;
if (!*(rsi + 8))
{
int32_t rdx_1 = *(rsi + 0x10);
int32_t rax_3 = *(rsi + 0xc);
if (rdx_1 > 0)
{
rax_3 -= rdx_1;
*(rsi + 0x10) = 0;
*(rsi + 0xc) = rax_3;
}
if (rax_3 > 0)
{
int32_t rsi_1 = pthread_mutex_unlock(rsi + 0x20);
int32_t rax_6 = pthread_mutex_unlock(rsi + 0x18);
if (!rsi_1)
{
rsi_1 = 0x10;
if (rax_6)
rsi_1 = rax_6;
}
rdx = rsi_1;
}
else
{
*(rsi + 8) = 1;
rdx = 0;
}
}
}
}
/* tailcall */
return rwl_unref(arg1, rdx);
}
int64_t pthread_rwlock_unlock(int64_t* arg1)
{
int32_t result = rwl_ref_unlock(arg1);
if (result)
return result;
void* rdi = *arg1;
int32_t rsi;
if (!*(rdi + 8))
{
int32_t rax_3 = pthread_mutex_lock(rdi + 0x20);
rsi = rax_3;
if (!rax_3)
{
*(rdi + 0x10) += 1;
if (!*(rdi + 0x10))
{
rsi = pthread_cond_signal(rdi + 0x28);
int32_t rax_7 = pthread_mutex_unlock(rdi + 0x20);
if (!rsi)
rsi = rax_7;
}
else
rsi = pthread_mutex_unlock(rdi + 0x20);
}
}
else
{
*(rdi + 8) -= 1;
rsi = pthread_mutex_unlock(rdi + 0x20);
int32_t rax_1 = pthread_mutex_unlock(rdi + 0x18);
if (!rsi)
rsi = rax_1;
}
/* tailcall */
return rwl_unref(arg1, rsi);
}
int64_t pthread_rwlock_wrlock(int64_t* arg1)
{
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rsi = *arg1;
int32_t rax = pthread_mutex_lock(rsi + 0x18);
int32_t rbp = rax;
if (!rax)
{
int32_t rax_1 = pthread_mutex_lock(rsi + 0x20);
rbp = rax_1;
if (rax_1)
pthread_mutex_unlock(rsi + 0x18);
else
{
if (!*(rsi + 8))
{
int32_t rdx_2 = *(rsi + 0x10);
int32_t rax_2 = *(rsi + 0xc);
if (rdx_2 > 0)
{
rax_2 -= rdx_2;
*(rsi + 0x10) = 0;
*(rsi + 0xc) = rax_2;
}
if (rax_2 > 0)
{
*(rsi + 0x10) = -(rax_2);
int64_t (* var_58)(void* arg1) = st_cancelwrite;
int64_t rax_6 = *pthread_getclean();
*pthread_getclean() = &var_58;
int64_t var_78;
int64_t var_78_2 = var_78;
do
{
int32_t rax_9 = pthread_cond_wait(rsi + 0x28, rsi + 0x20);
if (rax_9)
{
rbp = rax_9;
*pthread_getclean() = rax_6;
var_58(rsi);
goto label_14001d45a;
}
} while (*(rsi + 0x10) < 0);
*pthread_getclean() = rax_6;
*(rsi + 0xc) = 0;
}
}
*(rsi + 8) += 1;
}
}
label_14001d45a:
/* tailcall */
return rwl_unref(arg1, rbp);
}
int64_t pthread_rwlock_timedwrlock(int64_t* arg1, int64_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
int32_t result = rwl_ref.constprop.0(arg1);
if (result)
return result;
void* rdi = *arg1;
int32_t i_4 = pthread_mutex_timedlock(rdi + 0x18, arg2);
int32_t i_3 = i_4;
if (!i_4)
{
int32_t i_2 = pthread_mutex_timedlock(rdi + 0x20, arg2);
int32_t i_1 = i_2;
if (i_2)
pthread_mutex_unlock(rdi + 0x18);
else if (*(rdi + 8))
*(rdi + 8) += 1;
else
{
int32_t rdx_3 = *(rdi + 0x10);
int32_t rax = *(rdi + 0xc);
if (rdx_3 > 0)
{
rax -= rdx_3;
*(rdi + 0x10) = 0;
*(rdi + 0xc) = rax;
}
if (rax > 0)
{
*(rdi + 0x10) = -(rax);
int64_t (* var_58)(void* arg1) = st_cancelwrite;
int64_t rax_5 = *pthread_getclean();
*pthread_getclean() = &var_58;
int64_t var_78;
int64_t var_78_2 = var_78;
int32_t i;
do
{
i = pthread_cond_timedwait(rdi + 0x28, rdi + 0x20, arg2);
if (*(rdi + 0x10) >= 0)
break;
} while (!i);
*pthread_getclean() = rax_5;
if (i)
{
i_1 = i;
var_58(rdi);
}
else
{
*(rdi + 0xc) = 0;
*(rdi + 8) += 1;
}
}
else
*(rdi + 8) += 1;
}
i_3 = i_1;
}
/* tailcall */
return rwl_unref(arg1, i_3);
}
uint64_t pthread_rwlockattr_destroy(int64_t arg1, int32_t arg2 @ rax) __pure
{
return (arg2 - arg2) & 0x16;
}
int64_t pthread_rwlockattr_init(int32_t* arg1)
{
if (!arg1)
return 0x16;
*arg1 = 0;
return 0;
}
int64_t pthread_rwlockattr_getpshared(int32_t* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = *arg1;
return 0;
}
int64_t pthread_rwlockattr_setpshared(int32_t* arg1, int32_t arg2)
{
if (!arg1 || arg2 > 1)
return 0x16;
*arg1 = arg2;
return 0;
}
int64_t pthread_spin_init(int64_t* arg1)
{
*arg1 = -1;
return 0;
}
int64_t pthread_spin_destroy() __pure
{
return 0;
}
int64_t pthread_spin_lock(int64_t* arg1)
{
while (true)
{
int64_t temp0_1 = *arg1;
*arg1 = 0;
if (temp0_1)
break;
while (!*arg1)
/* nop */
}
return 0;
}
uint64_t pthread_spin_trylock(int64_t* arg1)
{
int64_t temp0 = *arg1;
*arg1 = 0;
int64_t rax;
rax = !temp0;
return rax << 4;
}
int64_t pthread_spin_unlock(int64_t* arg1)
{
*arg1 = -1;
return 0;
}
int64_t do_sema_b_release(HANDLE arg1, int32_t arg2, CRITICAL_SECTION* arg3, int32_t* arg4)
{
EnterCriticalSection(arg3);
int64_t rax = *arg4;
int32_t rdx = rax;
if (rax + arg2 > 0x7fffffff)
{
LeaveCriticalSection(arg3);
return 0x22;
}
*arg4 += arg2;
if (rdx < 0)
{
int32_t lReleaseCount = -(rdx);
if (lReleaseCount > arg2)
lReleaseCount = arg2;
if (!ReleaseSemaphore(arg1, lReleaseCount, nullptr))
{
*arg4 += -(arg2);
LeaveCriticalSection(arg3);
return 0x16;
}
}
LeaveCriticalSection(arg3);
return 0;
}
void cond_print_set(int32_t arg1, int64_t arg2)
{
if (arg2)
_.bss = arg2;
else if (!_.bss)
{
FILE* rax = __acrt_iob_func(1);
print_state = arg1;
_.bss = rax;
return;
}
print_state = arg1;
}
int64_t cond_print(int64_t* arg1, int64_t arg2)
{
int32_t print_state_1 = print_state;
if (!print_state_1)
return print_state_1;
int32_t* rax = *arg1;
if (!rax)
{
GetCurrentThreadId();
int32_t var_48;
var_48 = arg2;
return fprintf(_.bss, "C%p %d %s\n", *arg1);
}
int32_t rbp = rax[2];
int32_t rdi = *rax;
GetCurrentThreadId();
int64_t var_38 = arg2;
int32_t var_40 = rbp;
int32_t var_48_1 = rdi;
return fprintf(_.bss, "C%p %d V=%0X w=%ld %s\n", *arg1);
}
int64_t pthread_condattr_destroy(int32_t* arg1)
{
if (!arg1)
return 0x16;
*arg1 = 0;
return 0;
}
int64_t pthread_condattr_init(int32_t* arg1)
{
if (!arg1)
return 0x16;
*arg1 = 0;
return 0;
}
int64_t pthread_condattr_getpshared(int32_t* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = *arg1;
return 0;
}
int64_t pthread_condattr_getclock(int64_t arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = 0;
return 0;
}
int64_t pthread_condattr_setclock(int64_t arg1, int32_t arg2) __pure
{
if (arg1 && !arg2)
return 0;
return 0x16;
}
int64_t __pthread_clock_nanosleep(int32_t arg1, int32_t arg2, int64_t* arg3, int64_t* arg4)
{
if (arg1 > 2)
return 0x16;
int64_t i_1;
if (arg2 & 1)
i_1 = _pthread_rel_time_in_ms(arg3);
else
i_1 = _pthread_time_in_ms_from_timespec(arg3);
uint64_t rbx_2;
int64_t i;
do
{
uint64_t rax_2 = _pthread_time_in_ms();
uint32_t rcx_1 = 0x1869f;
if (i_1 <= 0x1869f)
rcx_1 = i_1;
pthread_delay_np_ms(rcx_1);
uint64_t rax_3 = _pthread_time_in_ms();
if (rax_3 - rax_2 >= i_1)
break;
rbx_2 = rax_2 - rax_3;
i = i_1;
i_1 += rbx_2;
} while (i != -(rbx_2));
if (arg4)
{
*arg4 = 0;
arg4[1] = 0;
}
return 0;
}
int64_t pthread_condattr_setpshared(int32_t* arg1, int32_t arg2)
{
if (!arg1 || arg2 > 1)
return 0x16;
*arg1 = 0;
if (arg2 == 1)
return 0x28;
return 0;
}
int64_t pthread_cond_init(void** arg1, int32_t* arg2)
{
if (!arg1)
return 0x16;
if (arg2 && *arg2 == 1)
return 0x28;
int32_t* rax = calloc(1, 0xb0);
if (!rax)
return 0xc;
*(rax + 4) = {0};
*rax = 0xc0deadbf;
*(rax + 0xa0) = CreateSemaphoreA(nullptr, 0, 0x7fffffff, nullptr);
HANDLE hObject_2 = CreateSemaphoreA(nullptr, 0, 0x7fffffff, nullptr);
HANDLE hObject_1 = hObject_2;
*(rax + 0xa8) = hObject_2;
HANDLE hObject = *(rax + 0xa0);
if (hObject)
{
if (hObject_1)
{
InitializeCriticalSection(&rax[6]);
InitializeCriticalSection(&rax[0x1c]);
InitializeCriticalSection(&rax[0x10]);
rax[0x1a] = 0;
rax[0x26] = 1;
*rax = 0xc0bab1fd;
*arg1 = rax;
return 0;
}
CloseHandle(hObject);
hObject_1 = *(rax + 0xa8);
}
if (hObject_1)
CloseHandle(hObject_1);
free(rax);
*arg1 = nullptr;
return 0xb;
}
uint64_t do_sema_b_wait_intern(HANDLE arg1, int32_t arg2, uint32_t arg3)
{
int32_t rbp = arg2;
uint32_t rbx = arg3;
int32_t rsi_1;
if (arg2 == 1)
{
int32_t rax_12 = _pthread_wait_for_single_object(arg1, arg3);
if (rax_12 == 0x80)
goto label_14001dd9a;
if (rax_12 == 0x102)
{
rbp = 0x8a;
label_14001dd9a:
rsi_1 = rbp;
if (!WaitForSingleObject(arg1, 0))
rsi_1 = 0;
label_14001dc3e:
return rsi_1;
}
if (!rax_12)
{
label_14001dc30:
rsi_1 = 0;
label_14001dc3e_1:
return rsi_1;
}
}
else
{
HANDLE hHandle = arg1;
void* hEvent = pthread_getevent();
if (!hEvent)
{
uint32_t rdi_1 = 0x14;
if (rbx != 0xffffffff)
{
while (true)
{
uint32_t r12_1 = rdi_1;
if (rbx <= rdi_1)
r12_1 = rbx;
int32_t rax_5 = _pthread_wait_for_single_object(arg1, r12_1);
if (rax_5 == 0x80)
{
rsi_1 = 1;
if (rdi_1 < rbx)
{
label_14001dd20:
if (__pthread_shallcancel())
return 0x16;
}
}
else if (rax_5 == 0x102)
{
uint32_t temp0_1 = rbx;
rbx -= r12_1;
if (temp0_1 == r12_1)
{
if (!WaitForSingleObject(arg1, 0))
break;
rsi_1 = 0x8a;
}
else
{
if (__pthread_shallcancel())
return 0x16;
rdi_1 = r12_1;
continue;
}
}
else
{
rsi_1 = 0;
if (!rax_5)
goto label_14001dc3e_1;
rsi_1 = 0x16;
if (rdi_1 < rbx)
goto label_14001dd20;
}
if (rbp == 2)
goto label_14001dc3e_1;
pthread_testcancel();
goto label_14001dc3e_1;
}
goto label_14001dc30;
}
int32_t rax_7;
while (true)
{
rax_7 = _pthread_wait_for_single_object(arg1, 0x28);
if (rax_7 == 0x80)
{
if (__pthread_shallcancel())
goto label_14001dcf9;
rsi_1 = WaitForSingleObject(arg1, 0);
goto label_14001dc3e_1;
}
if (rax_7 != 0x102)
break;
if (__pthread_shallcancel())
goto label_14001dcf9;
}
if (!rax_7)
goto label_14001dc30;
if (__pthread_shallcancel())
{
label_14001dcf9:
if (rbp != 2)
pthread_testcancel();
}
}
else
{
while (true)
{
int32_t rax = _pthread_wait_for_multiple_objects(2, &hHandle, 0, rbx);
if (rax == 0x80)
{
rsi_1 = 1;
label_14001dc23:
if (!WaitForSingleObject(hHandle, 0))
goto label_14001dc30;
}
else if (rax > 0x80)
{
rsi_1 = 0x8a;
if (rax == 0x102)
goto label_14001dc23;
rsi_1 = 0x16;
}
else
{
if (!rax)
goto label_14001dc30;
if (rax == 1)
{
ResetEvent(hEvent);
if (rbp != 2)
break;
pthread_testcancel();
continue;
}
rsi_1 = 0x16;
}
if (rbp == 2)
goto label_14001dc3e_1;
if (!__pthread_shallcancel())
goto label_14001dc3e_1;
return 0x16;
}
pthread_testcancel();
}
}
return 0x16;
}
uint64_t do_sema_b_wait(HANDLE arg1, int32_t arg2, uint32_t arg3, CRITICAL_SECTION* arg4, int32_t* arg5)
{
EnterCriticalSection(arg4);
*arg5 -= 1;
int32_t rdi = 0;
int32_t rsi = *arg5;
LeaveCriticalSection(arg4);
if (rsi < 0)
{
rdi = do_sema_b_wait_intern(arg1, arg2, arg3);
EnterCriticalSection(arg4);
if (rdi)
*arg5 += 1;
LeaveCriticalSection(arg4);
}
return rdi;
}
uint64_t pthread_cond_destroy(int64_t* arg1)
{
if (!arg1)
return 0x16;
void* rbx = *arg1;
int32_t rdi = 0x16;
if (rbx)
{
if (rbx == -1)
{
int32_t rdi_1 = 0x10;
pthread_spin_lock(&_.data);
if (*arg1 == -1)
{
*arg1 = 0;
rdi_1 = 0;
}
pthread_spin_unlock(&_.data);
return rdi_1;
}
int32_t rax_1 = do_sema_b_wait(*(rbx + 0xa8), 0, 0xffffffff, rbx + 0x70, rbx + 0x98);
rdi = rax_1;
if (!rax_1)
{
BOOL rax_3 = TryEnterCriticalSection(rbx + 0x18);
HANDLE rcx_2 = *(rbx + 0xa8);
if (!rax_3)
{
do_sema_b_release(rcx_2, 1, rbx + 0x70, rbx + 0x98);
rdi = 0x10;
}
else
{
if (*(rbx + 8) <= *(rbx + 0x10))
{
*arg1 = 0;
do_sema_b_release(rcx_2, 1, rbx + 0x70, rbx + 0x98);
CloseHandle(*(rbx + 0xa0));
CloseHandle(*(rbx + 0xa8));
LeaveCriticalSection(rbx + 0x18);
DeleteCriticalSection(rbx + 0x18);
DeleteCriticalSection(rbx + 0x70);
DeleteCriticalSection(rbx + 0x40);
free(rbx);
return rdi;
}
int32_t rax_6 = do_sema_b_release(rcx_2, 1, rbx + 0x70, rbx + 0x98);
rdi = rax_6;
if (!rax_6)
rdi = 0x10;
LeaveCriticalSection(rbx + 0x18);
}
}
}
return rdi;
}
uint64_t pthread_cond_signal(int64_t* arg1)
{
if (arg1)
{
void* rbx_1 = *arg1;
if (rbx_1)
{
if (rbx_1 != -1)
{
if (*rbx_1 != 0xc0bab1fd)
return 0x16;
EnterCriticalSection(rbx_1 + 0x18);
int32_t rax_2 = *(rbx_1 + 0xc);
int32_t rax_7;
int32_t rdx_2;
if (rax_2)
{
int32_t rcx_2 = *(rbx_1 + 8);
rax_7 = rax_2 + 1;
rdx_2 = rcx_2 - 1;
if (rcx_2)
{
label_14001e11d:
*(rbx_1 + 8) = rdx_2;
*(rbx_1 + 0xc) = rax_7;
LeaveCriticalSection(rbx_1 + 0x18);
/* tailcall */
return do_sema_b_release(*(rbx_1 + 0xa0), 1, rbx_1 + 0x40, rbx_1 + 0x68);
}
}
else if (*(rbx_1 + 8) > *(rbx_1 + 0x10))
{
int32_t rax_5 =
do_sema_b_wait(*(rbx_1 + 0xa8), 1, 0xffffffff, rbx_1 + 0x70, rbx_1 + 0x98);
if (rax_5)
{
LeaveCriticalSection(rbx_1 + 0x18);
return rax_5;
}
int32_t rax_6 = *(rbx_1 + 0x10);
int32_t rdx_1 = *(rbx_1 + 8);
if (rax_6)
{
rdx_1 -= rax_6;
*(rbx_1 + 0x10) = 0;
}
rdx_2 = rdx_1 - 1;
rax_7 = 1;
goto label_14001e11d;
}
LeaveCriticalSection(rbx_1 + 0x18);
}
return 0;
}
}
return 0x16;
}
uint64_t pthread_cond_broadcast(int64_t* arg1)
{
if (arg1)
{
void* rbx_1 = *arg1;
if (rbx_1)
{
if (rbx_1 != -1)
{
if (*rbx_1 != 0xc0bab1fd)
return 0x16;
EnterCriticalSection(rbx_1 + 0x18);
int32_t rax_2 = *(rbx_1 + 0xc);
int32_t rax_7;
int32_t rdi_1;
if (rax_2)
{
rdi_1 = *(rbx_1 + 8);
rax_7 = rax_2 + rdi_1;
if (rdi_1)
{
label_14001e24c:
*(rbx_1 + 8) = 0;
*(rbx_1 + 0xc) = rax_7;
LeaveCriticalSection(rbx_1 + 0x18);
/* tailcall */
return do_sema_b_release(*(rbx_1 + 0xa0), rdi_1, rbx_1 + 0x40,
rbx_1 + 0x68);
}
}
else if (*(rbx_1 + 8) > *(rbx_1 + 0x10))
{
int32_t rax_5 =
do_sema_b_wait(*(rbx_1 + 0xa8), 1, 0xffffffff, rbx_1 + 0x70, rbx_1 + 0x98);
if (rax_5)
{
LeaveCriticalSection(rbx_1 + 0x18);
return rax_5;
}
int32_t rax_6 = *(rbx_1 + 0x10);
rdi_1 = *(rbx_1 + 8);
if (rax_6)
{
rdi_1 -= rax_6;
*(rbx_1 + 0x10) = 0;
}
rax_7 = rdi_1;
goto label_14001e24c;
}
LeaveCriticalSection(rbx_1 + 0x18);
}
return 0;
}
}
return 0x16;
}
uint64_t pthread_cond_wait(int64_t* arg1, int64_t arg2)
{
int32_t** rdi = arg1;
int32_t rbx;
if (!arg1)
rbx = 0x16;
else
{
int32_t* rsi_1 = *arg1;
rbx = 0x16;
if (rsi_1)
{
if (rsi_1 == -1)
{
pthread_spin_lock(&_.data);
int32_t var_7c;
if (*rdi == -1)
{
rbx = pthread_cond_init(rdi, nullptr);
pthread_spin_unlock(&_.data);
var_7c = rbx;
if (!(rbx & 0xffffffef))
goto label_14001e465;
}
else
{
pthread_spin_unlock(&_.data);
var_7c = 0;
label_14001e465:
rsi_1 = *rdi;
label_14001e357:
while (true)
{
int32_t rax_3 = do_sema_b_wait(*(rsi_1 + 0xa8), 0, 0xffffffff,
&rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_3;
var_7c = rax_3;
if (rax_3)
break;
if (TryEnterCriticalSection(&rsi_1[6]))
{
rsi_1[2] += 1;
LeaveCriticalSection(&rsi_1[6]);
int32_t rax_5 =
do_sema_b_release(*(rsi_1 + 0xa8), 1, &rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_5;
var_7c = rax_5;
if (!rax_5)
{
int32_t* var_68_1 = &var_7c;
uint128_t zmm0_1 = _mm_unpacklo_epi64(rsi_1, arg2);
int32_t* (* var_58)(int64_t* arg1) = cleanup_wait;
uint128_t var_78 = zmm0_1;
uint128_t* var_50_1 = &var_78;
int64_t rax_7 = *pthread_getclean();
*pthread_getclean() = &var_58;
int64_t var_b8;
int64_t var_b8_2 = var_b8;
int32_t rax_9 = pthread_mutex_unlock(arg2);
var_7c = rax_9;
if (!rax_9)
var_7c = do_sema_b_wait(*(rsi_1 + 0xa0), 0, 0xffffffff,
&rsi_1[0x10], &rsi_1[0x1a]);
*pthread_getclean() = rax_7;
var_58(var_50_1);
rbx = var_7c;
}
break;
}
int32_t rax_2 =
do_sema_b_release(*(rsi_1 + 0xa8), 1, &rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_2;
var_7c = rax_2;
if (rax_2)
break;
sched_yield();
}
}
}
else if (*rsi_1 == 0xc0bab1fd)
goto label_14001e357;
}
}
return rbx;
}
int32_t* cleanup_wait(int64_t* arg1)
{
void* rbx = *arg1;
EnterCriticalSection(rbx + 0x18);
int32_t rdi = *(rbx + 0xc);
int32_t* result;
if (!rdi)
{
int32_t rax_1 = *(rbx + 0x10);
if (rax_1 == 0x3ffffffe)
{
HANDLE rcx_6 = *(rbx + 0xa8);
*(rbx + 0x10) = 0x3fffffff;
int32_t rax_3 = do_sema_b_wait(rcx_6, 1, 0xffffffff, rbx + 0x70, rbx + 0x98);
int32_t rdi_1 = rax_3;
int32_t rax_5;
if (!rax_3)
{
*(rbx + 8) -= *(rbx + 0x10);
rax_5 = do_sema_b_release(*(rbx + 0xa8), 1, rbx + 0x70, rbx + 0x98);
rdi_1 = rax_5;
}
if (rax_3 || rax_5)
{
LeaveCriticalSection(rbx + 0x18);
result = arg1[2];
*result = rdi_1;
}
else
{
*(rbx + 0x10) = 0;
LeaveCriticalSection(rbx + 0x18);
label_14001e52e:
result = pthread_mutex_lock(arg1[1]);
if (result)
*arg1[2] = result;
}
}
else
{
*(rbx + 0x10) = rax_1 + 1;
LeaveCriticalSection(rbx + 0x18);
result = pthread_mutex_lock(arg1[1]);
if (result)
*arg1[2] = result;
}
}
else
{
*(rbx + 0xc) = rdi - 1;
LeaveCriticalSection(rbx + 0x18);
if (rdi != 1)
goto label_14001e52e;
result = do_sema_b_release(*(rbx + 0xa8), 1, rbx + 0x70, rbx + 0x98);
if (!result)
goto label_14001e52e;
*arg1[2] = result;
}
return result;
}
uint64_t pthread_cond_timedwait_impl(int64_t* arg1, int64_t arg2, int64_t* arg3, int32_t arg4)
{
int32_t rbx;
if (!arg1)
rbx = 0x16;
else
{
int32_t* rsi_1 = *arg1;
rbx = 0x16;
if (rsi_1)
{
if (rsi_1 == -1)
{
pthread_spin_lock(&_.data);
int32_t var_8c;
if (*arg1 == -1)
{
rbx = pthread_cond_init(arg1, nullptr);
pthread_spin_unlock(&_.data);
var_8c = rbx;
if (!(rbx & 0xffffffef))
goto label_14001e815;
}
else
{
pthread_spin_unlock(&_.data);
var_8c = 0;
label_14001e815:
rsi_1 = *arg1;
label_14001e664:
uint64_t r15_1;
if (arg4)
{
r15_1 = _pthread_time_in_ms_from_timespec(arg3);
if (0xfffffffe < r15_1)
r15_1 = 0xffffffff;
}
else
{
int64_t rax_1 = _pthread_rel_time_in_ms(arg3);
r15_1 = rax_1;
if (0xfffffffe < rax_1)
r15_1 = 0xffffffff;
}
while (true)
{
int32_t rax_4 = do_sema_b_wait(*(rsi_1 + 0xa8), 0, 0xffffffff,
&rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_4;
var_8c = rax_4;
if (rax_4)
break;
if (TryEnterCriticalSection(&rsi_1[6]))
{
rsi_1[2] += 1;
LeaveCriticalSection(&rsi_1[6]);
int32_t rax_7 =
do_sema_b_release(*(rsi_1 + 0xa8), 1, &rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_7;
var_8c = rax_7;
if (!rax_7)
{
int32_t* var_78_1 = &var_8c;
uint128_t zmm0_1 = _mm_unpacklo_epi64(rsi_1, arg2);
int32_t* (* var_68)(int64_t* arg1) = cleanup_wait;
uint128_t var_88 = zmm0_1;
uint128_t* var_60_1 = &var_88;
int64_t rax_9 = *pthread_getclean();
*pthread_getclean() = &var_68;
int64_t var_c8;
int64_t var_c8_2 = var_c8;
int32_t rax_11 = pthread_mutex_unlock(arg2);
var_8c = rax_11;
if (!rax_11)
var_8c = do_sema_b_wait(*(rsi_1 + 0xa0), 0, r15_1,
&rsi_1[0x10], &rsi_1[0x1a]);
*pthread_getclean() = rax_9;
var_68(var_60_1);
rbx = var_8c;
}
break;
}
int32_t rax_3 =
do_sema_b_release(*(rsi_1 + 0xa8), 1, &rsi_1[0x1c], &rsi_1[0x26]);
rbx = rax_3;
var_8c = rax_3;
if (rax_3)
break;
sched_yield();
}
}
}
else if (*rsi_1 == 0xc0bab1fd)
goto label_14001e664;
}
}
return rbx;
}
int64_t pthread_cond_timedwait(int64_t* arg1, int64_t arg2, int64_t* arg3)
{
/* tailcall */
return pthread_cond_timedwait_impl(arg1, arg2, arg3, 0);
}
int64_t pthread_cond_timedwait_relative_np(int64_t* arg1, int64_t arg2, int64_t* arg3)
{
/* tailcall */
return pthread_cond_timedwait_impl(arg1, arg2, arg3, 1);
}
int64_t pthread_check(int64_t arg1)
{
if (arg1)
{
void* rax_1 = __pth_gpointer_locked(arg1);
if (!*(rax_1 + 0xbc))
return 0;
HANDLE hObject = *(rax_1 + 0x28);
uint32_t lpdwFlags;
if (hObject - 1 <= -3 && GetHandleInformation(hObject, &lpdwFlags))
return 0;
}
return 3;
}
int64_t sched_get_priority_min(int32_t arg1)
{
if (arg1 <= 2)
return 0xfffffff1;
*_errno() = 0x16;
return 0xffffffff;
}
int64_t sched_get_priority_max(int32_t arg1)
{
if (arg1 <= 2)
return 0xf;
*_errno() = 0x16;
return 0xffffffff;
}
int64_t pthread_attr_setschedparam(void* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*(arg1 + 0x18) = *arg2;
return 0;
}
int64_t pthread_attr_getschedparam(void* arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = *(arg1 + 0x18);
return 0;
}
uint64_t pthread_attr_setschedpolicy(int64_t arg1, int32_t arg2, int32_t arg3 @ rax) __pure
{
if (arg1 && arg2 <= 2)
return (arg3 - arg3) & 0x81;
return 0x16;
}
int64_t pthread_attr_getschedpolicy(int64_t arg1, int32_t* arg2)
{
if (!arg1 || !arg2)
return 0x16;
*arg2 = 0;
return 0;
}
uint64_t pthread_getschedparam(int64_t arg1, int32_t* arg2, int32_t* arg3)
{
int32_t rax = pthread_check(arg1);
if (!rax)
{
if (!arg3 || !arg2)
return 0x16;
*arg2 = *(__pth_gpointer_locked(arg1) + 0xb8);
*arg3 = *(__pth_gpointer_locked(arg1) + 0xc0);
}
return rax;
}
int64_t pthread_setschedparam(int64_t arg1, int32_t arg2, int32_t* arg3)
{
int32_t result = pthread_check(arg1);
if (!result)
{
if (arg2 > 2 || !arg3)
return 0x16;
result = 0x81;
if (!arg2)
{
enum THREAD_PRIORITY nPriority = *arg3;
if (nPriority + 0xf <= 0x1e)
{
if (nPriority != 0xfffffff1)
{
if (nPriority < ~THREAD_PRIORITY_NORMAL)
nPriority = ~THREAD_PRIORITY_ABOVE_NORMAL~THREAD_PRIORITY_NORMAL;
else
{
enum THREAD_PRIORITY nPriority_1 = THREAD_PRIORITY_HIGHEST;
if (nPriority <= THREAD_PRIORITY_HIGHEST)
nPriority_1 = nPriority;
if (nPriority != THREAD_PRIORITY_TIME_CRITICAL)
nPriority = nPriority_1;
}
}
void* rax_1 = __pth_gpointer_locked(arg1);
if (SetThreadPriority(*(rax_1 + 0x28), nPriority))
{
*(rax_1 + 0xb8) = 0;
*(rax_1 + 0xc0) = *arg3;
return 0;
}
}
return 0x16;
}
}
return result;
}
int64_t sched_getscheduler(int64_t arg1)
{
if (arg1 && GetCurrentProcessId() != arg1)
{
HANDLE hObject = OpenProcess(PROCESS_QUERY_INFORMATION, 0, arg1);
if (!hObject)
{
int32_t rbx_1;
rbx_1 = GetLastError() != ERROR_ACCESS_DENIED;
*_errno() = rbx_1 * 2 + 1;
return 0xffffffff;
}
CloseHandle(hObject);
}
return 0;
}
uint64_t sched_setscheduler(int64_t arg1, int32_t arg2, int64_t arg3)
{
int32_t rbx = arg2;
if (!arg3)
{
*_errno() = 0x16;
rbx = -1;
}
else
{
if (!arg1)
goto label_14001eb75;
if (GetCurrentProcessId() == arg1)
goto label_14001eb75;
HANDLE hObject = OpenProcess(PROCESS_SET_INFORMATION, 0, arg1);
if (!hObject)
{
int32_t rbx_1;
rbx_1 = GetLastError() != ERROR_ACCESS_DENIED;
*_errno() = rbx_1 * 2 + 1;
rbx = -1;
}
else
{
CloseHandle(hObject);
label_14001eb75:
if (rbx)
{
*_errno() = 0x28;
rbx = -1;
}
}
}
return rbx;
}
int64_t sched_yield()
{
Sleep(0);
return 0;
}
enum WAIT_EVENT WaitForSingleObject(HANDLE hHandle, uint32_t dwMilliseconds)
{
/* tailcall */
return WaitForSingleObject(hHandle, dwMilliseconds);
}
enum WAIT_EVENT WaitForMultipleObjects(uint32_t nCount, HANDLE* lpHandles, BOOL bWaitAll, uint32_t dwMilliseconds)
{
/* tailcall */
return WaitForMultipleObjects(nCount, lpHandles, bWaitAll, dwMilliseconds);
}
BOOL TryEnterCriticalSection(CRITICAL_SECTION* lpCriticalSection)
{
/* tailcall */
return TryEnterCriticalSection(lpCriticalSection);
}
BOOL TlsSetValue(uint32_t dwTlsIndex, void* lpTlsValue)
{
/* tailcall */
return TlsSetValue(dwTlsIndex, lpTlsValue);
}
uint32_t TlsAlloc()
{
/* tailcall */
return TlsAlloc();
}
uint32_t SuspendThread(HANDLE hThread)
{
/* tailcall */
return SuspendThread(hThread);
}
BOOL SetThreadPriority(HANDLE hThread, enum THREAD_PRIORITY nPriority)
{
/* tailcall */
return SetThreadPriority(hThread, nPriority);
}
BOOL SetThreadContext(HANDLE hThread, CONTEXT* lpContext)
{
/* tailcall */
return SetThreadContext(hThread, lpContext);
}
BOOL SetProcessAffinityMask(HANDLE hProcess, uint64_t dwProcessAffinityMask)
{
/* tailcall */
return SetProcessAffinityMask(hProcess, dwProcessAffinityMask);
}
void SetLastError(enum WIN32_ERROR dwErrCode)
{
/* tailcall */
return SetLastError(dwErrCode);
}
BOOL SetEvent(HANDLE hEvent)
{
/* tailcall */
return SetEvent(hEvent);
}
uint32_t ResumeThread(HANDLE hThread)
{
/* tailcall */
return ResumeThread(hThread);
}
BOOL ResetEvent(HANDLE hEvent)
{
/* tailcall */
return ResetEvent(hEvent);
}
uint32_t RemoveVectoredExceptionHandler(void* Handle)
{
/* tailcall */
return RemoveVectoredExceptionHandler(Handle);
}
BOOL ReleaseSemaphore(HANDLE hSemaphore, int32_t lReleaseCount, int32_t* lpPreviousCount)
{
/* tailcall */
return ReleaseSemaphore(hSemaphore, lReleaseCount, lpPreviousCount);
}
void RaiseException(uint32_t dwExceptionCode, uint32_t dwExceptionFlags, uint32_t nNumberOfArguments, uint64_t* lpArguments) __noreturn
{
/* tailcall */
return RaiseException(dwExceptionCode, dwExceptionFlags, nNumberOfArguments, lpArguments);
}
int64_t printf(char* arg1, int64_t arg2)
{
int64_t _ArgList = arg2;
int64_t r8;
int64_t arg_18 = r8;
int64_t r9;
int64_t arg_20 = r9;
int64_t* var_20 = &_ArgList;
return __stdio_common_vfprintf(0, __acrt_iob_func(1), arg1, nullptr, &_ArgList);
}
char* _strdup(char const* _Source)
{
/* tailcall */
return _strdup(_Source);
}
uintptr_t _.text(void* _Security, uint32_t _StackSize, _beginthreadex_proc_type _StartAddress, void* _ArgList, uint32_t _InitFlag, uint32_t* _ThrdAddr)
{
/* tailcall */
return _beginthreadex(_Security, _StackSize, _StartAddress, _ArgList, _InitFlag, _ThrdAddr);
}
void _.text(uint32_t _ReturnCode)
{
/* tailcall */
return _endthreadex(_ReturnCode);
}
int64_t __intrinsic_setjmpex(int64_t* arg1)
{
/* tailcall */
return __intrinsic_setjmpex(arg1);
}
void _.text(jmp_buf& _Buf, int32_t _Value) __noreturn
{
/* tailcall */
return longjmp(_Buf, _Value);
}
int64_t memmove(void* _Dst, void const* _Src, uint64_t _Size)
{
/* tailcall */
return memmove(_Dst, _Src, _Size);
}
char* _.text(uint32_t _Value, char* _Buffer, int32_t _Radix)
{
/* tailcall */
return _ultoa(_Value, _Buffer, _Radix);
}
void pthread_tls_init.cold() __noreturn
{
abort();
/* no return */
}
void _pthread_once_raw.constprop.0.isra.0.cold() __noreturn
{
abort();
/* no return */
}
void __pthread_self_lite.part.0.cold() __noreturn
{
abort();
/* no return */
}
void thread_print.cold() __noreturn
{
*0x28;
trap(6);
}
void pthread_once.cold(int64_t arg1) __noreturn
{
*0 = arg1;
trap(6);
}
int64_t register_frame_ctor()
{
/* tailcall */
return __gcc_register_frame();
}