/* Generated by Nim Compiler v0.17.0 */
/*   (c) 2017 Andreas Rumpf */
/* The generated code is subject to the original license. */
/* Compiled for: Linux, arm, gcc */
/* Command for C compiler:
   gcc -c  -w -O3 -fno-strict-aliasing -fPIC  -I/build/nim/src/Nim-0.17.0/lib -o lib/nimcache/stdlib_system.o lib/nimcache/stdlib_system.c */
#define NIM_NEW_MANGLING_RULES
#define NIM_INTBITS 32

#include "nimbase.h"
#include <string.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
#include <signal.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#undef linux
#undef near
typedef struct Exception Exception;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct GcHeap_1TRH1TZMaVZTnLNcIHuNFQ GcHeap_1TRH1TZMaVZTnLNcIHuNFQ;
typedef struct GcStack_7fytPA5bBsob6See21YMRA GcStack_7fytPA5bBsob6See21YMRA;
typedef struct CellSeq_Axo1XVm9aaQueTOldv8le5w CellSeq_Axo1XVm9aaQueTOldv8le5w;
typedef struct Cell_1zcF9cV8XIAtbN8h5HRUB8g Cell_1zcF9cV8XIAtbN8h5HRUB8g;
typedef struct MemRegion_x81NhDv59b8ercDZ9bi85jyg MemRegion_x81NhDv59b8ercDZ9bi85jyg;
typedef struct SmallChunk_tXn60W2f8h3jgAYdEmy5NQ SmallChunk_tXn60W2f8h3jgAYdEmy5NQ;
typedef struct LLChunk_XsENErzHIZV9bhvyJx56wGw LLChunk_XsENErzHIZV9bhvyJx56wGw;
typedef struct BigChunk_Rv9c70Uhp2TytkX7eH78qEg BigChunk_Rv9c70Uhp2TytkX7eH78qEg;
typedef struct IntSet_EZObFrE3NC9bIb3YMkY9crZA IntSet_EZObFrE3NC9bIb3YMkY9crZA;
typedef struct Trunk_W0r8S0Y3UGke6T9bIUWnnuw Trunk_W0r8S0Y3UGke6T9bIUWnnuw;
typedef struct AvlNode_IaqjtwKhxLEpvDS9bct9blEw AvlNode_IaqjtwKhxLEpvDS9bct9blEw;
typedef struct HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg;
typedef struct TY_ujsjpB2O9cjj3uDHsXbnSzg TY_ujsjpB2O9cjj3uDHsXbnSzg;
typedef struct GcStat_0RwLoVBHZPfUAcLczmfQAg GcStat_0RwLoVBHZPfUAcLczmfQAg;
typedef struct CellSet_jG87P0AI9aZtss9ccTYBIISQ CellSet_jG87P0AI9aZtss9ccTYBIISQ;
typedef struct PageDesc_fublkgIY4LG3mT51LU2WHg PageDesc_fublkgIY4LG3mT51LU2WHg;
typedef struct BaseChunk_Sdq7WpT6qAH858F5ZEdG3w BaseChunk_Sdq7WpT6qAH858F5ZEdG3w;
typedef struct FreeCell_u6M5LHprqzkn9axr04yg9bGQ FreeCell_u6M5LHprqzkn9axr04yg9bGQ;
typedef struct TGenericSeq TGenericSeq;
typedef struct NimStringDesc NimStringDesc;
typedef struct TSafePoint TSafePoint;
typedef struct TNimObject TNimObject;
typedef struct TY_9cz21a9cnbG9b9c6T0dmg63LEw TY_9cz21a9cnbG9b9c6T0dmg63LEw;
typedef struct SystemError_Fjf9b9b2IlzRO2tspHxG3tgg SystemError_Fjf9b9b2IlzRO2tspHxG3tgg;
typedef struct OutOfMemError_NrupLB36t9bV7iFDHtrF69aw OutOfMemError_NrupLB36t9bV7iFDHtrF69aw;
typedef struct IOError_9czoZw3pzPyrBmb5zTHY1OQ IOError_9czoZw3pzPyrBmb5zTHY1OQ;
typedef struct ReraiseError_GRbrBa7JIulgD34jGcFb8w ReraiseError_GRbrBa7JIulgD34jGcFb8w;
typedef struct OverflowError_I3Jtn27626sFBOls6BBQ2Q OverflowError_I3Jtn27626sFBOls6BBQ2Q;
typedef struct ArithmeticError_QcJsjWXxMFpjHfkCIK5ExA ArithmeticError_QcJsjWXxMFpjHfkCIK5ExA;
typedef struct ReprClosure_QK7SSKN8dPEpZedUTVKSLw ReprClosure_QK7SSKN8dPEpZedUTVKSLw;
typedef struct AssertionError_8FC9arcap3s5ZtfMs75krtA AssertionError_8FC9arcap3s5ZtfMs75krtA;
typedef struct ValueError_Gi06FkNeykJn7mrqRZYrkA ValueError_Gi06FkNeykJn7mrqRZYrkA;
typedef struct NilAccessError_le1LLqP8alYTev1dbGWJlg NilAccessError_le1LLqP8alYTev1dbGWJlg;
typedef struct OSError_3XwRQvmzCEOC4QnT706q1g OSError_3XwRQvmzCEOC4QnT706q1g;
typedef struct KeyError_ifYAhUumNzWR9c9cN9amyJLtg KeyError_ifYAhUumNzWR9c9cN9amyJLtg;
typedef struct TY_xyYfiXqv9bXR7uHakYC9cy3A TY_xyYfiXqv9bXR7uHakYC9cy3A;
typedef struct RopeObj_pk4sC5H3E9ceov4bEasyPVw RopeObj_pk4sC5H3E9ceov4bEasyPVw;
typedef N_NIMCALL_PTR(NIM_BOOL, TY_hgOQFBQi19biNdOUUkFOOxA) (Exception* e);
typedef N_NIMCALL_PTR(void, TY_T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
typedef NU8 TNimKind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ_Set;
typedef N_NIMCALL_PTR(void, TY_ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct  TNimType  {
NI size;
TNimKind_jIBKr1ejBgsfM33Kxw4j7A kind;
TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ_Set flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY_ojoeKfW4VYIm36I9cpDTQIg marker;
TY_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
struct  GcStack_7fytPA5bBsob6See21YMRA  {
void* bottom;
};
struct  CellSeq_Axo1XVm9aaQueTOldv8le5w  {
NI len;
NI cap;
Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
};
typedef SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* TY_SiRwrEKZdLgxqz9a9aoVBglg[512];
typedef Trunk_W0r8S0Y3UGke6T9bIUWnnuw* TY_lh2A89ahMmYg9bCmpVaplLbA[256];
struct  IntSet_EZObFrE3NC9bIb3YMkY9crZA  {
TY_lh2A89ahMmYg9bCmpVaplLbA data;
};
typedef AvlNode_IaqjtwKhxLEpvDS9bct9blEw* TY_0aOLqZchNi8nWtMTi8ND8w[2];
struct  AvlNode_IaqjtwKhxLEpvDS9bct9blEw  {
TY_0aOLqZchNi8nWtMTi8ND8w link;
NI key;
NI upperBound;
NI level;
};
struct TY_ujsjpB2O9cjj3uDHsXbnSzg {
BigChunk_Rv9c70Uhp2TytkX7eH78qEg* Field0;
NI Field1;
};
typedef TY_ujsjpB2O9cjj3uDHsXbnSzg TY_LzOv2eCDGiceMKQstCLmhw[30];
struct  HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg  {
NI len;
TY_LzOv2eCDGiceMKQstCLmhw chunks;
HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg* next;
};
struct  MemRegion_x81NhDv59b8ercDZ9bi85jyg  {
NI minLargeObj;
NI maxLargeObj;
TY_SiRwrEKZdLgxqz9a9aoVBglg freeSmallChunks;
LLChunk_XsENErzHIZV9bhvyJx56wGw* llmem;
NI currMem;
NI maxMem;
NI freeMem;
NI lastSize;
BigChunk_Rv9c70Uhp2TytkX7eH78qEg* freeChunksList;
IntSet_EZObFrE3NC9bIb3YMkY9crZA chunkStarts;
AvlNode_IaqjtwKhxLEpvDS9bct9blEw* root;
AvlNode_IaqjtwKhxLEpvDS9bct9blEw* deleted;
AvlNode_IaqjtwKhxLEpvDS9bct9blEw* last;
AvlNode_IaqjtwKhxLEpvDS9bct9blEw* freeAvlNodes;
NIM_BOOL locked;
NIM_BOOL blockChunkSizeIncrease;
NI nextChunkSize;
AvlNode_IaqjtwKhxLEpvDS9bct9blEw bottomData;
HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg heapLinks;
};
struct  GcStat_0RwLoVBHZPfUAcLczmfQAg  {
NI stackScans;
NI cycleCollections;
NI maxThreshold;
NI maxStackSize;
NI maxStackCells;
NI cycleTableSize;
NI64 maxPause;
};
struct  CellSet_jG87P0AI9aZtss9ccTYBIISQ  {
NI counter;
NI max;
PageDesc_fublkgIY4LG3mT51LU2WHg* head;
PageDesc_fublkgIY4LG3mT51LU2WHg** data;
};
struct  GcHeap_1TRH1TZMaVZTnLNcIHuNFQ  {
GcStack_7fytPA5bBsob6See21YMRA stack;
NI cycleThreshold;
CellSeq_Axo1XVm9aaQueTOldv8le5w zct;
CellSeq_Axo1XVm9aaQueTOldv8le5w decStack;
CellSeq_Axo1XVm9aaQueTOldv8le5w tempStack;
NI recGcLock;
MemRegion_x81NhDv59b8ercDZ9bi85jyg region;
GcStat_0RwLoVBHZPfUAcLczmfQAg stat;
CellSet_jG87P0AI9aZtss9ccTYBIISQ marked;
CellSeq_Axo1XVm9aaQueTOldv8le5w additionalRoots;
};
struct  BaseChunk_Sdq7WpT6qAH858F5ZEdG3w  {
NI prevSize;
NI size;
};
struct  SmallChunk_tXn60W2f8h3jgAYdEmy5NQ  {
  BaseChunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* next;
SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* prev;
FreeCell_u6M5LHprqzkn9axr04yg9bGQ* freeList;
NI free;
NI acc;
NI align;
NF data;
};
struct  BigChunk_Rv9c70Uhp2TytkX7eH78qEg  {
  BaseChunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
BigChunk_Rv9c70Uhp2TytkX7eH78qEg* next;
BigChunk_Rv9c70Uhp2TytkX7eH78qEg* prev;
NF data;
};
typedef NI TY_9agrCtWKhCnWWMJpKKugJag[16];
struct  Trunk_W0r8S0Y3UGke6T9bIUWnnuw  {
Trunk_W0r8S0Y3UGke6T9bIUWnnuw* next;
NI key;
TY_9agrCtWKhCnWWMJpKKugJag bits;
};
struct  LLChunk_XsENErzHIZV9bhvyJx56wGw  {
NI size;
NI acc;
LLChunk_XsENErzHIZV9bhvyJx56wGw* next;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  FreeCell_u6M5LHprqzkn9axr04yg9bGQ  {
FreeCell_u6M5LHprqzkn9axr04yg9bGQ* next;
NI zeroField;
};
typedef N_NIMCALL_PTR(void, TY_W6IXMh2CA4X1rFYGjUb4yg) (NimStringDesc* msg);
struct  TNimObject  {
TNimType* m_type;
};
struct  Exception  {
  TNimObject Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
NimStringDesc* trace;
};
typedef NU8 WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ;
struct  Cell_1zcF9cV8XIAtbN8h5HRUB8g  {
NI refcount;
TNimType* typ;
};
struct  PageDesc_fublkgIY4LG3mT51LU2WHg  {
PageDesc_fublkgIY4LG3mT51LU2WHg* next;
NI key;
TY_9agrCtWKhCnWWMJpKKugJag bits;
};
typedef NU8 TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ;
typedef NU8 TNimNodeKind_unfNsxrcATrufDZmpBq4HQ;
struct  TNimNode  {
TNimNodeKind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TY_9cz21a9cnbG9b9c6T0dmg63LEw {
TFrame* Field0;
TSafePoint* Field1;
Exception* Field2;
};
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClP_0) (Exception* e, void* ClE_0);
void* ClE_0;
} TY_KeeAOYBd84Ofsw6Y7LizaQ;
struct  TSafePoint  {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
TY_KeeAOYBd84Ofsw6Y7LizaQ raiseAction;
};
typedef TFrame* TY_pFdcUVk36Xt0LD9bLg3YaIQ[128];
typedef N_CLOSURE_PTR(NIM_BOOL, TM_Q5wkpxktOdTGvlSRo9bzt9aw_6) (Exception* e);
struct  SystemError_Fjf9b9b2IlzRO2tspHxG3tgg  {
  Exception Sup;
};
struct  OutOfMemError_NrupLB36t9bV7iFDHtrF69aw  {
  SystemError_Fjf9b9b2IlzRO2tspHxG3tgg Sup;
};
typedef N_NIMCALL_PTR(void, Finalizer) (void* self);
struct  IOError_9czoZw3pzPyrBmb5zTHY1OQ  {
  SystemError_Fjf9b9b2IlzRO2tspHxG3tgg Sup;
};
typedef NIM_CHAR TY_gpc2RrLEcWgv7ONpLYNHOw[2001];
struct  ReraiseError_GRbrBa7JIulgD34jGcFb8w  {
  Exception Sup;
};
typedef N_NOCONV_PTR(void, TY_lfH2drpqP9aSEAAjWgrYv8Q) (int a);
typedef TY_T4eqaYlFJYZUv9aG9b1TV0bQ TY_r9aAb9cuhoh9cb9a123KVuMchQ[7001];
struct  ArithmeticError_QcJsjWXxMFpjHfkCIK5ExA  {
  Exception Sup;
};
struct  OverflowError_I3Jtn27626sFBOls6BBQ2Q  {
  ArithmeticError_QcJsjWXxMFpjHfkCIK5ExA Sup;
};
typedef NU8 GC_Strategy_dZWpEuKPYMLPbE41rs2EqQ;
struct  ReprClosure_QK7SSKN8dPEpZedUTVKSLw  {
CellSet_jG87P0AI9aZtss9ccTYBIISQ marked;
NI recdepth;
NI indent;
};
typedef NIM_CHAR TY_JpYObICIkqkM7eHG4jy19aw[60];
typedef NIM_CHAR TY_eVNFTutn6un5gcq48fQLdg[65];
typedef NF TY_yp9a149boki9cCCWgfXI0Ip4A[23];
typedef NIM_CHAR TY_PGLh8drTnaWr3s1qUUSq2Q[500];
struct  AssertionError_8FC9arcap3s5ZtfMs75krtA  {
  Exception Sup;
};
struct  ValueError_Gi06FkNeykJn7mrqRZYrkA  {
  Exception Sup;
};
struct  NilAccessError_le1LLqP8alYTev1dbGWJlg  {
  SystemError_Fjf9b9b2IlzRO2tspHxG3tgg Sup;
};
struct  OSError_3XwRQvmzCEOC4QnT706q1g  {
  SystemError_Fjf9b9b2IlzRO2tspHxG3tgg Sup;
NI32 errorCode;
};
typedef NU8 FileMode_fVUBHvW79bXUw1j55Oo9avSQ;
typedef NimStringDesc* TY_7JTpIvL6tqeRI2Pp9asvFCA[5];
typedef NU8 FileSeekPos_I9aQjuvWxs8BspGbxwsngWw;
struct  KeyError_ifYAhUumNzWR9c9cN9amyJLtg  {
  ValueError_Gi06FkNeykJn7mrqRZYrkA Sup;
};
typedef NU8 TY_S8ib5N31oJbAkqOZTlNg5Q[8192];
struct  RopeObj_pk4sC5H3E9ceov4bEasyPVw  {
RopeObj_pk4sC5H3E9ceov4bEasyPVw* left;
RopeObj_pk4sC5H3E9ceov4bEasyPVw* right;
NI length;
NimStringDesc* data;
};
struct TY_xyYfiXqv9bXR7uHakYC9cy3A {
  TGenericSeq Sup;
  RopeObj_pk4sC5H3E9ceov4bEasyPVw* data[SEQ_DECL_SIZE];
};
static N_INLINE(void, initAllocator_IZ2oOmqdsYQ7vixQGKSDcAsystem)(void);
N_NIMCALL(void, initGC_njssp69aa7hvxte9bJ8uuDcg)(void);
N_NIMCALL(void, init_E1QNZGuo0DGFXyt4Y3MfqA)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, NI cap);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_alloc0)(NI size);
N_NIMCALL(void*, alloc0_WDxgSWQ1mSIerfvC0kmUtg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, NI size);
N_NIMCALL(void*, alloc_WDxgSWQ1mSIerfvC0kmUtg_2)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, NI size);
N_NIMCALL(void*, rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI requestedSize);
static N_INLINE(NI, roundup_HS4HdHHFZPftyB49cpIyo7Asystem)(NI x, NI v);
N_NIMCALL(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*, getSmallChunk_h6cvXbfQjxIdThM5GthosA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a);
N_NIMCALL(BigChunk_Rv9c70Uhp2TytkX7eH78qEg*, getBigChunk_z9bCNjXTYllZ3pI24nEsw2g)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size);
static N_INLINE(void, listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem)(BigChunk_Rv9c70Uhp2TytkX7eH78qEg** head, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c);
N_NIMCALL(void, splitChunk_8QXhiy717OAl8WNA2X27EA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c, NI size);
static N_INLINE(void, updatePrevSize_3G5wKZdFZhblebPYdFnpxQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c, NI prevSize);
static N_INLINE(NIM_BOOL, isAccessible_5nqar3kL9acJcissrFLDdkwsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p);
N_NIMCALL(NIM_BOOL, contains_tGsWrN4DY41H9btt3FhjrNA)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key);
N_NIMCALL(Trunk_W0r8S0Y3UGke6T9bIUWnnuw*, intSetGet_FhOZKj4Gih3qQ5OimZYOrg)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* t, NI key);
static N_INLINE(NI, pageIndex_bDTXHqSShXKux9bZH4tvkVgsystem)(void* p);
N_NIMCALL(void, incl_Iz1GYiOVKwItgr5CdCm0dQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key);
N_NIMCALL(Trunk_W0r8S0Y3UGke6T9bIUWnnuw*, intSetPut_KWgRM9bUk6rwhAaHSiuK9aYA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, IntSet_EZObFrE3NC9bIb3YMkY9crZA* t, NI key);
N_NIMCALL(void*, llAlloc_fTkVQ4Gj2glm9btLqR9bdQDQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size);
static N_INLINE(void*, osAllocPages_fxkHg9ajpjxOfBTuIyrgEfwsystem)(NI size);
N_NOINLINE(void, raiseOutOfMem_II46IjNZztN9bmbxUD8dt8g)(void);
static N_INLINE(void, incCurrMem_rxjvSU4wRoPOjezLtDzm3Qsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI bytes);
static N_INLINE(void, zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem)(void* p, NI size);
static N_INLINE(NI, pageIndex_vFgXFo13iF61HsEG6epuwgsystem)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c);
static N_INLINE(void, listAdd_ZRIe9cFnHOrfvS8VmLduoXQ_2system)(BigChunk_Rv9c70Uhp2TytkX7eH78qEg** head, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c);
N_NIMCALL(BigChunk_Rv9c70Uhp2TytkX7eH78qEg*, requestOsChunks_z9bCNjXTYllZ3pI24nEsw2g_2)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size);
static N_INLINE(void*, osTryAllocPages_fxkHg9ajpjxOfBTuIyrgEfw_2system)(NI size);
N_NIMCALL(void, addHeapLink_fJbggoVEhxEYh2HdNULF3Q)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* p, NI size);
static N_INLINE(void, listAdd_DqXPtLsRUwQp3iwLtHEdIgsystem)(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ** head, SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c);
static N_INLINE(void, listRemove_DqXPtLsRUwQp3iwLtHEdIg_2system)(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ** head, SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c);
N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, getBottom_QXg9anCfFuhk3avAkOOKNhQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a);
N_NIMCALL(void, add_Xuf47u3imOz8BOk5HURLWQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t, NI key, NI upperBound);
N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, allocAvlNode_neSuioWH6NDTp8E9cNgBmjg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI key, NI upperBound);
N_NIMCALL(void, skew_Cfx7NvEVZIhBjBm7i89boSg)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t);
N_NIMCALL(void, split_Cfx7NvEVZIhBjBm7i89boSg_2)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t);
N_NIMCALL(void, init_WHgd5C59bkXWDz3vnAxfzXQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s);
N_LIB_EXPORT N_CDECL(void, nimrtl_nimGCvisit)(void* d, NI op);
N_NIMCALL(void, doOperation_3F8QeaTyYrJJF2gjBr6b8A)(void* p, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op);
static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr);
static N_INLINE(void, decRef_MV4BBk6J1qu70IbBxwEn4wsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_EXPORT N_CDECL(void, nimrtl_rtlAddZCT)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_NOINLINE(void, addZCT_fCDI7oO1NNVXXURtxSzsRw)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
static N_INLINE(void, add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_alloc)(NI size);
static N_INLINE(void, copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem)(void* dest, void* source, NI size);
N_LIB_EXPORT N_NOCONV(void, nimrtl_dealloc)(void* p);
N_NIMCALL(void, dealloc_jqYVOi4APb9cRx3G9a57AkRw)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, void* p);
N_NIMCALL(void, rawDealloc_DA62HrGC5sdfCED505KyyQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p);
static N_INLINE(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*, pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem)(void* p);
static N_INLINE(NIM_BOOL, isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c);
N_NIMCALL(void, freeBigChunk_CAqFS1jFL1RxG80t9bOGmAA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c);
static N_INLINE(NIM_BOOL, chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c);
N_NIMCALL(void, excl_Z9cZKmN1jjRFCzU0lgW9a1XA)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key);
N_NIMCALL(void, del_C66us4UEWCXp84lHW4tDLA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t, NI x);
static N_INLINE(void, deallocAvlNode_E5Kui5a9artJoR6jEn007Vgsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n);
N_NIMCALL(void, markS_NZr5o3Ubzrci4OmK29cHBJA)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_NOINLINE(void, incl_m4q9b16kJJcoKe9c4ERtlpCg)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell);
N_NIMCALL(PageDesc_fublkgIY4LG3mT51LU2WHg*, cellSetPut_mFUFZ7eVLRT9bMaHzrsxFrQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* t, NI key);
static N_INLINE(NI, nextTry_GRX2KbRyW3mlDDFEU50uhwsystem)(NI h, NI maxHash);
N_NIMCALL(void, cellSetEnlarge_ZCqaZEiX9aUtDCRoknrJ9bpQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* t);
N_NIMCALL(void, cellSetRawInsert_IccmFuD44fG6qfTRJKp9aSQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ t, PageDesc_fublkgIY4LG3mT51LU2WHg** data, PageDesc_fublkgIY4LG3mT51LU2WHg* desc);
N_NIMCALL(void, forAllChildren_yHFnLgI7q81iFxRlb3Iqlw)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op);
static N_INLINE(void*, cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell);
N_NIMCALL(void, forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA)(void* dest, TNimType* mt, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op);
N_NIMCALL(void, forAllSlotsAux_g4QpsZWzXQMKa0ugIze5Kw)(void* dest, TNimNode* n, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op);
N_NIMCALL(TNimNode*, selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ)(void* aa, TNimNode* n);
N_NIMCALL(NI, getDiscriminant_wq1GP7ZPZ7P1uZUypfc9ciA)(void* aa, TNimNode* n);
N_NIMCALL(NIM_BOOL, containsOrIncl_CbGEjIBKJIi7knlaDzUluA)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell);
N_NIMCALL(PageDesc_fublkgIY4LG3mT51LU2WHg*, cellSetGet_X4WTfs0wkld8wp8XcE9b8BA)(CellSet_jG87P0AI9aZtss9ccTYBIISQ t, NI key);
static N_NIMCALL(void, Marker_TY_oUKtBcKRdK6usj8RWrlp6A)(void* p, NI op);
static N_NIMCALL(void, TM_Q5wkpxktOdTGvlSRo9bzt9aw_4)(void);
N_NIMCALL(void, nimRegisterGlobalMarker)(TY_T4eqaYlFJYZUv9aG9b1TV0bQ markerProc);
N_LIB_EXPORT N_CDECL(void, nimrtl_getFrameState)(TY_9cz21a9cnbG9b9c6T0dmg63LEw* Result);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NOINLINE(NIM_BOOL, isOnStack_dJJW59cIgsBmT59aZrOM71Mg)(void* p);
N_NIMCALL(GcStack_7fytPA5bBsob6See21YMRA*, getActiveStack_2XtoPjgvlHPkHLitAW2flw)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
static N_INLINE(void, incRef_9cAA5YuQAAC3MVbnGeV86swsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_EXPORT N_CDECL(void, nimrtl_setFrameState)(TY_9cz21a9cnbG9b9c6T0dmg63LEw state);
static N_INLINE(void, asgnRef)(void** dest, void* src);
N_LIB_EXPORT N_CDECL(TFrame*, nimrtl_getFrame)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_popFrame)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_setFrame)(TFrame* s);
N_LIB_EXPORT N_CDECL(void, nimrtl_pushSafePoint)(TSafePoint* s);
N_LIB_EXPORT N_CDECL(void, nimrtl_popSafePoint)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_pushCurrentException)(Exception* e);
N_LIB_EXPORT N_CDECL(void, nimrtl_popCurrentException)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_raiseException)(Exception* e, NCSTRING ename);
N_NIMCALL(void, raiseExceptionAux_jP8mO9c3YubVoLarNIvGorQ)(Exception* e);
static N_INLINE(NIM_BOOL, isObjWithCache)(TNimType* obj, TNimType* subclass, TNimType** cache);
N_NOINLINE(NIM_BOOL, isObjSlowPath_k9bdq9bQE075AR7scLFt5wIg)(TNimType* obj, TNimType* subclass, TNimType** cache);
N_NIMCALL(void, showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ)(NCSTRING data);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_cstrToNimstr)(NCSTRING str);
N_NIMCALL(NimStringDesc*, toNimStr)(NCSTRING str, NI len);
N_NIMCALL(NimStringDesc*, rawNewStringNoInit)(NI space);
N_LIB_EXPORT N_CDECL(void*, nimrtl_newObjNoInit)(TNimType* typ, NI size);
N_NIMCALL(void*, rawNewObj_QBPo5VW2O56Eeh8hPbQ7Pg)(TNimType* typ, NI size, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, collectCT_zoTIuavlrCHyw3B8MBaLJA)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NOINLINE(NI, stackSize_IV9bgfYkinlae0WZ2NZi5JA)(void);
N_NOINLINE(NI, stackSize_61foY5fGmU9c2fC9c6wRIsrA)(GcStack_7fytPA5bBsob6See21YMRA* stack);
static N_INLINE(NI, getOccupiedMem_61WxanWSOmDDV2uI7O10dQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a);
N_NIMCALL(void, collectCTBody_zoTIuavlrCHyw3B8MBaLJA_2)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
static N_INLINE(void, prepareForInteriorPointerChecking_Zqr3EQAAcehIfp3uSECEuQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a);
N_NIMCALL(NI, lowGauge_3mwQtFaBTgevFrybZdgUNw)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n);
N_NIMCALL(NI, highGauge_3mwQtFaBTgevFrybZdgUNw_2)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n);
CLANG_NO_SANITIZE_ADDRESS void markStackAndRegisters_LdwvBL9bC9c0lik7K9bau9bX0Q(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, setPosition_kuKlONPws1O0vpPB9adzcQw)(GcStack_7fytPA5bBsob6See21YMRA* stack, void* position);
static N_INLINE(void, gcMark_JLiT51Zk6OLnaexGSTHHEQsystem)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, void* p);
N_NIMCALL(void*, interiorAllocatedPtr_N7XNyRgfMLnCjS9bVeVc3bA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p);
N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, inRange_Bc4Ua6HOMCIDGx9b15HSY4g)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* root, NI key);
N_NIMCALL(NIM_BOOL, collectZCT_evVbQ9bNF7LYMhoG9aWXu9bKw)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, prepareDealloc_0Ao1u9cpV0dTuUB5G9cEQ8eQ)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell);
N_NIMCALL(void, collectCycles_zoTIuavlrCHyw3B8MBaLJA_3)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, cellsetReset_WHgd5C59bkXWDz3vnAxfzXQ_2)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s);
N_NIMCALL(void, deinit_WHgd5C59bkXWDz3vnAxfzXQ_3)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s);
N_NIMCALL(void, markGlobals_zoTIuavlrCHyw3B8MBaLJA_4)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, sweep_zoTIuavlrCHyw3B8MBaLJA_5)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
static N_INLINE(NIM_BOOL, isCell_CkuKXXC4hAqaVj8vwjANDAsystem)(void* p);
N_NIMCALL(NIM_BOOL, contains_9c4TZ2Zl3sU4TUeK9bR8E9ciw)(CellSet_jG87P0AI9aZtss9ccTYBIISQ s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell);
N_NIMCALL(void, freeCyclicCell_NZr5o3Ubzrci4OmK29cHBJA_2)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_EXPORT N_CDECL(NI, nimrtl_getOccupiedMem)(void);
N_LIB_EXPORT N_CDECL(NI, nimrtl_getTotalMem)(void);
N_LIB_EXPORT N_CDECL(NI, nimrtl_getFreeMem)(void);
N_NIMCALL(void, unmarkStackAndRegisters_zoTIuavlrCHyw3B8MBaLJA_6)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
static N_INLINE(void, addNewObjToZCT_Ga5iPZj9bPFJIiW7GQdxs7gsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* res, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_NIMCALL(void, writeToStdErr_7HRVfGfZT2rSmBdcLxl8TA)(NCSTRING msg);
N_NIMCALL(void, write_ADGLlEJAOtGNWWur8rrJfg)(FILE* f, NCSTRING c);
N_NIMCALL(void, checkErr_BWnr8V7RERYno9bIdPmw8Hw)(FILE* f);
N_NOINLINE(void, raiseEIO_PpfSiTIeNpMAb9a5o6SglJw)(NimStringDesc* msg) __attribute__((noreturn));
static N_INLINE(void, sysFatal_orK8PicRB9bj8BG69bF8HQbwsystem)(NimStringDesc* message) __attribute__((noreturn));
static N_NIMCALL(void, Marker_TY_HX2M9cQhE3jaovp9aYJDdslA)(void* p, NI op);
N_LIB_EXPORT N_CDECL(void*, nimrtl_newObj)(TNimType* typ, NI size);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_copyStringRC1)(NimStringDesc* src);
N_LIB_EXPORT N_CDECL(void*, nimrtl_newObjRC1)(TNimType* typ, NI size);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
static N_INLINE(void, quitOrDebug_IZ2oOmqdsYQ7vixQGKSDcA_2system)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_reraiseException)(void);
static N_INLINE(void, sysFatal_gu8AGlf3JTsS25q0fXJFMAsystem)(NimStringDesc* message) __attribute__((noreturn));
static N_NIMCALL(void, Marker_TY_beOxjNaux3PfvyYBLMJh2A)(void* p, NI op);
N_LIB_EXPORT N_CDECL(void, nimFrame)(TFrame* s);
N_NOINLINE(void, stackOverflow_II46IjNZztN9bmbxUD8dt8g_2)(void);
N_NIMCALL(void, writeStackTrace_njssp69aa7hvxte9bJ8uuDcg_2)(void);
N_NOCONV(void, signalHandler)(int sign);
N_NIMCALL(void, registerSignalHandler_njssp69aa7hvxte9bJ8uuDcg_3)(void);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_realloc)(void* p, NI newSize);
N_NIMCALL(void*, realloc_O21OiSxurjvup9cA55o9ae1A)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, void* p, NI newsize);
N_NIMCALL(NI, ptrSize_FVy3yH9cNo61BYTEPuP9awLA)(void* p);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_allocShared)(NI size);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_allocShared0)(NI size);
N_LIB_EXPORT N_NOCONV(void, nimrtl_deallocShared)(void* p);
N_LIB_EXPORT N_NOCONV(void*, nimrtl_reallocShared)(void* p, NI newSize);
N_NIMCALL(NI, getRefcount)(void* p);
N_LIB_EXPORT N_CDECL(void, nimrtl_rtlAddCycleRoot)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_EXPORT N_NOINLINE(void, nimrtl_setStackBottom)(void* theStackBottom);
N_NIMCALL(void, setPosition_plJQLEbXvFqZv6Phpo1t1w)(GcStack_7fytPA5bBsob6See21YMRA* stack, void* position);
N_LIB_EXPORT N_CDECL(void*, nimrtl_newSeq)(TNimType* typ, NI len);
static N_INLINE(NI, addInt)(NI a, NI b);
N_NOINLINE(void, raiseOverflow)(void);
static N_INLINE(void, sysFatal_cjY6dGD4PiJNY9cmtw6Ay8Qsystem)(NimStringDesc* message) __attribute__((noreturn));
static N_NIMCALL(void, Marker_TY_6woiEp3hwhYMr1p5tjkZvA)(void* p, NI op);
N_NIMCALL(NI, mulInt)(NI a, NI b);
N_LIB_EXPORT N_CDECL(void*, nimrtl_newSeqRC1)(TNimType* typ, NI len);
N_LIB_EXPORT N_CDECL(void*, nimrtl_growObj)(void* old, NI newsize);
N_NIMCALL(void*, growObj_FZeyQYjWPcE9c06y1gNqZxw)(void* old, NI newsize, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_disable)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_enable)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_setStrategy)(GC_Strategy_dZWpEuKPYMLPbE41rs2EqQ strategy);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_enableMarkAndSweep)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_disableMarkAndSweep)(void);
N_LIB_EXPORT N_CDECL(void, nimrtl_GC_fullCollect)(void);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_GC_getStatistics)(void);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimIntToStr)(NI x);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(NimStringDesc*, rawNewString)(NI cap);
N_NIMCALL(void, add_IbYQ9cTcoQ89aIwM2IEYGMng)(NimStringDesc** result, NI64 x);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_setLengthStr)(NimStringDesc* s, NI newLen);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_resizeString)(NimStringDesc* dest, NI addlen);
static N_INLINE(NI, resize_bzF9a0JivP3Z4njqaxuLc5wsystem)(NI old);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimInt64ToStr)(NI64 x);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_copyString)(NimStringDesc* src);
N_LIB_EXPORT N_CDECL(TGenericSeq*, nimrtl_setLengthSeq)(TGenericSeq* seq, NI elemSize, NI newLen);
N_NIMCALL(TNimType*, extGetCellType)(void* c);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimBoolToStr)(NIM_BOOL x);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimCharToStr)(NIM_CHAR x);
N_NIMCALL(NimStringDesc*, mnewString)(NI len);
N_NIMCALL(NimStringDesc*, mnewString)(NI len);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprAny)(void* p, TNimType* typ);
N_NIMCALL(void, initReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA)(ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(void, reprAux_e9bayrEsuZxZS2R51iDjmHQ)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(void, reprSetAux_hUJOLGug9apUf00OJCE66qg)(NimStringDesc** result, void* p, TNimType* typ);
N_NIMCALL(void, addSetElem_Kn6x9bywsw6UYG9beY19cFc8Q)(NimStringDesc** result, NI elem, TNimType* typ);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprEnum)(NI e, TNimType* typ);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprBool)(NIM_BOOL x);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprChar)(NIM_CHAR x);
N_NIMCALL(NimStringDesc*, reprInt)(NI64 x);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(void, reprArray_e9bayrEsuZxZS2R51iDjmHQ_2)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(void, reprRecord_e9bayrEsuZxZS2R51iDjmHQ_3)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(void, reprRecordAux_DwhuG4GTpS9cHlrxP9c9cKltQ)(NimStringDesc** result, void* p, TNimNode* n, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(void, reprRef_e9bayrEsuZxZS2R51iDjmHQ_4)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(NimStringDesc*, reprPointer)(void* x);
N_NIMCALL(void, reprSequence_e9bayrEsuZxZS2R51iDjmHQ_5)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_NIMCALL(NimStringDesc*, dollar__rzAI8EMyNBAQwGODeohhAA)(NU64 x);
N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f);
N_NIMCALL(void, add_A9bDQDKw5SEqD3OvtOnC1bg)(NimStringDesc** result, NF x);
N_NIMCALL(void, add_XyS0BXa1E5ylXzhvUQlY9cg)(NimStringDesc** x, NCSTRING y);
N_NIMCALL(NI, getInt_5g9bNpUms27Cioy22A8yrYg)(void* p, NI size);
N_NIMCALL(void, reprStrAux_LyaXzdaWBkFL0tnaaDmZmA)(NimStringDesc** result, NCSTRING s, NI len);
N_NIMCALL(void, deinitReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA_2)(ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprStr)(NimStringDesc* s);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprSet)(void* p, TNimType* typ);
N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprOpenArray)(void* p, NI length, TNimType* elemtyp);
N_LIB_EXPORT N_CDECL(Exception*, nimrtl_getCurrentException)(void);
N_NIMCALL(NimStringDesc*, copyStrLast)(NimStringDesc* s, NI start, NI last);
static N_INLINE(void, sysFatal_mWrNPcJugise9aqN0yGByGwsystem)(NimStringDesc* message) __attribute__((noreturn));
static N_NIMCALL(void, Marker_TY_TmgWlPUbRr7iGD2UE1cu6A)(void* p, NI op);
static N_NIMCALL(void, Marker_TY_yCEN9anxCD6mzBxGjuaRBdg)(void* p, NI op);
static N_INLINE(void, sysFatal_3R7YjovOXNtHgMU6dDCuBQsystem)(NimStringDesc* message) __attribute__((noreturn));
static N_NIMCALL(void, Marker_TY_iCd9aJMEo0ovVcW5hQQKhzg)(void* p, NI op);
static N_NIMCALL(void, Marker_TY_Qx9aKy4vZ9bVz9bnG9brQcRHGA)(void* p, NI op);
N_NIMCALL(int, getFileHandle_bZ9c2yojtXoDTUpfyl8h8Rg)(FILE* f);
N_NIMCALL(void, close_BWnr8V7RERYno9bIdPmw8Hw_2)(FILE* f);
N_NIMCALL(NI64, getFilePos_XePgC9ccBXCgb9bEHXZpnMqA_2)(FILE* f);
N_NIMCALL(void, setFilePos_YAngY19cHH2nZ9bqhMgAHz8Q)(FILE* f, NI64 pos, FileSeekPos_I9aQjuvWxs8BspGbxwsngWw relativeTo);
N_NIMCALL(void, genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw)(void* dest, TNimNode* n);
N_NIMCALL(void, genericReset)(void* dest, TNimType* mt);
static N_NIMCALL(void, Marker_TY_axqhRnwd09cVJkRcojfw6mA)(void* p, NI op);
N_NIMCALL(void, genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA)(void* dest, void* src, TNimType* mt, NIM_BOOL shallow);
N_NIMCALL(void, genericAssignAux_ulsQvfENf9buS9atYunbm7gA)(void* dest, void* src, TNimNode* n, NIM_BOOL shallow);
N_NIMCALL(NI, countBits32)(NI32 n);
N_NIMCALL(NIM_BOOL, open_sEp0GH2306oGo9bqBpj5oTQ)(FILE** f, NimStringDesc* filename, FileMode_fVUBHvW79bXUw1j55Oo9avSQ mode, NI bufSize);
N_NIMCALL(NimStringDesc*, readAll_y7iEIBoIrYlvsLCqA1SrwQ)(FILE* file);
N_NIMCALL(NI, rawFileSize_jO6UN73ASx5jqerEr5FqZg)(FILE* file);
N_NIMCALL(NimStringDesc*, readAllFile_nEoG9c9aoJvOPVkq2dsFRb5Q)(FILE* file, NI len);
N_NIMCALL(NI, readBuffer_nZ0pNe9cd9cXtoayexCiaDtA)(FILE* f, void* buffer, NI len);
N_NIMCALL(NIM_BOOL, endOfFile_OpxMRqWNQzmofyVQsNQqVA)(FILE* f);
N_NIMCALL(NimStringDesc*, readAllBuffer_QygGtYi2d8AILktDeUIkvQ)(FILE* file);
static N_INLINE(void, sysFatal_p4l3kdztdOPD3nsQRAEDqwsystem)(NimStringDesc* message, NimStringDesc* arg) __attribute__((noreturn));
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
N_NIMCALL(void, write_c4mGyJBvK73pdM22jiweKQ)(FILE* f, NimStringDesc* s);
N_NIMCALL(NI, writeBuffer_nZ0pNe9cd9cXtoayexCiaDtA_2)(FILE* f, void* buffer, NI len);
static N_NIMCALL(void, Marker_TY_xyYfiXqv9bXR7uHakYC9cy3A)(void* p, NI op);
NIM_BOOL nimvm_IAxmsqnME4Jmed24hOgrFQ;
NI nim_program_result;
TY_hgOQFBQi19biNdOUUkFOOxA globalRaiseHook_JbO1ti4ULxrw54m4zNPbpA;
TY_hgOQFBQi19biNdOUUkFOOxA localRaiseHook_EIvMhANBvB9cp2Ezvt29cADg;
TY_T4eqaYlFJYZUv9aG9b1TV0bQ outOfMemHook_kZNaA7u1MfSW5ZeoGvw8xg;
TNimType strDesc_D0UzA4zsDu5tgpJQ9a9clXPg;
TY_W6IXMh2CA4X1rFYGjUb4yg errorMessageWriter_ZXnv0JyrWe3HTd07wpSr7A;
TFrame* framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw;
TSafePoint* excHandler_rqLlY5bs9atDw2OXYqJEn5g;
Exception* currException_9bVPeDJlYTi9bQApZpfH8wjg;
TNimType NTI_13RNkKqUOX1TtorOUlKtqA_;
TNimType NTI_bAvOj2UcojKN87yAQLs0aw_;
TNimType NTI_S9agCYBinaYZnGWcjTdxclg_;
TNimType NTI_77mFvmsOLKik79ci2hXkHEg_;
TNimType NTI_oUKtBcKRdK6usj8RWrlp6A_;
TY_pFdcUVk36Xt0LD9bLg3YaIQ tempFrames_7nBYIr2UsDREpYylZK4fug;
TNimType NTI_Fjf9b9b2IlzRO2tspHxG3tgg_;
TNimType NTI_NrupLB36t9bV7iFDHtrF69aw_;
static TNimType* Nim_OfCheck_CACHE8[2];
TNimType NTI_9czoZw3pzPyrBmb5zTHY1OQ_;
TNimType NTI_HX2M9cQhE3jaovp9aYJDdslA_;
TNimType NTI_GRbrBa7JIulgD34jGcFb8w_;
TNimType NTI_beOxjNaux3PfvyYBLMJh2A_;
GcHeap_1TRH1TZMaVZTnLNcIHuNFQ gch_IcYaEuuWivYAS86vFMTS3Q;
NI globalMarkersLen_hgEFy3UCOBoalBh29asu5MA;
TY_r9aAb9cuhoh9cb9a123KVuMchQ globalMarkers_5ghwSgpo9cT9bT7YStQDJHVQ;
TNimType NTI_QcJsjWXxMFpjHfkCIK5ExA_;
TNimType NTI_I3Jtn27626sFBOls6BBQ2Q_;
TNimType NTI_6woiEp3hwhYMr1p5tjkZvA_;
TNimType NTI_8FC9arcap3s5ZtfMs75krtA_;
TNimType NTI_TmgWlPUbRr7iGD2UE1cu6A_;
TNimType NTI_Gi06FkNeykJn7mrqRZYrkA_;
TNimType NTI_yCEN9anxCD6mzBxGjuaRBdg_;
TNimType NTI_rR5Bzr1D5krxoo1NcNyeMA_;
TNimType NTI_Uk8TiHqxGdO37NabyvfS5g_;
TNimType NTI_LBgXxpmYOpS8xroRZgNvbg_;
TNimType NTI_Gz6vwaK0PZQIDIwfuvKsOg_;
TNimType NTI_DcZ5N67dL3rBj9bxGtx09bFg_;
TNimType NTI_g9buja9c9aeh0rkDpqsXOJF9bA_;
TNimType NTI_VaVACK0bpYmqIQ0mKcHfQQ_;
TNimType NTI_le1LLqP8alYTev1dbGWJlg_;
TNimType NTI_iCd9aJMEo0ovVcW5hQQKhzg_;
TNimType NTI_3XwRQvmzCEOC4QnT706q1g_;
TNimType NTI_sVg18TP9cLifHyygRe9cro9aA_;
TNimType NTI_Qx9aKy4vZ9bVz9bnG9brQcRHGA_;
TNimType NTI_ifYAhUumNzWR9c9cN9amyJLtg_;
TNimType NTI_axqhRnwd09cVJkRcojfw6mA_;
TNimType NTI_nmiMWKVIe46vacnhAFrQvw_;
TNimType NTI_a9bIsIkdQvQMv0xYGrfgSag_;
extern TNimType NTI_VYsfqmmqchsY5XzU9aJJBBA_;
TNimType NTI_xyYfiXqv9bXR7uHakYC9cy3A_;
TNimType NTI_UtShRB9b1wZO9cvpdowm9cefA_;
TNimType NTI_nlCscttRCss70IBTyuBqnA_;
TNimType NTI_9bz2muykEFR6eMHxLnfcjxA_;
TNimType NTI_7BHnQsEj49a9c6QtudqWTo1w_;
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_2, "out of memory", 13);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_5, "[GC] cannot register global variable; too many global variables", 63);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_8, "Unknown IO Error", 16);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_9, "no exception to reraise", 23);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_10, "over- or underflow", 18);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_11, "[GC] total memory: ", 19);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_12, "\012[GC] occupied memory: ", 23);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_13, "\012[GC] stack scans: ", 19);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_14, "\012[GC] stack cells: ", 19);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_15, "\012[GC] cycle collections: ", 25);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_16, "\012[GC] max threshold: ", 21);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_17, "\012[GC] zct capacity: ", 20);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_18, "\012[GC] max cycle table size: ", 28);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_19, "\012[GC] max pause time [ms]: ", 27);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_20, "\012", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_21, "[GC] max stack size: ", 21);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_22, "true", 4);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_23, "false", 5);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_24, "", 0);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_25, "...", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_26, "{", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_27, ", ", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_28, " (invalid data!)", 16);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_29, "\'", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_30, "\\\"", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_31, "\\\\", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_32, "\\", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_33, "}", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_34, "[", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_35, "]", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_36, " = ", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_37, ",\012", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_38, "nil", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_39, "ref ", 4);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_40, " --> ", 5);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_41, "0", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_42, "nan", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_43, "-inf", 4);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_44, "inf", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_45, "\"", 1);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_46, "\\10\"\012\"", 6);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_47, "(invalid data!)", 15);
NIM_CONST TY_yp9a149boki9cCCWgfXI0Ip4A powtens_l8b44pimyaWe7sztIOF1Tw = {1.0000000000000000e+00,
1.0000000000000000e+01,
1.0000000000000000e+02,
1.0000000000000000e+03,
1.0000000000000000e+04,
1.0000000000000000e+05,
1.0000000000000000e+06,
1.0000000000000000e+07,
1.0000000000000000e+08,
1.0000000000000000e+09,
1.0000000000000000e+10,
1.0000000000000000e+11,
1.0000000000000000e+12,
1.0000000000000000e+13,
1.0000000000000000e+14,
1.0000000000000000e+15,
1.0000000000000000e+16,
1.0000000000000000e+17,
1.0000000000000000e+18,
1.0000000000000000e+19,
1.0000000000000000e+20,
1.0000000000000000e+21,
1.0000000000000000e+22}
;
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_48, "attempt to write to a nil address", 33);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_49, "rb", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_50, "wb", 2);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_51, "w+b", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_52, "r+b", 3);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_53, "ab", 2);
NIM_CONST TY_7JTpIvL6tqeRI2Pp9asvFCA FormatOpen_129cS4U5eK4wWqE9bNeKN1Aw = {((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_49),
((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_50),
((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_51),
((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_52),
((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_53)}
;
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_54, "cannot retrieve file position", 29);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_55, "cannot set file position", 24);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_57, "cannot open: ", 13);
STRING_LITERAL(TM_Q5wkpxktOdTGvlSRo9bzt9aw_59, "cannot write string to file", 27);

static N_INLINE(void, initAllocator_IZ2oOmqdsYQ7vixQGKSDcAsystem)(void) {
}

static N_INLINE(NI, roundup_HS4HdHHFZPftyB49cpIyo7Asystem)(NI x, NI v) {
	NI result;
	result = (NI)0;
	result = (NI)((NI)(x + (NI)(v - ((NI) 1))) & (NI)((NU32) ~((NI)(v - ((NI) 1)))));
	return result;
}

static N_INLINE(void, listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem)(BigChunk_Rv9c70Uhp2TytkX7eH78qEg** head, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c) {
	{
		if (!(c == (*head))) goto LA3_;
		(*head) = (*c).next;
		{
			if (!!(((*head) == NIM_NIL))) goto LA7_;
			(*(*head)).prev = NIM_NIL;
		}
		LA7_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		(*(*c).prev).next = (*c).next;
		{
			if (!!(((*c).next == NIM_NIL))) goto LA12_;
			(*(*c).next).prev = (*c).prev;
		}
		LA12_: ;
	}
	LA1_: ;
	(*c).next = NIM_NIL;
	(*c).prev = NIM_NIL;
}

N_NIMCALL(Trunk_W0r8S0Y3UGke6T9bIUWnnuw*, intSetGet_FhOZKj4Gih3qQ5OimZYOrg)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* t, NI key) {
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* result;
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* it;
{	result = (Trunk_W0r8S0Y3UGke6T9bIUWnnuw*)0;
	it = (*t).data[((NI)(key & ((NI) 255)))- 0];
	{
		while (1) {
			if (!!((it == NIM_NIL))) goto LA2;
			{
				if (!((*it).key == key)) goto LA5_;
				result = it;
				goto BeforeRet_;
			}
			LA5_: ;
			it = (*it).next;
		} LA2: ;
	}
	result = NIM_NIL;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NIM_BOOL, contains_tGsWrN4DY41H9btt3FhjrNA)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key) {
	NIM_BOOL result;
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* t;
	result = (NIM_BOOL)0;
	t = intSetGet_FhOZKj4Gih3qQ5OimZYOrg(s, (NI)((NU32)(key) >> (NU32)(((NI) 9))));
	{
		NI u;
		if (!!((t == NIM_NIL))) goto LA3_;
		u = (NI)(key & ((NI) 511));
		result = !(((NI)((*t).bits[((NI)((NU32)(((NI) (u))) >> (NU32)(((NI) 5))))- 0] & (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(((NI) (u)) & ((NI) 31))))))) == ((NI) 0)));
	}
	goto LA1_;
	LA3_: ;
	{
		result = NIM_FALSE;
	}
	LA1_: ;
	return result;
}

static N_INLINE(NI, pageIndex_bDTXHqSShXKux9bZH4tvkVgsystem)(void* p) {
	NI result;
	result = (NI)0;
	result = (NI)((NU32)(((NI) (p))) >> (NU32)(((NI) 12)));
	return result;
}

static N_INLINE(NIM_BOOL, isAccessible_5nqar3kL9acJcissrFLDdkwsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p) {
	NIM_BOOL result;
	NI T1_;
	result = (NIM_BOOL)0;
	T1_ = (NI)0;
	T1_ = pageIndex_bDTXHqSShXKux9bZH4tvkVgsystem(p);
	result = contains_tGsWrN4DY41H9btt3FhjrNA((&(*a).chunkStarts), T1_);
	return result;
}

static N_INLINE(void, updatePrevSize_3G5wKZdFZhblebPYdFnpxQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c, NI prevSize) {
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* ri;
	ri = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) ((NI)((NU32)(((NI) (c))) + (NU32)((*c).Sup.size))));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = isAccessible_5nqar3kL9acJcissrFLDdkwsystem((&(*a)), ((void*) (ri)));
		if (!T3_) goto LA4_;
		(*ri).prevSize = (NI)(prevSize | ((NI) ((NI)((*ri).prevSize & ((NI) 1)))));
	}
	LA4_: ;
}

N_NOINLINE(void, raiseOutOfMem_II46IjNZztN9bmbxUD8dt8g)(void) {
	{
		if (!!((outOfMemHook_kZNaA7u1MfSW5ZeoGvw8xg == NIM_NIL))) goto LA3_;
		outOfMemHook_kZNaA7u1MfSW5ZeoGvw8xg();
	}
	LA3_: ;
	printf("%s\012", ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_2)? (((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_2))->data:"nil");
	fflush(stdout);
	exit(((NI) 1));
}

static N_INLINE(void*, osAllocPages_fxkHg9ajpjxOfBTuIyrgEfwsystem)(NI size) {
	void* result;
	result = (void*)0;
	result = mmap(NIM_NIL, size, ((int) 3), (NI32)(MAP_PRIVATE | MAP_ANONYMOUS), ((int) -1), ((NI) 0));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = (result == NIM_NIL);
		if (T3_) goto LA4_;
		T3_ = (result == ((void*) -1));
		LA4_: ;
		if (!T3_) goto LA5_;
		raiseOutOfMem_II46IjNZztN9bmbxUD8dt8g();
	}
	LA5_: ;
	return result;
}

static N_INLINE(void, incCurrMem_rxjvSU4wRoPOjezLtDzm3Qsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI bytes) {
	(*a).currMem += bytes;
}

static N_INLINE(void, zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem)(void* p, NI size) {
	void* T1_;
	T1_ = (void*)0;
	T1_ = memset(p, ((int) 0), ((size_t) (size)));
}

N_NIMCALL(void*, llAlloc_fTkVQ4Gj2glm9btLqR9bdQDQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size) {
	void* result;
	result = (void*)0;
	{
		NIM_BOOL T3_;
		LLChunk_XsENErzHIZV9bhvyJx56wGw* old;
		void* T7_;
		T3_ = (NIM_BOOL)0;
		T3_ = ((*a).llmem == NIM_NIL);
		if (T3_) goto LA4_;
		T3_ = ((*(*a).llmem).size < size);
		LA4_: ;
		if (!T3_) goto LA5_;
		old = (*a).llmem;
		T7_ = (void*)0;
		T7_ = osAllocPages_fxkHg9ajpjxOfBTuIyrgEfwsystem(((NI) 4096));
		(*a).llmem = ((LLChunk_XsENErzHIZV9bhvyJx56wGw*) (T7_));
		incCurrMem_rxjvSU4wRoPOjezLtDzm3Qsystem(a, ((NI) 4096));
		(*(*a).llmem).size = (NI)(((NI) 4096) - ((NI)sizeof(LLChunk_XsENErzHIZV9bhvyJx56wGw)));
		(*(*a).llmem).acc = ((NI)sizeof(LLChunk_XsENErzHIZV9bhvyJx56wGw));
		(*(*a).llmem).next = old;
	}
	LA5_: ;
	result = ((void*) ((NI)(((NI) ((*a).llmem)) + (*(*a).llmem).acc)));
	(*(*a).llmem).size -= size;
	(*(*a).llmem).acc += size;
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(result, ((NI) (size)));
	return result;
}

N_NIMCALL(Trunk_W0r8S0Y3UGke6T9bIUWnnuw*, intSetPut_KWgRM9bUk6rwhAaHSiuK9aYA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, IntSet_EZObFrE3NC9bIb3YMkY9crZA* t, NI key) {
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* result;
	result = (Trunk_W0r8S0Y3UGke6T9bIUWnnuw*)0;
	result = intSetGet_FhOZKj4Gih3qQ5OimZYOrg((&(*t)), key);
	{
		void* T5_;
		if (!(result == NIM_NIL)) goto LA3_;
		T5_ = (void*)0;
		T5_ = llAlloc_fTkVQ4Gj2glm9btLqR9bdQDQ(a, ((NI)sizeof(Trunk_W0r8S0Y3UGke6T9bIUWnnuw)));
		result = ((Trunk_W0r8S0Y3UGke6T9bIUWnnuw*) (T5_));
		(*result).next = (*t).data[((NI)(key & ((NI) 255)))- 0];
		(*t).data[((NI)(key & ((NI) 255)))- 0] = result;
		(*result).key = key;
	}
	LA3_: ;
	return result;
}

N_NIMCALL(void, incl_Iz1GYiOVKwItgr5CdCm0dQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key) {
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* t;
	NI u;
	t = intSetPut_KWgRM9bUk6rwhAaHSiuK9aYA(a, s, (NI)((NU32)(key) >> (NU32)(((NI) 9))));
	u = (NI)(key & ((NI) 511));
	(*t).bits[((NI)((NU32)(((NI) (u))) >> (NU32)(((NI) 5))))- 0] = (NI)((*t).bits[((NI)((NU32)(((NI) (u))) >> (NU32)(((NI) 5))))- 0] | (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(((NI) (u)) & ((NI) 31)))))));
}

static N_INLINE(NI, pageIndex_vFgXFo13iF61HsEG6epuwgsystem)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c) {
	NI result;
	result = (NI)0;
	result = (NI)((NU32)(((NI) (c))) >> (NU32)(((NI) 12)));
	return result;
}

static N_INLINE(void, listAdd_ZRIe9cFnHOrfvS8VmLduoXQ_2system)(BigChunk_Rv9c70Uhp2TytkX7eH78qEg** head, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c) {
	(*c).next = (*head);
	{
		if (!!(((*head) == NIM_NIL))) goto LA3_;
		(*(*head)).prev = c;
	}
	LA3_: ;
	(*head) = c;
}

N_NIMCALL(void, splitChunk_8QXhiy717OAl8WNA2X27EA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c, NI size) {
	BigChunk_Rv9c70Uhp2TytkX7eH78qEg* rest;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* T1_;
	NI T2_;
	rest = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) ((NI)((NU32)(((NI) (c))) + (NU32)(size))));
	(*rest).Sup.size = (NI)((*c).Sup.size - size);
	(*rest).next = NIM_NIL;
	(*rest).prev = NIM_NIL;
	(*rest).Sup.prevSize = size;
	updatePrevSize_3G5wKZdFZhblebPYdFnpxQsystem(a, c, (*rest).Sup.size);
	(*c).Sup.size = size;
	T1_ = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
	T1_ = &rest->Sup;
	T2_ = (NI)0;
	T2_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(T1_);
	incl_Iz1GYiOVKwItgr5CdCm0dQ(a, (&(*a).chunkStarts), T2_);
	listAdd_ZRIe9cFnHOrfvS8VmLduoXQ_2system(&(*a).freeChunksList, rest);
}

static N_INLINE(void*, osTryAllocPages_fxkHg9ajpjxOfBTuIyrgEfw_2system)(NI size) {
	void* result;
	result = (void*)0;
	result = mmap(NIM_NIL, size, ((int) 3), (NI32)(MAP_PRIVATE | MAP_ANONYMOUS), ((int) -1), ((NI) 0));
	{
		if (!(result == ((void*) -1))) goto LA3_;
		result = NIM_NIL;
	}
	LA3_: ;
	return result;
}

N_NIMCALL(void, addHeapLink_fJbggoVEhxEYh2HdNULF3Q)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* p, NI size) {
	HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg* it;
	it = (&(*a).heapLinks);
	{
		while (1) {
			NIM_BOOL T3_;
			T3_ = (NIM_BOOL)0;
			T3_ = !((it == NIM_NIL));
			if (!(T3_)) goto LA4_;
			T3_ = (((NI) 30) <= (*it).len);
			LA4_: ;
			if (!T3_) goto LA2;
			it = (*it).next;
		} LA2: ;
	}
	{
		HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg* n;
		void* T9_;
		if (!(it == NIM_NIL)) goto LA7_;
		T9_ = (void*)0;
		T9_ = llAlloc_fTkVQ4Gj2glm9btLqR9bdQDQ(a, ((NI)sizeof(HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg)));
		n = ((HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg*) (T9_));
		(*n).next = (*a).heapLinks.next;
		(*a).heapLinks.next = n;
		(*n).chunks[(((NI) 0))- 0].Field0 = p;
		(*n).chunks[(((NI) 0))- 0].Field1 = size;
		(*n).len = ((NI) 1);
	}
	goto LA5_;
	LA7_: ;
	{
		NI L;
		L = (*it).len;
		(*it).chunks[(L)- 0].Field0 = p;
		(*it).chunks[(L)- 0].Field1 = size;
		(*it).len += ((NI) 1);
	}
	LA5_: ;
}

N_NIMCALL(BigChunk_Rv9c70Uhp2TytkX7eH78qEg*, requestOsChunks_z9bCNjXTYllZ3pI24nEsw2g_2)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size) {
	BigChunk_Rv9c70Uhp2TytkX7eH78qEg* result;
	NI size_2;
	NI nxt;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* next;
	NI lastSize;
	NI prv;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* prev;
	result = (BigChunk_Rv9c70Uhp2TytkX7eH78qEg*)0;
	{
		NI usedMem;
		if (!!((*a).blockChunkSizeIncrease)) goto LA3_;
		usedMem = (*a).currMem;
		{
			if (!(usedMem < ((NI) 65536))) goto LA7_;
			(*a).nextChunkSize = ((NI) 16384);
		}
		goto LA5_;
		LA7_: ;
		{
			NI T10_;
			T10_ = (NI)0;
			T10_ = roundup_HS4HdHHFZPftyB49cpIyo7Asystem((NI)((NU32)(usedMem) >> (NU32)(((NI) 2))), ((NI) 4096));
			(*a).nextChunkSize = ((T10_ <= (NI)((*a).nextChunkSize * ((NI) 2))) ? T10_ : (NI)((*a).nextChunkSize * ((NI) 2)));
		}
		LA5_: ;
	}
	LA3_: ;
	size_2 = size;
	{
		void* T15_;
		if (!((*a).nextChunkSize < size_2)) goto LA13_;
		T15_ = (void*)0;
		T15_ = osAllocPages_fxkHg9ajpjxOfBTuIyrgEfwsystem(size_2);
		result = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (T15_));
	}
	goto LA11_;
	LA13_: ;
	{
		void* T17_;
		T17_ = (void*)0;
		T17_ = osTryAllocPages_fxkHg9ajpjxOfBTuIyrgEfw_2system((*a).nextChunkSize);
		result = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (T17_));
		{
			void* T22_;
			if (!(result == NIM_NIL)) goto LA20_;
			T22_ = (void*)0;
			T22_ = osAllocPages_fxkHg9ajpjxOfBTuIyrgEfwsystem(size_2);
			result = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (T22_));
			(*a).blockChunkSizeIncrease = NIM_TRUE;
		}
		goto LA18_;
		LA20_: ;
		{
			size_2 = (*a).nextChunkSize;
		}
		LA18_: ;
	}
	LA11_: ;
	incCurrMem_rxjvSU4wRoPOjezLtDzm3Qsystem(a, size_2);
	(*a).freeMem += size_2;
	addHeapLink_fJbggoVEhxEYh2HdNULF3Q(a, result, size_2);
	(*result).next = NIM_NIL;
	(*result).prev = NIM_NIL;
	(*result).Sup.size = size_2;
	nxt = (NI)((NU32)(((NI) (result))) + (NU32)(size_2));
	next = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) (nxt));
	{
		NI T26_;
		NIM_BOOL T27_;
		T26_ = (NI)0;
		T26_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(next);
		T27_ = (NIM_BOOL)0;
		T27_ = contains_tGsWrN4DY41H9btt3FhjrNA((&(*a).chunkStarts), T26_);
		if (!T27_) goto LA28_;
		(*next).prevSize = (NI)(size_2 | ((NI) ((NI)((*next).prevSize & ((NI) 1)))));
	}
	LA28_: ;
	{
		if (!!(((*a).lastSize == ((NI) 0)))) goto LA32_;
		lastSize = (*a).lastSize;
	}
	goto LA30_;
	LA32_: ;
	{
		lastSize = ((NI) 4096);
	}
	LA30_: ;
	prv = (NI)((NU32)(((NI) (result))) - (NU32)(lastSize));
	prev = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) (prv));
	{
		NIM_BOOL T37_;
		NI T38_;
		T37_ = (NIM_BOOL)0;
		T38_ = (NI)0;
		T38_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(prev);
		T37_ = contains_tGsWrN4DY41H9btt3FhjrNA((&(*a).chunkStarts), T38_);
		if (!(T37_)) goto LA39_;
		T37_ = ((*prev).size == lastSize);
		LA39_: ;
		if (!T37_) goto LA40_;
		(*result).Sup.prevSize = (NI)(lastSize | ((NI) ((NI)((*result).Sup.prevSize & ((NI) 1)))));
	}
	goto LA35_;
	LA40_: ;
	{
		(*result).Sup.prevSize = (NI)(((NI) 0) | ((NI) ((NI)((*result).Sup.prevSize & ((NI) 1)))));
	}
	LA35_: ;
	(*a).lastSize = size_2;
	return result;
}

N_NIMCALL(BigChunk_Rv9c70Uhp2TytkX7eH78qEg*, getBigChunk_z9bCNjXTYllZ3pI24nEsw2g)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI size) {
	BigChunk_Rv9c70Uhp2TytkX7eH78qEg* result;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* T20_;
	NI T21_;
	result = (BigChunk_Rv9c70Uhp2TytkX7eH78qEg*)0;
	result = (*a).freeChunksList;
	{
		{
			while (1) {
				if (!!((result == NIM_NIL))) goto LA3;
				{
					if (!((*result).Sup.size == size)) goto LA6_;
					listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem(&(*a).freeChunksList, result);
					goto LA1;
				}
				goto LA4_;
				LA6_: ;
				{
					if (!(size < (*result).Sup.size)) goto LA9_;
					listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem(&(*a).freeChunksList, result);
					splitChunk_8QXhiy717OAl8WNA2X27EA(a, result, size);
					goto LA1;
				}
				goto LA4_;
				LA9_: ;
				LA4_: ;
				result = (*result).next;
			} LA3: ;
		}
		{
			if (!(size < ((NI) 524288))) goto LA13_;
			result = requestOsChunks_z9bCNjXTYllZ3pI24nEsw2g_2(a, ((NI) 524288));
			splitChunk_8QXhiy717OAl8WNA2X27EA(a, result, size);
		}
		goto LA11_;
		LA13_: ;
		{
			result = requestOsChunks_z9bCNjXTYllZ3pI24nEsw2g_2(a, size);
			{
				if (!(size < (*result).Sup.size)) goto LA18_;
				splitChunk_8QXhiy717OAl8WNA2X27EA(a, result, size);
			}
			LA18_: ;
		}
		LA11_: ;
	} LA1: ;
	(*result).Sup.prevSize = ((NI) 1);
	T20_ = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
	T20_ = &result->Sup;
	T21_ = (NI)0;
	T21_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(T20_);
	incl_Iz1GYiOVKwItgr5CdCm0dQ(a, (&(*a).chunkStarts), T21_);
	(*a).freeMem -= size;
	return result;
}

N_NIMCALL(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*, getSmallChunk_h6cvXbfQjxIdThM5GthosA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a) {
	SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* result;
	BigChunk_Rv9c70Uhp2TytkX7eH78qEg* res;
	result = (SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*)0;
	res = getBigChunk_z9bCNjXTYllZ3pI24nEsw2g(a, ((NI) 4096));
	result = ((SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*) (res));
	return result;
}

static N_INLINE(void, listAdd_DqXPtLsRUwQp3iwLtHEdIgsystem)(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ** head, SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c) {
	(*c).next = (*head);
	{
		if (!!(((*head) == NIM_NIL))) goto LA3_;
		(*(*head)).prev = c;
	}
	LA3_: ;
	(*head) = c;
}

static N_INLINE(void, listRemove_DqXPtLsRUwQp3iwLtHEdIg_2system)(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ** head, SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c) {
	{
		if (!(c == (*head))) goto LA3_;
		(*head) = (*c).next;
		{
			if (!!(((*head) == NIM_NIL))) goto LA7_;
			(*(*head)).prev = NIM_NIL;
		}
		LA7_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		(*(*c).prev).next = (*c).next;
		{
			if (!!(((*c).next == NIM_NIL))) goto LA12_;
			(*(*c).next).prev = (*c).prev;
		}
		LA12_: ;
	}
	LA1_: ;
	(*c).next = NIM_NIL;
	(*c).prev = NIM_NIL;
}

N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, getBottom_QXg9anCfFuhk3avAkOOKNhQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a) {
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* result;
	result = (AvlNode_IaqjtwKhxLEpvDS9bct9blEw*)0;
	result = (&(*a).bottomData);
	{
		if (!((*result).link[(((NI) 0))- 0] == NIM_NIL)) goto LA3_;
		(*result).link[(((NI) 0))- 0] = result;
		(*result).link[(((NI) 1))- 0] = result;
	}
	LA3_: ;
	return result;
}

N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, allocAvlNode_neSuioWH6NDTp8E9cNgBmjg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI key, NI upperBound) {
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* result;
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* bottom;
	result = (AvlNode_IaqjtwKhxLEpvDS9bct9blEw*)0;
	{
		if (!!(((*a).freeAvlNodes == NIM_NIL))) goto LA3_;
		result = (*a).freeAvlNodes;
		(*a).freeAvlNodes = (*(*a).freeAvlNodes).link[(((NI) 0))- 0];
	}
	goto LA1_;
	LA3_: ;
	{
		void* T6_;
		T6_ = (void*)0;
		T6_ = llAlloc_fTkVQ4Gj2glm9btLqR9bdQDQ(a, ((NI)sizeof(AvlNode_IaqjtwKhxLEpvDS9bct9blEw)));
		result = ((AvlNode_IaqjtwKhxLEpvDS9bct9blEw*) (T6_));
	}
	LA1_: ;
	(*result).key = key;
	(*result).upperBound = upperBound;
	bottom = getBottom_QXg9anCfFuhk3avAkOOKNhQ(a);
	(*result).link[(((NI) 0))- 0] = bottom;
	(*result).link[(((NI) 1))- 0] = bottom;
	(*result).level = ((NI) 1);
	return result;
}

N_NIMCALL(void, skew_Cfx7NvEVZIhBjBm7i89boSg)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t) {
	{
		AvlNode_IaqjtwKhxLEpvDS9bct9blEw* temp;
		if (!((*(*(*t)).link[(((NI) 0))- 0]).level == (*(*t)).level)) goto LA3_;
		temp = (*t);
		(*t) = (*(*t)).link[(((NI) 0))- 0];
		(*temp).link[(((NI) 0))- 0] = (*(*t)).link[(((NI) 1))- 0];
		(*(*t)).link[(((NI) 1))- 0] = temp;
	}
	LA3_: ;
}

N_NIMCALL(void, split_Cfx7NvEVZIhBjBm7i89boSg_2)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t) {
	{
		AvlNode_IaqjtwKhxLEpvDS9bct9blEw* temp;
		if (!((*(*(*(*t)).link[(((NI) 1))- 0]).link[(((NI) 1))- 0]).level == (*(*t)).level)) goto LA3_;
		temp = (*t);
		(*t) = (*(*t)).link[(((NI) 1))- 0];
		(*temp).link[(((NI) 1))- 0] = (*(*t)).link[(((NI) 0))- 0];
		(*(*t)).link[(((NI) 0))- 0] = temp;
		(*(*t)).level += ((NI) 1);
	}
	LA3_: ;
}

N_NIMCALL(void, add_Xuf47u3imOz8BOk5HURLWQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t, NI key, NI upperBound) {
	{
		if (!((*(*t)).link[(((NI) 0))- 0] == (*t))) goto LA3_;
		(*t) = allocAvlNode_neSuioWH6NDTp8E9cNgBmjg(a, key, upperBound);
	}
	goto LA1_;
	LA3_: ;
	{
		{
			if (!((NU32)(key) < (NU32)((*(*t)).key))) goto LA8_;
			add_Xuf47u3imOz8BOk5HURLWQ(a, &(*(*t)).link[(((NI) 0))- 0], key, upperBound);
		}
		goto LA6_;
		LA8_: ;
		{
			if (!((NU32)((*(*t)).key) < (NU32)(key))) goto LA11_;
			add_Xuf47u3imOz8BOk5HURLWQ(a, &(*(*t)).link[(((NI) 1))- 0], key, upperBound);
		}
		goto LA6_;
		LA11_: ;
		{
		}
		LA6_: ;
		skew_Cfx7NvEVZIhBjBm7i89boSg(t);
		split_Cfx7NvEVZIhBjBm7i89boSg_2(t);
	}
	LA1_: ;
}

N_NIMCALL(void*, rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, NI requestedSize) {
	void* result;
	NI size;
	result = (void*)0;
	size = roundup_HS4HdHHFZPftyB49cpIyo7Asystem(requestedSize, ((NI) 8));
	{
		NI s;
		SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c;
		if (!(size <= (NI)(((NI) 4096) - (NI)(((NI)sizeof(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ)) - ((NI) 8))))) goto LA3_;
		s = (NI)(size / ((NI) 8));
		c = (*a).freeSmallChunks[(s)- 0];
		{
			if (!(c == NIM_NIL)) goto LA7_;
			c = getSmallChunk_h6cvXbfQjxIdThM5GthosA(a);
			(*c).freeList = NIM_NIL;
			(*c).Sup.size = size;
			(*c).acc = size;
			(*c).free = (NI)((NI)(((NI) 4096) - (NI)(((NI)sizeof(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ)) - ((NI) 8))) - size);
			(*c).next = NIM_NIL;
			(*c).prev = NIM_NIL;
			listAdd_DqXPtLsRUwQp3iwLtHEdIgsystem(&(*a).freeSmallChunks[(s)- 0], c);
			result = ((void*) ((&(*c).data)));
		}
		goto LA5_;
		LA7_: ;
		{
			{
				if (!((*c).freeList == NIM_NIL)) goto LA12_;
				result = ((void*) ((NI)((NU32)(((NI) ((&(*c).data)))) + (NU32)((*c).acc))));
				(*c).acc += size;
			}
			goto LA10_;
			LA12_: ;
			{
				result = ((void*) ((*c).freeList));
				(*c).freeList = (*(*c).freeList).next;
			}
			LA10_: ;
			(*c).free -= size;
		}
		LA5_: ;
		{
			if (!((*c).free < size)) goto LA17_;
			listRemove_DqXPtLsRUwQp3iwLtHEdIg_2system(&(*a).freeSmallChunks[(s)- 0], c);
		}
		LA17_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_2;
		size = roundup_HS4HdHHFZPftyB49cpIyo7Asystem((NI)(requestedSize + (NI)(((NI)sizeof(BigChunk_Rv9c70Uhp2TytkX7eH78qEg)) - ((NI) 8))), ((NI) 4096));
		c_2 = getBigChunk_z9bCNjXTYllZ3pI24nEsw2g(a, size);
		result = ((void*) ((&(*c_2).data)));
		{
			if (!((*a).root == NIM_NIL)) goto LA22_;
			(*a).root = getBottom_QXg9anCfFuhk3avAkOOKNhQ(a);
		}
		LA22_: ;
		add_Xuf47u3imOz8BOk5HURLWQ(a, &(*a).root, ((NI) (result)), (NI)((NU32)(((NI) (result))) + (NU32)(size)));
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void*, alloc_WDxgSWQ1mSIerfvC0kmUtg_2)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, NI size) {
	void* result;
	result = (void*)0;
	result = rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg(allocator, (NI)(((NI) (size)) + ((NI)sizeof(FreeCell_u6M5LHprqzkn9axr04yg9bGQ))));
	(*((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) (result))).zeroField = ((NI) 1);
	result = ((void*) ((NI)((NU32)(((NI) (result))) + (NU32)(((NI)sizeof(FreeCell_u6M5LHprqzkn9axr04yg9bGQ))))));
	return result;
}

N_NIMCALL(void*, alloc0_WDxgSWQ1mSIerfvC0kmUtg)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, NI size) {
	void* result;
	result = (void*)0;
	result = alloc_WDxgSWQ1mSIerfvC0kmUtg_2(allocator, size);
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(result, size);
	return result;
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_alloc0)(NI size) {
	void* result;
	result = (void*)0;
	result = alloc0_WDxgSWQ1mSIerfvC0kmUtg((&gch_IcYaEuuWivYAS86vFMTS3Q.region), size);
	return result;
}

N_NIMCALL(void, init_E1QNZGuo0DGFXyt4Y3MfqA)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, NI cap) {
	void* T1_;
	(*s).len = ((NI) 0);
	(*s).cap = cap;
	T1_ = (void*)0;
	T1_ = nimrtl_alloc0(((NI) ((NI)(cap * ((NI) 4)))));
	(*s).d = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g**) (T1_));
}

N_NIMCALL(void, init_WHgd5C59bkXWDz3vnAxfzXQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s) {
	void* T1_;
	T1_ = (void*)0;
	T1_ = nimrtl_alloc0(((NI) 4096));
	(*s).data = ((PageDesc_fublkgIY4LG3mT51LU2WHg**) (T1_));
	(*s).max = ((NI) 1023);
	(*s).counter = ((NI) 0);
	(*s).head = NIM_NIL;
}

N_NIMCALL(void, initGC_njssp69aa7hvxte9bJ8uuDcg)(void) {
	gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold = ((NI) 4194304);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.stackScans = ((NI) 0);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.cycleCollections = ((NI) 0);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxThreshold = ((NI) 0);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxStackSize = ((NI) 0);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxStackCells = ((NI) 0);
	gch_IcYaEuuWivYAS86vFMTS3Q.stat.cycleTableSize = ((NI) 0);
	init_E1QNZGuo0DGFXyt4Y3MfqA((&gch_IcYaEuuWivYAS86vFMTS3Q.zct), ((NI) 1024));
	init_E1QNZGuo0DGFXyt4Y3MfqA((&gch_IcYaEuuWivYAS86vFMTS3Q.tempStack), ((NI) 1024));
	init_E1QNZGuo0DGFXyt4Y3MfqA((&gch_IcYaEuuWivYAS86vFMTS3Q.decStack), ((NI) 1024));
	init_WHgd5C59bkXWDz3vnAxfzXQ((&gch_IcYaEuuWivYAS86vFMTS3Q.marked));
	init_E1QNZGuo0DGFXyt4Y3MfqA((&gch_IcYaEuuWivYAS86vFMTS3Q.additionalRoots), ((NI) 1024));
}

static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* result;
	result = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
	result = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) ((NI)((NU32)(((NI) (usr))) - (NU32)(((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))))));
	return result;
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_alloc)(NI size) {
	void* result;
	result = (void*)0;
	result = alloc_WDxgSWQ1mSIerfvC0kmUtg_2((&gch_IcYaEuuWivYAS86vFMTS3Q.region), size);
	return result;
}

static N_INLINE(void, copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem)(void* dest, void* source, NI size) {
	void* T1_;
	T1_ = (void*)0;
	T1_ = memcpy(dest, source, ((size_t) (size)));
}

static N_INLINE(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*, pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem)(void* p) {
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* result;
	result = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
	result = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) ((NI)(((NI) (p)) & ((NI) -4096))));
	return result;
}

static N_INLINE(NIM_BOOL, isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c) {
	NIM_BOOL result;
{	result = (NIM_BOOL)0;
	result = ((*c).size <= (NI)(((NI) 4096) - (NI)(((NI)sizeof(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ)) - ((NI) 8))));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

static N_INLINE(NIM_BOOL, chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system)(BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c) {
	NIM_BOOL result;
	result = (NIM_BOOL)0;
	result = (((NI) ((NI)((*c).prevSize & ((NI) 1)))) == ((NI) 0));
	return result;
}

N_NIMCALL(void, excl_Z9cZKmN1jjRFCzU0lgW9a1XA)(IntSet_EZObFrE3NC9bIb3YMkY9crZA* s, NI key) {
	Trunk_W0r8S0Y3UGke6T9bIUWnnuw* t;
	t = intSetGet_FhOZKj4Gih3qQ5OimZYOrg((&(*s)), (NI)((NU32)(key) >> (NU32)(((NI) 9))));
	{
		NI u;
		if (!!((t == NIM_NIL))) goto LA3_;
		u = (NI)(key & ((NI) 511));
		(*t).bits[((NI)((NU32)(((NI) (u))) >> (NU32)(((NI) 5))))- 0] = (NI)((*t).bits[((NI)((NU32)(((NI) (u))) >> (NU32)(((NI) 5))))- 0] & (NI)((NU32) ~((NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(((NI) (u)) & ((NI) 31)))))))));
	}
	LA3_: ;
}

N_NIMCALL(void, freeBigChunk_CAqFS1jFL1RxG80t9bOGmAA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c) {
	BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_2;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* ri;
	NI prevSize;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* T30_;
	NI T31_;
	c_2 = c;
	(*a).freeMem += (*c_2).Sup.size;
	ri = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) ((NI)((NU32)(((NI) (c_2))) + (NU32)((*c_2).Sup.size))));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = isAccessible_5nqar3kL9acJcissrFLDdkwsystem((&(*a)), ((void*) (ri)));
		if (!(T3_)) goto LA4_;
		T3_ = chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system(ri);
		LA4_: ;
		if (!T3_) goto LA5_;
		{
			NIM_BOOL T9_;
			NI T12_;
			T9_ = (NIM_BOOL)0;
			T9_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(ri);
			if (!!(T9_)) goto LA10_;
			listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem(&(*a).freeChunksList, ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (ri)));
			(*c_2).Sup.size += (*ri).size;
			T12_ = (NI)0;
			T12_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(ri);
			excl_Z9cZKmN1jjRFCzU0lgW9a1XA((&(*a).chunkStarts), T12_);
		}
		LA10_: ;
	}
	LA5_: ;
	prevSize = (NI)((*c_2).Sup.prevSize & ((NI) -2));
	{
		BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* le;
		if (!!((prevSize == ((NI) 0)))) goto LA15_;
		le = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) ((NI)((NU32)(((NI) (c_2))) - (NU32)(prevSize))));
		{
			NIM_BOOL T19_;
			T19_ = (NIM_BOOL)0;
			T19_ = isAccessible_5nqar3kL9acJcissrFLDdkwsystem((&(*a)), ((void*) (le)));
			if (!(T19_)) goto LA20_;
			T19_ = chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system(le);
			LA20_: ;
			if (!T19_) goto LA21_;
			{
				NIM_BOOL T25_;
				BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* T28_;
				NI T29_;
				T25_ = (NIM_BOOL)0;
				T25_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(le);
				if (!!(T25_)) goto LA26_;
				listRemove_ZRIe9cFnHOrfvS8VmLduoXQsystem(&(*a).freeChunksList, ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (le)));
				(*le).size += (*c_2).Sup.size;
				T28_ = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
				T28_ = &c_2->Sup;
				T29_ = (NI)0;
				T29_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(T28_);
				excl_Z9cZKmN1jjRFCzU0lgW9a1XA((&(*a).chunkStarts), T29_);
				c_2 = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (le));
			}
			LA26_: ;
		}
		LA21_: ;
	}
	LA15_: ;
	T30_ = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
	T30_ = &c_2->Sup;
	T31_ = (NI)0;
	T31_ = pageIndex_vFgXFo13iF61HsEG6epuwgsystem(T30_);
	incl_Iz1GYiOVKwItgr5CdCm0dQ(a, (&(*a).chunkStarts), T31_);
	updatePrevSize_3G5wKZdFZhblebPYdFnpxQsystem(a, c_2, (*c_2).Sup.size);
	listAdd_ZRIe9cFnHOrfvS8VmLduoXQ_2system(&(*a).freeChunksList, c_2);
	(*c_2).Sup.prevSize = (NI)((*c_2).Sup.prevSize & ((NI) -2));
}

static N_INLINE(void, deallocAvlNode_E5Kui5a9artJoR6jEn007Vgsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n) {
	(*n).link[(((NI) 0))- 0] = (*a).freeAvlNodes;
	(*a).freeAvlNodes = n;
}

N_NIMCALL(void, del_C66us4UEWCXp84lHW4tDLA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, AvlNode_IaqjtwKhxLEpvDS9bct9blEw** t, NI x) {
{	{
		if (!((*(*t)).link[(((NI) 0))- 0] == (*t))) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	(*a).last = (*t);
	{
		if (!((NU32)(x) < (NU32)((*(*t)).key))) goto LA7_;
		del_C66us4UEWCXp84lHW4tDLA(a, &(*(*t)).link[(((NI) 0))- 0], x);
	}
	goto LA5_;
	LA7_: ;
	{
		(*a).deleted = (*t);
		del_C66us4UEWCXp84lHW4tDLA(a, &(*(*t)).link[(((NI) 1))- 0], x);
	}
	LA5_: ;
	{
		NIM_BOOL T12_;
		NIM_BOOL T13_;
		T12_ = (NIM_BOOL)0;
		T13_ = (NIM_BOOL)0;
		T13_ = ((*t) == (*a).last);
		if (!(T13_)) goto LA14_;
		T13_ = !(((*(*a).deleted).link[(((NI) 0))- 0] == (*a).deleted));
		LA14_: ;
		T12_ = T13_;
		if (!(T12_)) goto LA15_;
		T12_ = (x == (*(*a).deleted).key);
		LA15_: ;
		if (!T12_) goto LA16_;
		(*(*a).deleted).key = (*(*t)).key;
		(*(*a).deleted).upperBound = (*(*t)).upperBound;
		(*a).deleted = getBottom_QXg9anCfFuhk3avAkOOKNhQ(a);
		(*t) = (*(*t)).link[(((NI) 1))- 0];
		deallocAvlNode_E5Kui5a9artJoR6jEn007Vgsystem(a, (*a).last);
	}
	goto LA10_;
	LA16_: ;
	{
		NIM_BOOL T19_;
		T19_ = (NIM_BOOL)0;
		T19_ = ((*(*(*t)).link[(((NI) 0))- 0]).level < (NI)((*(*t)).level - ((NI) 1)));
		if (T19_) goto LA20_;
		T19_ = ((*(*(*t)).link[(((NI) 1))- 0]).level < (NI)((*(*t)).level - ((NI) 1)));
		LA20_: ;
		if (!T19_) goto LA21_;
		(*(*t)).level -= ((NI) 1);
		{
			if (!((*(*t)).level < (*(*(*t)).link[(((NI) 1))- 0]).level)) goto LA25_;
			(*(*(*t)).link[(((NI) 1))- 0]).level = (*(*t)).level;
		}
		LA25_: ;
		skew_Cfx7NvEVZIhBjBm7i89boSg(t);
		skew_Cfx7NvEVZIhBjBm7i89boSg(&(*(*t)).link[(((NI) 1))- 0]);
		skew_Cfx7NvEVZIhBjBm7i89boSg(&(*(*(*t)).link[(((NI) 1))- 0]).link[(((NI) 1))- 0]);
		split_Cfx7NvEVZIhBjBm7i89boSg_2(t);
		split_Cfx7NvEVZIhBjBm7i89boSg_2(&(*(*t)).link[(((NI) 1))- 0]);
	}
	goto LA10_;
	LA21_: ;
	LA10_: ;
	}BeforeRet_: ;
}

N_NIMCALL(void, rawDealloc_DA62HrGC5sdfCED505KyyQ)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p) {
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c;
	c = pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem(p);
	{
		NIM_BOOL T3_;
		SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c_2;
		NI s;
		FreeCell_u6M5LHprqzkn9axr04yg9bGQ* f;
		T3_ = (NIM_BOOL)0;
		T3_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(c);
		if (!T3_) goto LA4_;
		c_2 = ((SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*) (c));
		s = (*c_2).Sup.size;
		f = ((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) (p));
		(*f).zeroField = ((NI) 0);
		(*f).next = (*c_2).freeList;
		(*c_2).freeList = f;
		{
			if (!((*c_2).free < s)) goto LA8_;
			listAdd_DqXPtLsRUwQp3iwLtHEdIgsystem(&(*a).freeSmallChunks[((NI)(s / ((NI) 8)))- 0], c_2);
			(*c_2).free += s;
		}
		goto LA6_;
		LA8_: ;
		{
			(*c_2).free += s;
			{
				if (!((*c_2).free == (NI)(((NI) 4096) - (NI)(((NI)sizeof(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ)) - ((NI) 8))))) goto LA13_;
				listRemove_DqXPtLsRUwQp3iwLtHEdIg_2system(&(*a).freeSmallChunks[((NI)(s / ((NI) 8)))- 0], c_2);
				(*c_2).Sup.size = ((NI) 4096);
				freeBigChunk_CAqFS1jFL1RxG80t9bOGmAA(a, ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (c_2)));
			}
			LA13_: ;
		}
		LA6_: ;
	}
	goto LA1_;
	LA4_: ;
	{
		BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_3;
		c_3 = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (c));
		(*a).deleted = getBottom_QXg9anCfFuhk3avAkOOKNhQ(a);
		del_C66us4UEWCXp84lHW4tDLA(a, &(*a).root, ((NI) ((&(*c_3).data))));
		freeBigChunk_CAqFS1jFL1RxG80t9bOGmAA(a, c_3);
	}
	LA1_: ;
}

N_NIMCALL(void, dealloc_jqYVOi4APb9cRx3G9a57AkRw)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, void* p) {
	void* x;
	x = ((void*) ((NI)((NU32)(((NI) (p))) - (NU32)(((NI)sizeof(FreeCell_u6M5LHprqzkn9axr04yg9bGQ))))));
	rawDealloc_DA62HrGC5sdfCED505KyyQ(allocator, x);
}

N_LIB_EXPORT N_NOCONV(void, nimrtl_dealloc)(void* p) {
	dealloc_jqYVOi4APb9cRx3G9a57AkRw((&gch_IcYaEuuWivYAS86vFMTS3Q.region), p);
}

static N_INLINE(void, add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
		void* T5_;
		if (!((*s).cap <= (*s).len)) goto LA3_;
		(*s).cap = (NI)((NI)((*s).cap * ((NI) 3)) / ((NI) 2));
		T5_ = (void*)0;
		T5_ = nimrtl_alloc(((NI) ((NI)((*s).cap * ((NI) 4)))));
		d = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g**) (T5_));
		copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) (d)), ((void*) ((*s).d)), ((NI) ((NI)((*s).len * ((NI) 4)))));
		nimrtl_dealloc(((void*) ((*s).d)));
		(*s).d = d;
	}
	LA3_: ;
	(*s).d[((*s).len)- 0] = c;
	(*s).len += ((NI) 1);
}

N_NOINLINE(void, addZCT_fCDI7oO1NNVXXURtxSzsRw)(CellSeq_Axo1XVm9aaQueTOldv8le5w* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	{
		if (!((NI)((*c).refcount & ((NI) 4)) == ((NI) 0))) goto LA3_;
		(*c).refcount = (NI)((*c).refcount | ((NI) 4));
		add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem(s, c);
	}
	LA3_: ;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_rtlAddZCT)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	addZCT_fCDI7oO1NNVXXURtxSzsRw((&gch_IcYaEuuWivYAS86vFMTS3Q.zct), c);
}

static N_INLINE(void, decRef_MV4BBk6J1qu70IbBxwEn4wsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA3_;
		nimrtl_rtlAddZCT(c);
	}
	LA3_: ;
}

static N_INLINE(NI, nextTry_GRX2KbRyW3mlDDFEU50uhwsystem)(NI h, NI maxHash) {
	NI result;
	result = (NI)0;
	result = (NI)((NI)((NI)(((NI) 5) * h) + ((NI) 1)) & maxHash);
	return result;
}

N_NIMCALL(void, cellSetRawInsert_IccmFuD44fG6qfTRJKp9aSQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ t, PageDesc_fublkgIY4LG3mT51LU2WHg** data, PageDesc_fublkgIY4LG3mT51LU2WHg* desc) {
	NI h;
	h = (NI)(((NI) ((*desc).key)) & t.max);
	{
		while (1) {
			if (!!((data[(h)- 0] == NIM_NIL))) goto LA2;
			h = nextTry_GRX2KbRyW3mlDDFEU50uhwsystem(h, t.max);
		} LA2: ;
	}
	data[(h)- 0] = desc;
}

N_NIMCALL(void, cellSetEnlarge_ZCqaZEiX9aUtDCRoknrJ9bpQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* t) {
	NI oldMax;
	PageDesc_fublkgIY4LG3mT51LU2WHg** n;
	void* T1_;
	oldMax = (*t).max;
	(*t).max = (NI)((NI)((NI)((*t).max + ((NI) 1)) * ((NI) 2)) - ((NI) 1));
	T1_ = (void*)0;
	T1_ = nimrtl_alloc0(((NI) ((NI)((NI)((*t).max + ((NI) 1)) * ((NI) 4)))));
	n = ((PageDesc_fublkgIY4LG3mT51LU2WHg**) (T1_));
	{
		NI i;
		NI res;
		i = (NI)0;
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= oldMax)) goto LA4;
				i = res;
				{
					if (!!(((*t).data[(i)- 0] == NIM_NIL))) goto LA7_;
					cellSetRawInsert_IccmFuD44fG6qfTRJKp9aSQ((*t), n, (*t).data[(i)- 0]);
				}
				LA7_: ;
				res += ((NI) 1);
			} LA4: ;
		}
	}
	nimrtl_dealloc(((void*) ((*t).data)));
	(*t).data = n;
}

N_NIMCALL(PageDesc_fublkgIY4LG3mT51LU2WHg*, cellSetPut_mFUFZ7eVLRT9bMaHzrsxFrQ)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* t, NI key) {
	PageDesc_fublkgIY4LG3mT51LU2WHg* result;
	NI h;
	void* T19_;
{	result = (PageDesc_fublkgIY4LG3mT51LU2WHg*)0;
	h = (NI)(((NI) (key)) & (*t).max);
	{
		while (1) {
			PageDesc_fublkgIY4LG3mT51LU2WHg* x;
			x = (*t).data[(h)- 0];
			{
				if (!(x == NIM_NIL)) goto LA5_;
				goto LA1;
			}
			LA5_: ;
			{
				if (!((*x).key == key)) goto LA9_;
				result = x;
				goto BeforeRet_;
			}
			LA9_: ;
			h = nextTry_GRX2KbRyW3mlDDFEU50uhwsystem(h, (*t).max);
		}
	} LA1: ;
	{
		NIM_BOOL T13_;
		T13_ = (NIM_BOOL)0;
		T13_ = ((NI)((NI)((*t).max + ((NI) 1)) * ((NI) 2)) < (NI)((*t).counter * ((NI) 3)));
		if (T13_) goto LA14_;
		T13_ = ((NI)((NI)((*t).max + ((NI) 1)) - (*t).counter) < ((NI) 4));
		LA14_: ;
		if (!T13_) goto LA15_;
		cellSetEnlarge_ZCqaZEiX9aUtDCRoknrJ9bpQ(t);
	}
	LA15_: ;
	(*t).counter += ((NI) 1);
	h = (NI)(((NI) (key)) & (*t).max);
	{
		while (1) {
			if (!!(((*t).data[(h)- 0] == NIM_NIL))) goto LA18;
			h = nextTry_GRX2KbRyW3mlDDFEU50uhwsystem(h, (*t).max);
		} LA18: ;
	}
	T19_ = (void*)0;
	T19_ = nimrtl_alloc0(((NI) (((NI)sizeof(PageDesc_fublkgIY4LG3mT51LU2WHg)))));
	result = ((PageDesc_fublkgIY4LG3mT51LU2WHg*) (T19_));
	(*result).next = (*t).head;
	(*result).key = key;
	(*t).head = result;
	(*t).data[(h)- 0] = result;
	}BeforeRet_: ;
	return result;
}

N_NOINLINE(void, incl_m4q9b16kJJcoKe9c4ERtlpCg)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell) {
	NI u;
	PageDesc_fublkgIY4LG3mT51LU2WHg* t;
	u = ((NI) (cell));
	t = cellSetPut_mFUFZ7eVLRT9bMaHzrsxFrQ(s, (NI)((NU32)(u) >> (NU32)(((NI) 12))));
	u = ((NI) ((NI)((NU32)(((NI) ((NI)((NU32)(u) % (NU32)(((NI) 4096)))))) / (NU32)(((NI) 8)))));
	(*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] = (NI)((*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] | (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(u & ((NI) 31)))))));
}

static N_INLINE(void*, cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell) {
	void* result;
	result = (void*)0;
	result = ((void*) ((NI)((NU32)(((NI) (cell))) + (NU32)(((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))))));
	return result;
}

N_NIMCALL(NI, getDiscriminant_wq1GP7ZPZ7P1uZUypfc9ciA)(void* aa, TNimNode* n) {
	NI result;
	NI d;
	NI a;
{	result = (NI)0;
	d = (NI)0;
	a = ((NI) (aa));
	switch ((*(*n).typ).size) {
	case ((NI) 1):
	{
		d = ((NI)(NU)(NU8)((*((NI8*) ((NI)((NU32)(a) + (NU32)((*n).offset)))))));
	}
	break;
	case ((NI) 2):
	{
		d = ((NI)(NU)(NU16)((*((NI16*) ((NI)((NU32)(a) + (NU32)((*n).offset)))))));
	}
	break;
	case ((NI) 4):
	{
		d = ((NI) ((*((NI32*) ((NI)((NU32)(a) + (NU32)((*n).offset)))))));
	}
	break;
	default:
	{
	}
	break;
	}
	result = d;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(TNimNode*, selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ)(void* aa, TNimNode* n) {
	TNimNode* result;
	NI discr;
	result = (TNimNode*)0;
	discr = getDiscriminant_wq1GP7ZPZ7P1uZUypfc9ciA(aa, n);
	{
		if (!((NU32)(discr) < (NU32)((*n).len))) goto LA3_;
		result = (*n).sons[(discr)- 0];
		{
			if (!(result == NIM_NIL)) goto LA7_;
			result = (*n).sons[((*n).len)- 0];
		}
		LA7_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		result = (*n).sons[((*n).len)- 0];
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void, forAllSlotsAux_g4QpsZWzXQMKa0ugIze5Kw)(void* dest, TNimNode* n, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op) {
	NI d;
	d = ((NI) (dest));
	switch ((*n).kind) {
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 1):
	{
		forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(((void*) ((NI)((NU32)(d) + (NU32)((*n).offset)))), (*n).typ, op);
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 2):
	{
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*n).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA5;
					i = res;
					{
						if (!((*(*n).sons[(i)- 0]).kind == ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 1))) goto LA8_;
						{
							if (!((*(*(*n).sons[(i)- 0]).typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22) || (*(*(*n).sons[(i)- 0]).typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28) || (*(*(*n).sons[(i)- 0]).typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24))) goto LA12_;
							doOperation_3F8QeaTyYrJJF2gjBr6b8A((*((void**) ((NI)((NU32)(d) + (NU32)((*(*n).sons[(i)- 0]).offset))))), op);
						}
						goto LA10_;
						LA12_: ;
						{
							forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(((void*) ((NI)((NU32)(d) + (NU32)((*(*n).sons[(i)- 0]).offset)))), (*(*n).sons[(i)- 0]).typ, op);
						}
						LA10_: ;
					}
					goto LA6_;
					LA8_: ;
					{
						forAllSlotsAux_g4QpsZWzXQMKa0ugIze5Kw(dest, (*n).sons[(i)- 0], op);
					}
					LA6_: ;
					res += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 3):
	{
		TNimNode* m;
		m = selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ(dest, n);
		{
			if (!!((m == NIM_NIL))) goto LA19_;
			forAllSlotsAux_g4QpsZWzXQMKa0ugIze5Kw(dest, m, op);
		}
		LA19_: ;
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 0):
	{
	}
	break;
	}
}

N_NIMCALL(void, forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA)(void* dest, TNimType* mt, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op) {
	NI d;
{	d = ((NI) (dest));
	{
		if (!(dest == NIM_NIL)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!!((((*mt).flags &(1U<<((NU)(((TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ) 0))&7U)))!=0))) goto LA7_;
		switch ((*mt).kind) {
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22):
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28):
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24):
		{
			doOperation_3F8QeaTyYrJJF2gjBr6b8A((*((void**) (d))), op);
		}
		break;
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 17):
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 18):
		{
			forAllSlotsAux_g4QpsZWzXQMKa0ugIze5Kw(dest, (*mt).node, op);
		}
		break;
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 16):
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 4):
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 27):
		{
			{
				NI i;
				NI colontmp_;
				NI res;
				i = (NI)0;
				colontmp_ = (NI)0;
				colontmp_ = (NI)((NI)((*mt).size / (*(*mt).base).size) - ((NI) 1));
				res = ((NI) 0);
				{
					while (1) {
						if (!(res <= colontmp_)) goto LA14;
						i = res;
						forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(((void*) ((NI)((NU32)(d) + (NU32)((NI)((NU32)(i) * (NU32)((*(*mt).base).size)))))), (*mt).base, op);
						res += ((NI) 1);
					} LA14: ;
				}
			}
		}
		break;
		default:
		{
		}
		break;
		}
	}
	LA7_: ;
	}BeforeRet_: ;
}

N_NIMCALL(void, forAllChildren_yHFnLgI7q81iFxRlb3Iqlw)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op) {
	TY_ojoeKfW4VYIm36I9cpDTQIg marker;
	marker = (*(*cell).typ).marker;
	{
		void* T5_;
		if (!!((marker == NIM_NIL))) goto LA3_;
		T5_ = (void*)0;
		T5_ = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(cell);
		marker(T5_, ((NI) (op)));
	}
	goto LA1_;
	LA3_: ;
	{
		switch ((*(*cell).typ).kind) {
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22):
		{
			void* T8_;
			T8_ = (void*)0;
			T8_ = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(cell);
			forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(T8_, (*(*cell).typ).base, op);
		}
		break;
		case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24):
		{
			NI d;
			void* T10_;
			TGenericSeq* s;
			T10_ = (void*)0;
			T10_ = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(cell);
			d = ((NI) (T10_));
			s = ((TGenericSeq*) (d));
			{
				if (!!((s == NIM_NIL))) goto LA13_;
				{
					NI i;
					NI colontmp_;
					NI res;
					i = (NI)0;
					colontmp_ = (NI)0;
					colontmp_ = (NI)((*s).len - ((NI) 1));
					res = ((NI) 0);
					{
						while (1) {
							if (!(res <= colontmp_)) goto LA17;
							i = res;
							forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(((void*) ((NI)((NU32)((NI)((NU32)(d) + (NU32)((NI)((NU32)(i) * (NU32)((*(*(*cell).typ).base).size))))) + (NU32)(((NI) 8))))), (*(*cell).typ).base, op);
							res += ((NI) 1);
						} LA17: ;
					}
				}
			}
			LA13_: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	LA1_: ;
}

N_NIMCALL(PageDesc_fublkgIY4LG3mT51LU2WHg*, cellSetGet_X4WTfs0wkld8wp8XcE9b8BA)(CellSet_jG87P0AI9aZtss9ccTYBIISQ t, NI key) {
	PageDesc_fublkgIY4LG3mT51LU2WHg* result;
	NI h;
{	result = (PageDesc_fublkgIY4LG3mT51LU2WHg*)0;
	h = (NI)(((NI) (key)) & t.max);
	{
		while (1) {
			if (!!((t.data[(h)- 0] == NIM_NIL))) goto LA2;
			{
				if (!((*t.data[(h)- 0]).key == key)) goto LA5_;
				result = t.data[(h)- 0];
				goto BeforeRet_;
			}
			LA5_: ;
			h = nextTry_GRX2KbRyW3mlDDFEU50uhwsystem(h, t.max);
		} LA2: ;
	}
	result = NIM_NIL;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NIM_BOOL, containsOrIncl_CbGEjIBKJIi7knlaDzUluA)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell) {
	NIM_BOOL result;
	NI u;
	PageDesc_fublkgIY4LG3mT51LU2WHg* t;
	result = (NIM_BOOL)0;
	u = ((NI) (cell));
	t = cellSetGet_X4WTfs0wkld8wp8XcE9b8BA((*s), (NI)((NU32)(u) >> (NU32)(((NI) 12))));
	{
		if (!!((t == NIM_NIL))) goto LA3_;
		u = ((NI) ((NI)((NU32)(((NI) ((NI)((NU32)(u) % (NU32)(((NI) 4096)))))) / (NU32)(((NI) 8)))));
		result = !(((NI)((*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] & (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(u & ((NI) 31))))))) == ((NI) 0)));
		{
			if (!!(result)) goto LA7_;
			(*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] = (NI)((*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] | (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(u & ((NI) 31)))))));
		}
		LA7_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		incl_m4q9b16kJJcoKe9c4ERtlpCg(s, cell);
		result = NIM_FALSE;
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void, markS_NZr5o3Ubzrci4OmK29cHBJA)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	incl_m4q9b16kJJcoKe9c4ERtlpCg((&(*gch).marked), c);
	forAllChildren_yHFnLgI7q81iFxRlb3Iqlw(c, ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 1));
	{
		while (1) {
			Cell_1zcF9cV8XIAtbN8h5HRUB8g* d;
			if (!(((NI) 0) < (*gch).tempStack.len)) goto LA2;
			(*gch).tempStack.len -= ((NI) 1);
			d = (*gch).tempStack.d[((*gch).tempStack.len)- 0];
			{
				NIM_BOOL T5_;
				T5_ = (NIM_BOOL)0;
				T5_ = containsOrIncl_CbGEjIBKJIi7knlaDzUluA((&(*gch).marked), d);
				if (!!(T5_)) goto LA6_;
				forAllChildren_yHFnLgI7q81iFxRlb3Iqlw(d, ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 1));
			}
			LA6_: ;
		} LA2: ;
	}
}

N_NIMCALL(void, doOperation_3F8QeaTyYrJJF2gjBr6b8A)(void* p, WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ op) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
{	{
		if (!(p == NIM_NIL)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	c = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p);
	switch (op) {
	case ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 2):
	{
		decRef_MV4BBk6J1qu70IbBxwEn4wsystem(c);
	}
	break;
	case ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 3):
	{
		add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem((&gch_IcYaEuuWivYAS86vFMTS3Q.tempStack), c);
	}
	break;
	case ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 0):
	{
		markS_NZr5o3Ubzrci4OmK29cHBJA((&gch_IcYaEuuWivYAS86vFMTS3Q), c);
	}
	break;
	case ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 1):
	{
		add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem((&gch_IcYaEuuWivYAS86vFMTS3Q.tempStack), c);
	}
	break;
	}
	}BeforeRet_: ;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_nimGCvisit)(void* d, NI op) {
	doOperation_3F8QeaTyYrJJF2gjBr6b8A(d, ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) (op)));
}
static N_NIMCALL(void, Marker_TY_oUKtBcKRdK6usj8RWrlp6A)(void* p, NI op) {
	Exception* a;
	a = (Exception*)p;
	nimrtl_nimGCvisit((void*)(*a).parent, op);
	nimrtl_nimGCvisit((void*)(*a).message, op);
	nimrtl_nimGCvisit((void*)(*a).trace, op);
}
static N_NIMCALL(void, TM_Q5wkpxktOdTGvlSRo9bzt9aw_4)(void) {
	nimrtl_nimGCvisit((void*)currException_9bVPeDJlYTi9bQApZpfH8wjg, 0);
}

N_NIMCALL(void, nimRegisterGlobalMarker)(TY_T4eqaYlFJYZUv9aG9b1TV0bQ markerProc) {
	{
		if (!(globalMarkersLen_hgEFy3UCOBoalBh29asu5MA <= ((NI) 7000))) goto LA3_;
		globalMarkers_5ghwSgpo9cT9bT7YStQDJHVQ[(globalMarkersLen_hgEFy3UCOBoalBh29asu5MA)- 0] = markerProc;
		globalMarkersLen_hgEFy3UCOBoalBh29asu5MA += ((NI) 1);
	}
	goto LA1_;
	LA3_: ;
	{
		printf("%s\012", ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_5)? (((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_5))->data:"nil");
		fflush(stdout);
		exit(((NI) 1));
	}
	LA1_: ;
}

N_NIMCALL(GcStack_7fytPA5bBsob6See21YMRA*, getActiveStack_2XtoPjgvlHPkHLitAW2flw)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	GcStack_7fytPA5bBsob6See21YMRA* result;
	result = (GcStack_7fytPA5bBsob6See21YMRA*)0;
	result = (&(*gch).stack);
	return result;
}

N_NOINLINE(NIM_BOOL, isOnStack_dJJW59cIgsBmT59aZrOM71Mg)(void* p) {
	NIM_BOOL result;
	void* volatile stackTop;
	NI a;
	GcStack_7fytPA5bBsob6See21YMRA* T1_;
	NI b;
	NI T2_;
	NI x;
	NIM_BOOL T3_;
	result = (NIM_BOOL)0;
	stackTop = (void*)0;
	stackTop = ((void*) ((&stackTop)));
	T1_ = (GcStack_7fytPA5bBsob6See21YMRA*)0;
	T1_ = getActiveStack_2XtoPjgvlHPkHLitAW2flw((&gch_IcYaEuuWivYAS86vFMTS3Q));
	a = ((NI) ((*T1_).bottom));
	b = ((NI) (stackTop));
	T2_ = (NI)0;
	T2_ = a;
	a = b;
	b = T2_;
	x = ((NI) (p));
	T3_ = (NIM_BOOL)0;
	T3_ = ((NU32)(a) <= (NU32)(x));
	if (!(T3_)) goto LA4_;
	T3_ = ((NU32)(x) <= (NU32)(b));
	LA4_: ;
	result = T3_;
	return result;
}

static N_INLINE(void, incRef_9cAA5YuQAAC3MVbnGeV86swsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	(*c).refcount = (NI)((NU32)((*c).refcount) + (NU32)(((NI) 8)));
}

N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src) {
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = isOnStack_dJJW59cIgsBmT59aZrOM71Mg(((void*) (dest)));
		if (!!(T3_)) goto LA4_;
		{
			Cell_1zcF9cV8XIAtbN8h5HRUB8g* T10_;
			if (!!((src == NIM_NIL))) goto LA8_;
			T10_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
			T10_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src);
			incRef_9cAA5YuQAAC3MVbnGeV86swsystem(T10_);
		}
		LA8_: ;
		{
			Cell_1zcF9cV8XIAtbN8h5HRUB8g* T15_;
			if (!((NU32)(((NI) 4096)) <= (NU32)(((NI) ((*dest)))))) goto LA13_;
			T15_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
			T15_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest));
			decRef_MV4BBk6J1qu70IbBxwEn4wsystem(T15_);
		}
		LA13_: ;
	}
	goto LA1_;
	LA4_: ;
	{
	}
	LA1_: ;
	(*dest) = src;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_getFrameState)(TY_9cz21a9cnbG9b9c6T0dmg63LEw* Result) {
{	(*Result).Field0 = framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw;
	(*Result).Field1 = excHandler_rqLlY5bs9atDw2OXYqJEn5g;
	unsureAsgnRef((void**) (&(*Result).Field2), currException_9bVPeDJlYTi9bQApZpfH8wjg);
	goto BeforeRet_;
	}BeforeRet_: ;
}

static N_INLINE(void, asgnRef)(void** dest, void* src) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* T5_;
		if (!!((src == NIM_NIL))) goto LA3_;
		T5_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
		T5_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src);
		incRef_9cAA5YuQAAC3MVbnGeV86swsystem(T5_);
	}
	LA3_: ;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* T10_;
		if (!!(((*dest) == NIM_NIL))) goto LA8_;
		T10_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
		T10_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest));
		decRef_MV4BBk6J1qu70IbBxwEn4wsystem(T10_);
	}
	LA8_: ;
	(*dest) = src;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_setFrameState)(TY_9cz21a9cnbG9b9c6T0dmg63LEw state) {
	framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw = state.Field0;
	excHandler_rqLlY5bs9atDw2OXYqJEn5g = state.Field1;
	asgnRef((void**) (&currException_9bVPeDJlYTi9bQApZpfH8wjg), state.Field2);
}

N_LIB_EXPORT N_CDECL(TFrame*, nimrtl_getFrame)(void) {
	TFrame* result;
	result = (TFrame*)0;
	result = framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw;
	return result;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_popFrame)(void) {
	framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw = (*framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw).prev;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_setFrame)(TFrame* s) {
	framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw = s;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_pushSafePoint)(TSafePoint* s) {
	(*s).hasRaiseAction = NIM_FALSE;
	(*s).prev = excHandler_rqLlY5bs9atDw2OXYqJEn5g;
	excHandler_rqLlY5bs9atDw2OXYqJEn5g = s;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_popSafePoint)(void) {
	excHandler_rqLlY5bs9atDw2OXYqJEn5g = (*excHandler_rqLlY5bs9atDw2OXYqJEn5g).prev;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_pushCurrentException)(Exception* e) {
	asgnRef((void**) (&currException_9bVPeDJlYTi9bQApZpfH8wjg), e);
}

N_LIB_EXPORT N_CDECL(void, nimrtl_popCurrentException)(void) {
	asgnRef((void**) (&currException_9bVPeDJlYTi9bQApZpfH8wjg), NIM_NIL);
}

N_NOINLINE(NIM_BOOL, isObjSlowPath_k9bdq9bQE075AR7scLFt5wIg)(TNimType* obj, TNimType* subclass, TNimType** cache) {
	NIM_BOOL result;
	TNimType* x;
{	result = (NIM_BOOL)0;
	x = (*obj).base;
	{
		while (1) {
			if (!!((x == subclass))) goto LA2;
			{
				if (!(x == NIM_NIL)) goto LA5_;
				cache[(((NI) 0))- 0] = obj;
				result = NIM_FALSE;
				goto BeforeRet_;
			}
			LA5_: ;
			x = (*x).base;
		} LA2: ;
	}
	cache[(((NI) 1))- 0] = obj;
	result = NIM_TRUE;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

static N_INLINE(NIM_BOOL, isObjWithCache)(TNimType* obj, TNimType* subclass, TNimType** cache) {
	NIM_BOOL result;
{	result = (NIM_BOOL)0;
	{
		if (!(obj == subclass)) goto LA3_;
		result = NIM_TRUE;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!((*obj).base == subclass)) goto LA7_;
		result = NIM_TRUE;
		goto BeforeRet_;
	}
	LA7_: ;
	{
		if (!(cache[(((NI) 0))- 0] == obj)) goto LA11_;
		result = NIM_FALSE;
		goto BeforeRet_;
	}
	LA11_: ;
	{
		if (!(cache[(((NI) 1))- 0] == obj)) goto LA15_;
		result = NIM_TRUE;
		goto BeforeRet_;
	}
	LA15_: ;
	result = isObjSlowPath_k9bdq9bQE075AR7scLFt5wIg(obj, subclass, cache);
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NOINLINE(NI, stackSize_61foY5fGmU9c2fC9c6wRIsrA)(GcStack_7fytPA5bBsob6See21YMRA* stack) {
	NI result;
	void* volatile pos;
	result = (NI)0;
	pos = (void*)0;
	pos = ((void*) ((&pos)));
	{
		if (!!((pos == NIM_NIL))) goto LA3_;
		result = (NI)((NU32)(((NI) ((*stack).bottom))) - (NU32)(((NI) (pos))));
	}
	goto LA1_;
	LA3_: ;
	{
		result = ((NI) 0);
	}
	LA1_: ;
	return result;
}

N_NOINLINE(NI, stackSize_IV9bgfYkinlae0WZ2NZi5JA)(void) {
	NI result;
	result = (NI)0;
	{
		GcStack_7fytPA5bBsob6See21YMRA* stack;
		NI T2_;
		stack = (GcStack_7fytPA5bBsob6See21YMRA*)0;
		stack = (&gch_IcYaEuuWivYAS86vFMTS3Q.stack);
		T2_ = (NI)0;
		T2_ = stackSize_61foY5fGmU9c2fC9c6wRIsrA(stack);
		result = (NI)(result + T2_);
	}
	return result;
}

static N_INLINE(NI, getOccupiedMem_61WxanWSOmDDV2uI7O10dQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a) {
	NI result;
	result = (NI)0;
	result = (NI)((*a).currMem - (*a).freeMem);
	return result;
}

N_NIMCALL(NI, lowGauge_3mwQtFaBTgevFrybZdgUNw)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n) {
	NI result;
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* it;
	result = (NI)0;
	it = n;
	{
		while (1) {
			if (!!(((*it).link[(((NI) 0))- 0] == it))) goto LA2;
			result = (*it).key;
			it = (*it).link[(((NI) 0))- 0];
		} LA2: ;
	}
	return result;
}

N_NIMCALL(NI, highGauge_3mwQtFaBTgevFrybZdgUNw_2)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* n) {
	NI result;
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* it;
	result = (NI)0;
	result = ((NI) -1);
	it = n;
	{
		while (1) {
			if (!!(((*it).link[(((NI) 0))- 0] == it))) goto LA2;
			result = (*it).upperBound;
			it = (*it).link[(((NI) 1))- 0];
		} LA2: ;
	}
	return result;
}

static N_INLINE(void, prepareForInteriorPointerChecking_Zqr3EQAAcehIfp3uSECEuQsystem)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a) {
	(*a).minLargeObj = lowGauge_3mwQtFaBTgevFrybZdgUNw((*a).root);
	(*a).maxLargeObj = highGauge_3mwQtFaBTgevFrybZdgUNw_2((*a).root);
}

N_NIMCALL(void, setPosition_kuKlONPws1O0vpPB9adzcQw)(GcStack_7fytPA5bBsob6See21YMRA* stack, void* position) {
}

N_NIMCALL(AvlNode_IaqjtwKhxLEpvDS9bct9blEw*, inRange_Bc4Ua6HOMCIDGx9b15HSY4g)(AvlNode_IaqjtwKhxLEpvDS9bct9blEw* root, NI key) {
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* result;
	AvlNode_IaqjtwKhxLEpvDS9bct9blEw* it;
{	result = (AvlNode_IaqjtwKhxLEpvDS9bct9blEw*)0;
	it = root;
	{
		while (1) {
			if (!!(((*it).link[(((NI) 0))- 0] == it))) goto LA2;
			{
				NIM_BOOL T5_;
				T5_ = (NIM_BOOL)0;
				T5_ = ((NU32)((*it).key) <= (NU32)(key));
				if (!(T5_)) goto LA6_;
				T5_ = ((NU32)(key) < (NU32)((*it).upperBound));
				LA6_: ;
				if (!T5_) goto LA7_;
				result = it;
				goto BeforeRet_;
			}
			LA7_: ;
			it = (*it).link[(((NU32)((*it).key) < (NU32)(key)))- 0];
		} LA2: ;
	}
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(void*, interiorAllocatedPtr_N7XNyRgfMLnCjS9bVeVc3bA)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* a, void* p) {
	void* result;
	result = (void*)0;
	{
		NIM_BOOL T3_;
		BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c;
		T3_ = (NIM_BOOL)0;
		T3_ = isAccessible_5nqar3kL9acJcissrFLDdkwsystem(a, p);
		if (!T3_) goto LA4_;
		c = pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem(p);
		{
			NIM_BOOL T8_;
			T8_ = (NIM_BOOL)0;
			T8_ = chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system(c);
			if (!!(T8_)) goto LA9_;
			{
				NIM_BOOL T13_;
				SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c_2;
				NI offset;
				T13_ = (NIM_BOOL)0;
				T13_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(c);
				if (!T13_) goto LA14_;
				c_2 = ((SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*) (c));
				offset = (NI)((NU32)(((NI) ((NI)(((NI) (p)) & ((NI) 4095))))) - (NU32)((NI)(((NI)sizeof(SmallChunk_tXn60W2f8h3jgAYdEmy5NQ)) - ((NI) 8))));
				{
					FreeCell_u6M5LHprqzkn9axr04yg9bGQ* d;
					if (!((NU32)(offset) < (NU32)((*c_2).acc))) goto LA18_;
					d = ((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) ((NI)((NU32)((NI)((NU32)(((NI) ((&(*c_2).data)))) + (NU32)(offset))) - (NU32)((NI)((NU32)(offset) % (NU32)((*c_2).Sup.size))))));
					{
						if (!((NU32)(((NI) 1)) < (NU32)((*d).zeroField))) goto LA22_;
						result = ((void*) (d));
					}
					LA22_: ;
				}
				LA18_: ;
			}
			goto LA11_;
			LA14_: ;
			{
				BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_3;
				NF* d_2;
				c_3 = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (c));
				d_2 = (&(*c_3).data);
				{
					NIM_BOOL T27_;
					T27_ = (NIM_BOOL)0;
					T27_ = (((void*) (d_2)) <= p);
					if (!(T27_)) goto LA28_;
					T27_ = ((NU32)(((NI) 1)) < (NU32)((*((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) (d_2))).zeroField));
					LA28_: ;
					if (!T27_) goto LA29_;
					result = ((void*) (d_2));
				}
				LA29_: ;
			}
			LA11_: ;
		}
		LA9_: ;
	}
	goto LA1_;
	LA4_: ;
	{
		NI q;
		q = ((NI) (p));
		{
			NIM_BOOL T34_;
			AvlNode_IaqjtwKhxLEpvDS9bct9blEw* avlNode;
			T34_ = (NIM_BOOL)0;
			T34_ = ((NU32)((*a).minLargeObj) <= (NU32)(q));
			if (!(T34_)) goto LA35_;
			T34_ = ((NU32)(q) <= (NU32)((*a).maxLargeObj));
			LA35_: ;
			if (!T34_) goto LA36_;
			avlNode = inRange_Bc4Ua6HOMCIDGx9b15HSY4g((*a).root, q);
			{
				void* k;
				BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_4;
				BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* T42_;
				if (!!((avlNode == NIM_NIL))) goto LA40_;
				k = ((void*) ((*avlNode).key));
				T42_ = (BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*)0;
				T42_ = pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem(k);
				c_4 = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (T42_));
				{
					if (!((NU32)(((NI) 1)) < (NU32)((*((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) (k))).zeroField))) goto LA45_;
					result = k;
				}
				LA45_: ;
			}
			LA40_: ;
		}
		LA36_: ;
	}
	LA1_: ;
	return result;
}

static N_INLINE(void, gcMark_JLiT51Zk6OLnaexGSTHHEQsystem)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, void* p) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell;
	NI c;
	cell = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p);
	c = ((NI) (cell));
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* objStart;
		void* T5_;
		if (!((NU32)(((NI) 4096)) < (NU32)(c))) goto LA3_;
		T5_ = (void*)0;
		T5_ = interiorAllocatedPtr_N7XNyRgfMLnCjS9bVeVc3bA((&(*gch).region), ((void*) (cell)));
		objStart = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (T5_));
		{
			if (!!((objStart == NIM_NIL))) goto LA8_;
			(*objStart).refcount = (NI)((NU32)((*objStart).refcount) + (NU32)(((NI) 8)));
			add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem((&(*gch).decStack), objStart);
		}
		LA8_: ;
	}
	LA3_: ;
}

CLANG_NO_SANITIZE_ADDRESS void markStackAndRegisters_LdwvBL9bC9c0lik7K9bau9bX0Q(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	jmp_buf registers;
	GcStack_7fytPA5bBsob6See21YMRA* T1_;
	T1_ = (GcStack_7fytPA5bBsob6See21YMRA*)0;
	T1_ = getActiveStack_2XtoPjgvlHPkHLitAW2flw(gch);
	setPosition_kuKlONPws1O0vpPB9adzcQw(T1_, ((void*) ((&registers))));
	{
		int T4_;
		T4_ = (int)0;
		T4_ = setjmp(registers);
		if (!(T4_ == ((NI32) 0))) goto LA5_;
		{
			GcStack_7fytPA5bBsob6See21YMRA* stack;
			NI max;
			NI sp;
			stack = (GcStack_7fytPA5bBsob6See21YMRA*)0;
			stack = (&(*gch).stack);
			max = ((NI) ((*stack).bottom));
			sp = ((NI) ((&registers)));
			sp = (NI)(sp & ((NI) -4));
			{
				while (1) {
					if (!((NU32)(sp) < (NU32)((NI)(max - ((NI) 32))))) goto LA9;
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 0))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 1))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 2))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 3))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 4))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 5))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 6))- 0]);
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, ((void**) (sp))[(((NI) 7))- 0]);
					sp = (NI)((NU32)(sp) + (NU32)(((NI) 32)));
				} LA9: ;
			}
			{
				while (1) {
					if (!((NU32)(sp) <= (NU32)(max))) goto LA11;
					gcMark_JLiT51Zk6OLnaexGSTHHEQsystem(gch, (*((void**) (sp))));
					sp = (NI)((NU32)(sp) + (NU32)(((NI) 4)));
				} LA11: ;
			}
		}
	}
	LA5_: ;
}

N_NIMCALL(void, prepareDealloc_0Ao1u9cpV0dTuUB5G9cEQ8eQ)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell) {
	TNimType* t;
	t = (*cell).typ;
	{
		void* T5_;
		if (!!(((*t).finalizer == NIM_NIL))) goto LA3_;
		gch_IcYaEuuWivYAS86vFMTS3Q.recGcLock += ((NI) 1);
		T5_ = (void*)0;
		T5_ = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(cell);
		((Finalizer) ((*t).finalizer))(T5_);
		gch_IcYaEuuWivYAS86vFMTS3Q.recGcLock -= ((NI) 1);
	}
	LA3_: ;
}

N_NIMCALL(NIM_BOOL, collectZCT_evVbQ9bNF7LYMhoG9aWXu9bKw)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	NIM_BOOL result;
	NI* L;
	result = (NIM_BOOL)0;
	L = (&(*gch).zct.len);
	{
		while (1) {
			Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
			if (!(((NI) 0) < (*L))) goto LA2;
			c = (*gch).zct.d[(((NI) 0))- 0];
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			(*gch).zct.d[(((NI) 0))- 0] = (*gch).zct.d[((NI)((*L) - ((NI) 1)))- 0];
			(*L) -= ((NI) 1);
			{
				if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA5_;
				prepareDealloc_0Ao1u9cpV0dTuUB5G9cEQ8eQ(c);
				forAllChildren_yHFnLgI7q81iFxRlb3Iqlw(c, ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 2));
				rawDealloc_DA62HrGC5sdfCED505KyyQ((&(*gch).region), ((void*) (c)));
			}
			LA5_: ;
		} LA2: ;
	}
	result = NIM_TRUE;
	return result;
}

N_NIMCALL(void, deinit_WHgd5C59bkXWDz3vnAxfzXQ_3)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s) {
	PageDesc_fublkgIY4LG3mT51LU2WHg* it;
	it = (*s).head;
	{
		while (1) {
			PageDesc_fublkgIY4LG3mT51LU2WHg* n;
			if (!!((it == NIM_NIL))) goto LA2;
			n = (*it).next;
			nimrtl_dealloc(((void*) (it)));
			it = n;
		} LA2: ;
	}
	(*s).head = NIM_NIL;
	nimrtl_dealloc(((void*) ((*s).data)));
	(*s).data = NIM_NIL;
	(*s).counter = ((NI) 0);
}

N_NIMCALL(void, cellsetReset_WHgd5C59bkXWDz3vnAxfzXQ_2)(CellSet_jG87P0AI9aZtss9ccTYBIISQ* s) {
	deinit_WHgd5C59bkXWDz3vnAxfzXQ_3(s);
	init_WHgd5C59bkXWDz3vnAxfzXQ(s);
}

N_NIMCALL(void, markGlobals_zoTIuavlrCHyw3B8MBaLJA_4)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (globalMarkersLen_hgEFy3UCOBoalBh29asu5MA - 1);
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA3;
				i = res;
				globalMarkers_5ghwSgpo9cT9bT7YStQDJHVQ[(i)- 0]();
				res += ((NI) 1);
			} LA3: ;
		}
	}
	d = (*gch).additionalRoots.d;
	{
		NI i_2;
		NI colontmp__2;
		NI res_2;
		i_2 = (NI)0;
		colontmp__2 = (NI)0;
		colontmp__2 = ((*gch).additionalRoots.len - 1);
		res_2 = ((NI) 0);
		{
			while (1) {
				if (!(res_2 <= colontmp__2)) goto LA6;
				i_2 = res_2;
				markS_NZr5o3Ubzrci4OmK29cHBJA(gch, d[(i_2)- 0]);
				res_2 += ((NI) 1);
			} LA6: ;
		}
	}
}

static N_INLINE(NIM_BOOL, isCell_CkuKXXC4hAqaVj8vwjANDAsystem)(void* p) {
	NIM_BOOL result;
	result = (NIM_BOOL)0;
	result = ((NU32)(((NI) 1)) < (NU32)((*((FreeCell_u6M5LHprqzkn9axr04yg9bGQ*) (p))).zeroField));
	return result;
}

N_NIMCALL(NIM_BOOL, contains_9c4TZ2Zl3sU4TUeK9bR8E9ciw)(CellSet_jG87P0AI9aZtss9ccTYBIISQ s, Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell) {
	NIM_BOOL result;
	NI u;
	PageDesc_fublkgIY4LG3mT51LU2WHg* t;
	result = (NIM_BOOL)0;
	u = ((NI) (cell));
	t = cellSetGet_X4WTfs0wkld8wp8XcE9b8BA(s, (NI)((NU32)(u) >> (NU32)(((NI) 12))));
	{
		if (!!((t == NIM_NIL))) goto LA3_;
		u = ((NI) ((NI)((NU32)(((NI) ((NI)((NU32)(u) % (NU32)(((NI) 4096)))))) / (NU32)(((NI) 8)))));
		result = !(((NI)((*t).bits[((NI)((NU32)(u) >> (NU32)(((NI) 5))))- 0] & (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(u & ((NI) 31))))))) == ((NI) 0)));
	}
	goto LA1_;
	LA3_: ;
	{
		result = NIM_FALSE;
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void, freeCyclicCell_NZr5o3Ubzrci4OmK29cHBJA_2)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	prepareDealloc_0Ao1u9cpV0dTuUB5G9cEQ8eQ(c);
	rawDealloc_DA62HrGC5sdfCED505KyyQ((&(*gch).region), ((void*) (c)));
}

N_NIMCALL(void, sweep_zoTIuavlrCHyw3B8MBaLJA_5)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	{
		void* x;
		x = (void*)0;
		(*gch).region.locked = NIM_TRUE;
		{
			NI s;
			IntSet_EZObFrE3NC9bIb3YMkY9crZA colontmp_;
			s = (NI)0;
			memset((void*)(&colontmp_), 0, sizeof(colontmp_));
			colontmp_ = (*gch).region.chunkStarts;
			{
				NI h;
				NI res;
				h = (NI)0;
				res = ((NI) 0);
				{
					while (1) {
						Trunk_W0r8S0Y3UGke6T9bIUWnnuw* r;
						if (!(res <= ((NI) 255))) goto LA5;
						h = ((NI) (res));
						r = colontmp_.data[(h)- 0];
						{
							while (1) {
								NI i;
								if (!!((r == NIM_NIL))) goto LA7;
								i = ((NI) 0);
								{
									while (1) {
										NI w;
										NI j;
										if (!(i <= ((NI) 15))) goto LA9;
										w = (*r).bits[(i)- 0];
										j = ((NI) 0);
										{
											while (1) {
												if (!!((w == ((NI) 0)))) goto LA11;
												{
													if (!!((((NI) ((NI)(w & ((NI) 1)))) == ((NI) 0)))) goto LA14_;
													s = (NI)((NI)((NU32)((*r).key) << (NU32)(((NI) 9))) | (NI)((NU32)((NI)((NU32)(i) << (NU32)(((NI) 5)))) + (NU32)(j)));
													{
														NIM_BOOL T18_;
														BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c;
														T18_ = (NIM_BOOL)0;
														T18_ = contains_tGsWrN4DY41H9btt3FhjrNA((&(*gch).region.chunkStarts), s);
														if (!T18_) goto LA19_;
														c = ((BaseChunk_Sdq7WpT6qAH858F5ZEdG3w*) ((NI)((NU32)(s) << (NU32)(((NI) 12)))));
														{
															NIM_BOOL T23_;
															T23_ = (NIM_BOOL)0;
															T23_ = chunkUnused_xxNWShoyEPMUVN7FvfpDjw_2system(c);
															if (!!(T23_)) goto LA24_;
															{
																NIM_BOOL T28_;
																SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* c_2;
																NI size;
																NI a;
																NI limit;
																T28_ = (NIM_BOOL)0;
																T28_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(c);
																if (!T28_) goto LA29_;
																c_2 = ((SmallChunk_tXn60W2f8h3jgAYdEmy5NQ*) (c));
																size = (*c_2).Sup.size;
																a = ((NI) ((&(*c_2).data)));
																limit = (NI)(a + (*c_2).acc);
																{
																	while (1) {
																		if (!((NU32)(a) < (NU32)(limit))) goto LA32;
																		x = ((void*) (a));
																		{
																			NIM_BOOL T35_;
																			Cell_1zcF9cV8XIAtbN8h5HRUB8g* c_3;
																			T35_ = (NIM_BOOL)0;
																			T35_ = isCell_CkuKXXC4hAqaVj8vwjANDAsystem(x);
																			if (!T35_) goto LA36_;
																			c_3 = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (x));
																			{
																				NIM_BOOL T40_;
																				T40_ = (NIM_BOOL)0;
																				T40_ = contains_9c4TZ2Zl3sU4TUeK9bR8E9ciw((*gch).marked, c_3);
																				if (!!(T40_)) goto LA41_;
																				freeCyclicCell_NZr5o3Ubzrci4OmK29cHBJA_2(gch, c_3);
																			}
																			LA41_: ;
																		}
																		LA36_: ;
																		a = (NI)((NU32)(a) + (NU32)(size));
																	} LA32: ;
																}
															}
															goto LA26_;
															LA29_: ;
															{
																BigChunk_Rv9c70Uhp2TytkX7eH78qEg* c_4;
																c_4 = ((BigChunk_Rv9c70Uhp2TytkX7eH78qEg*) (c));
																x = ((void*) ((&(*c_4).data)));
																{
																	NIM_BOOL T46_;
																	Cell_1zcF9cV8XIAtbN8h5HRUB8g* c_5;
																	T46_ = (NIM_BOOL)0;
																	T46_ = isCell_CkuKXXC4hAqaVj8vwjANDAsystem(x);
																	if (!T46_) goto LA47_;
																	c_5 = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (x));
																	{
																		NIM_BOOL T51_;
																		T51_ = (NIM_BOOL)0;
																		T51_ = contains_9c4TZ2Zl3sU4TUeK9bR8E9ciw((*gch).marked, c_5);
																		if (!!(T51_)) goto LA52_;
																		freeCyclicCell_NZr5o3Ubzrci4OmK29cHBJA_2(gch, c_5);
																	}
																	LA52_: ;
																}
																LA47_: ;
															}
															LA26_: ;
														}
														LA24_: ;
													}
													LA19_: ;
												}
												LA14_: ;
												j += ((NI) 1);
												w = (NI)((NU32)(w) >> (NU32)(((NI) 1)));
											} LA11: ;
										}
										i += ((NI) 1);
									} LA9: ;
								}
								r = (*r).next;
							} LA7: ;
						}
						res += ((NI) 1);
					} LA5: ;
				}
			}
		}
		(*gch).region.locked = NIM_FALSE;
	}
}

N_NIMCALL(void, collectCycles_zoTIuavlrCHyw3B8MBaLJA_3)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
	{
		while (1) {
			NIM_BOOL T3_;
			if (!(((NI) 0) < (*gch).zct.len)) goto LA2;
			T3_ = (NIM_BOOL)0;
			T3_ = collectZCT_evVbQ9bNF7LYMhoG9aWXu9bKw(gch);
		} LA2: ;
	}
	cellsetReset_WHgd5C59bkXWDz3vnAxfzXQ_2((&(*gch).marked));
	d = (*gch).decStack.d;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)((*gch).decStack.len - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA6;
				i = res;
				markS_NZr5o3Ubzrci4OmK29cHBJA(gch, d[(i)- 0]);
				res += ((NI) 1);
			} LA6: ;
		}
	}
	markGlobals_zoTIuavlrCHyw3B8MBaLJA_4(gch);
	sweep_zoTIuavlrCHyw3B8MBaLJA_5(gch);
}

N_LIB_EXPORT N_CDECL(NI, nimrtl_getTotalMem)(void) {
	NI result;
{	result = (NI)0;
	result = gch_IcYaEuuWivYAS86vFMTS3Q.region.currMem;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_LIB_EXPORT N_CDECL(NI, nimrtl_getFreeMem)(void) {
	NI result;
	result = (NI)0;
	result = gch_IcYaEuuWivYAS86vFMTS3Q.region.freeMem;
	return result;
}

N_LIB_EXPORT N_CDECL(NI, nimrtl_getOccupiedMem)(void) {
	NI result;
	NI T1_;
	NI T2_;
{	result = (NI)0;
	T1_ = (NI)0;
	T1_ = nimrtl_getTotalMem();
	T2_ = (NI)0;
	T2_ = nimrtl_getFreeMem();
	result = (NI)(T1_ - T2_);
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(void, unmarkStackAndRegisters_zoTIuavlrCHyw3B8MBaLJA_6)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
	d = (*gch).decStack.d;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)((*gch).decStack.len - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA3;
				i = res;
				decRef_MV4BBk6J1qu70IbBxwEn4wsystem(d[(i)- 0]);
				res += ((NI) 1);
			} LA3: ;
		}
	}
	(*gch).decStack.len = ((NI) 0);
}

N_NIMCALL(void, collectCTBody_zoTIuavlrCHyw3B8MBaLJA_2)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	NI T1_;
	T1_ = (NI)0;
	T1_ = stackSize_IV9bgfYkinlae0WZ2NZi5JA();
	(*gch).stat.maxStackSize = (((*gch).stat.maxStackSize >= T1_) ? (*gch).stat.maxStackSize : T1_);
	prepareForInteriorPointerChecking_Zqr3EQAAcehIfp3uSECEuQsystem((&(*gch).region));
	markStackAndRegisters_LdwvBL9bC9c0lik7K9bau9bX0Q(gch);
	(*gch).stat.maxStackCells = (((*gch).stat.maxStackCells >= (*gch).decStack.len) ? (*gch).stat.maxStackCells : (*gch).decStack.len);
	(*gch).stat.stackScans += ((NI) 1);
	{
		NIM_BOOL T4_;
		T4_ = (NIM_BOOL)0;
		T4_ = collectZCT_evVbQ9bNF7LYMhoG9aWXu9bKw(gch);
		if (!T4_) goto LA5_;
		{
			NIM_BOOL T9_;
			NI T10_;
			NI T14_;
			T9_ = (NIM_BOOL)0;
			T10_ = (NI)0;
			T10_ = getOccupiedMem_61WxanWSOmDDV2uI7O10dQsystem((&(*gch).region));
			T9_ = ((*gch).cycleThreshold <= T10_);
			if (T9_) goto LA11_;
			T9_ = NIM_FALSE;
			LA11_: ;
			if (!T9_) goto LA12_;
			collectCycles_zoTIuavlrCHyw3B8MBaLJA_3(gch);
			(*gch).stat.cycleCollections += ((NI) 1);
			T14_ = (NI)0;
			T14_ = nimrtl_getOccupiedMem();
			(*gch).cycleThreshold = ((((NI) 4194304) >= (NI)(T14_ * ((NI) 2))) ? ((NI) 4194304) : (NI)(T14_ * ((NI) 2)));
			(*gch).stat.maxThreshold = (((*gch).stat.maxThreshold >= (*gch).cycleThreshold) ? (*gch).stat.maxThreshold : (*gch).cycleThreshold);
		}
		LA12_: ;
	}
	LA5_: ;
	unmarkStackAndRegisters_zoTIuavlrCHyw3B8MBaLJA_6(gch);
}

N_NIMCALL(void, collectCT_zoTIuavlrCHyw3B8MBaLJA)(GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	NI stackMarkCosts;
	NI T1_;
	T1_ = (NI)0;
	T1_ = stackSize_IV9bgfYkinlae0WZ2NZi5JA();
	stackMarkCosts = (((NI)(T1_ / ((NI) 64)) >= ((NI) 500)) ? (NI)(T1_ / ((NI) 64)) : ((NI) 500));
	{
		NIM_BOOL T4_;
		NIM_BOOL T5_;
		NIM_BOOL T6_;
		NIM_BOOL T8_;
		NI T10_;
		T4_ = (NIM_BOOL)0;
		T5_ = (NIM_BOOL)0;
		T6_ = (NIM_BOOL)0;
		T6_ = (stackMarkCosts <= (*gch).zct.len);
		if (T6_) goto LA7_;
		T8_ = (NIM_BOOL)0;
		T8_ = NIM_TRUE;
		if (!(T8_)) goto LA9_;
		T10_ = (NI)0;
		T10_ = getOccupiedMem_61WxanWSOmDDV2uI7O10dQsystem((&(*gch).region));
		T8_ = ((*gch).cycleThreshold <= T10_);
		LA9_: ;
		T6_ = T8_;
		LA7_: ;
		T5_ = T6_;
		if (T5_) goto LA11_;
		T5_ = NIM_FALSE;
		LA11_: ;
		T4_ = T5_;
		if (!(T4_)) goto LA12_;
		T4_ = ((*gch).recGcLock == ((NI) 0));
		LA12_: ;
		if (!T4_) goto LA13_;
		collectCTBody_zoTIuavlrCHyw3B8MBaLJA_2(gch);
	}
	LA13_: ;
}

static N_INLINE(void, addNewObjToZCT_Ga5iPZj9bPFJIiW7GQdxs7gsystem)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* res, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	NI L;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
{	L = (*gch).zct.len;
	d = (*gch).zct.d;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
		if (!(((NI) 8) < L)) goto LA3_;
		c = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
		c = d[((NI)(L - ((NI) 1)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA7_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 1)))- 0] = res;
			goto BeforeRet_;
		}
		LA7_: ;
		c = d[((NI)(L - ((NI) 2)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA11_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 2)))- 0] = res;
			goto BeforeRet_;
		}
		LA11_: ;
		c = d[((NI)(L - ((NI) 3)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA15_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 3)))- 0] = res;
			goto BeforeRet_;
		}
		LA15_: ;
		c = d[((NI)(L - ((NI) 4)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA19_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 4)))- 0] = res;
			goto BeforeRet_;
		}
		LA19_: ;
		c = d[((NI)(L - ((NI) 5)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA23_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 5)))- 0] = res;
			goto BeforeRet_;
		}
		LA23_: ;
		c = d[((NI)(L - ((NI) 6)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA27_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 6)))- 0] = res;
			goto BeforeRet_;
		}
		LA27_: ;
		c = d[((NI)(L - ((NI) 7)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA31_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 7)))- 0] = res;
			goto BeforeRet_;
		}
		LA31_: ;
		c = d[((NI)(L - ((NI) 8)))- 0];
		{
			if (!((NU32)(((NI) 8)) <= (NU32)((*c).refcount))) goto LA35_;
			(*c).refcount = (NI)((*c).refcount & ((NI) -5));
			d[((NI)(L - ((NI) 8)))- 0] = res;
			goto BeforeRet_;
		}
		LA35_: ;
		add_Wcf8r6MCjrJeJ3HSYwSp0Qsystem((&(*gch).zct), res);
	}
	goto LA1_;
	LA3_: ;
	{
		d[(L)- 0] = res;
		(*gch).zct.len += ((NI) 1);
	}
	LA1_: ;
	}BeforeRet_: ;
}

N_NIMCALL(void*, rawNewObj_QBPo5VW2O56Eeh8hPbQ7Pg)(TNimType* typ, NI size, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	void* result;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* res;
	void* T1_;
	result = (void*)0;
	collectCT_zoTIuavlrCHyw3B8MBaLJA(gch);
	T1_ = (void*)0;
	T1_ = rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg((&(*gch).region), (NI)(size + ((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))));
	res = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (T1_));
	(*res).typ = typ;
	(*res).refcount = ((NI) 4);
	addNewObjToZCT_Ga5iPZj9bPFJIiW7GQdxs7gsystem(res, gch);
	result = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(res);
	return result;
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_newObjNoInit)(TNimType* typ, NI size) {
	void* result;
	result = (void*)0;
	result = rawNewObj_QBPo5VW2O56Eeh8hPbQ7Pg(typ, size, (&gch_IcYaEuuWivYAS86vFMTS3Q));
	return result;
}

N_NIMCALL(NimStringDesc*, rawNewStringNoInit)(NI space) {
	NimStringDesc* result;
	NI s;
	void* T5_;
	result = (NimStringDesc*)0;
	s = space;
	{
		if (!(s < ((NI) 7))) goto LA3_;
		s = ((NI) 7);
	}
	LA3_: ;
	T5_ = (void*)0;
	T5_ = nimrtl_newObjNoInit((&strDesc_D0UzA4zsDu5tgpJQ9a9clXPg), (NI)((NI)(((NI)sizeof(TGenericSeq)) + s) + ((NI) 1)));
	result = ((NimStringDesc*) (T5_));
	(*result).Sup.reserved = s;
	return result;
}

N_NIMCALL(NimStringDesc*, toNimStr)(NCSTRING str, NI len) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = rawNewStringNoInit(len);
	(*result).Sup.len = len;
	copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((*result).data)), ((void*) (str)), ((NI) ((NI)(len + ((NI) 1)))));
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_cstrToNimstr)(NCSTRING str) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		if (!(((void*) (str)) == NIM_NIL)) goto LA3_;
		result = NIM_NIL;
	}
	goto LA1_;
	LA3_: ;
	{
		result = toNimStr(str, (str ? strlen(str) : 0));
	}
	LA1_: ;
	return result;
}
static N_NIMCALL(void, Marker_TY_HX2M9cQhE3jaovp9aYJDdslA)(void* p, NI op) {
	IOError_9czoZw3pzPyrBmb5zTHY1OQ* a;
	a = (IOError_9czoZw3pzPyrBmb5zTHY1OQ*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.trace, op);
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_newObj)(TNimType* typ, NI size) {
	void* result;
	result = (void*)0;
	result = rawNewObj_QBPo5VW2O56Eeh8hPbQ7Pg(typ, size, (&gch_IcYaEuuWivYAS86vFMTS3Q));
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(result, ((NI) (size)));
	return result;
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_newObjRC1)(TNimType* typ, NI size) {
	void* result;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* res;
	void* T1_;
	result = (void*)0;
	collectCT_zoTIuavlrCHyw3B8MBaLJA((&gch_IcYaEuuWivYAS86vFMTS3Q));
	T1_ = (void*)0;
	T1_ = rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg((&gch_IcYaEuuWivYAS86vFMTS3Q.region), (NI)(size + ((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))));
	res = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (T1_));
	(*res).typ = typ;
	(*res).refcount = ((NI) 8);
	result = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(res);
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(result, ((NI) (size)));
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_copyStringRC1)(NimStringDesc* src) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		NI s;
		void* T9_;
		if (!!((src == NIM_NIL))) goto LA3_;
		s = (*src).Sup.len;
		{
			if (!(s < ((NI) 7))) goto LA7_;
			s = ((NI) 7);
		}
		LA7_: ;
		T9_ = (void*)0;
		T9_ = nimrtl_newObjRC1((&strDesc_D0UzA4zsDu5tgpJQ9a9clXPg), (NI)((NI)(((NI)sizeof(TGenericSeq)) + s) + ((NI) 1)));
		result = ((NimStringDesc*) (T9_));
		(*result).Sup.reserved = s;
		(*result).Sup.len = (*src).Sup.len;
		copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((*result).data)), ((void*) ((*src).data)), ((NI) ((NI)((*src).Sup.len + ((NI) 1)))));
	}
	LA3_: ;
	return result;
}

static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
	c = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p);
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA3_;
		nimrtl_rtlAddZCT(c);
	}
	LA3_: ;
}

static N_INLINE(void, sysFatal_orK8PicRB9bj8BG69bF8HQbwsystem)(NimStringDesc* message) {
	IOError_9czoZw3pzPyrBmb5zTHY1OQ* e;
	NimStringDesc* T1_;
	e = (IOError_9czoZw3pzPyrBmb5zTHY1OQ*)0;
	e = (IOError_9czoZw3pzPyrBmb5zTHY1OQ*) nimrtl_newObj((&NTI_HX2M9cQhE3jaovp9aYJDdslA_), sizeof(IOError_9czoZw3pzPyrBmb5zTHY1OQ));
	(*e).Sup.Sup.Sup.m_type = (&NTI_9czoZw3pzPyrBmb5zTHY1OQ_);
	T1_ = (NimStringDesc*)0;
	T1_ = (*e).Sup.Sup.message; (*e).Sup.Sup.message = nimrtl_copyStringRC1(message);
	if (T1_) nimGCunrefNoCycle(T1_);
	nimrtl_raiseException((Exception*)e, "IOError");
}

N_NOINLINE(void, raiseEIO_PpfSiTIeNpMAb9a5o6SglJw)(NimStringDesc* msg) {
	sysFatal_orK8PicRB9bj8BG69bF8HQbwsystem(msg);
}

N_NIMCALL(void, checkErr_BWnr8V7RERYno9bIdPmw8Hw)(FILE* f) {
	{
		int T3_;
		T3_ = (int)0;
		T3_ = ferror(f);
		if (!!((T3_ == ((NI32) 0)))) goto LA4_;
		clearerr(f);
		raiseEIO_PpfSiTIeNpMAb9a5o6SglJw(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_8));
	}
	LA4_: ;
}

N_NIMCALL(void, write_ADGLlEJAOtGNWWur8rrJfg)(FILE* f, NCSTRING c) {
	int T1_;
	T1_ = (int)0;
	T1_ = fputs(c, f);
	checkErr_BWnr8V7RERYno9bIdPmw8Hw(f);
}

N_NIMCALL(void, writeToStdErr_7HRVfGfZT2rSmBdcLxl8TA)(NCSTRING msg) {
	write_ADGLlEJAOtGNWWur8rrJfg(stderr, msg);
}

N_NIMCALL(void, showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ)(NCSTRING data) {
	{
		NimStringDesc* T5_;
		if (!!((errorMessageWriter_ZXnv0JyrWe3HTd07wpSr7A == NIM_NIL))) goto LA3_;
		T5_ = (NimStringDesc*)0;
		T5_ = nimrtl_cstrToNimstr(data);
		errorMessageWriter_ZXnv0JyrWe3HTd07wpSr7A(T5_);
	}
	goto LA1_;
	LA3_: ;
	{
		writeToStdErr_7HRVfGfZT2rSmBdcLxl8TA(data);
	}
	LA1_: ;
}

static N_INLINE(void, quitOrDebug_IZ2oOmqdsYQ7vixQGKSDcA_2system)(void) {
	exit(((NI) 1));
}

N_NIMCALL(void, raiseExceptionAux_jP8mO9c3YubVoLarNIvGorQ)(Exception* e) {
{	{
		if (!!((localRaiseHook_EIvMhANBvB9cp2Ezvt29cADg == NIM_NIL))) goto LA3_;
		{
			NIM_BOOL T7_;
			T7_ = (NIM_BOOL)0;
			T7_ = localRaiseHook_EIvMhANBvB9cp2Ezvt29cADg(e);
			if (!!(T7_)) goto LA8_;
			goto BeforeRet_;
		}
		LA8_: ;
	}
	LA3_: ;
	{
		if (!!((globalRaiseHook_JbO1ti4ULxrw54m4zNPbpA == NIM_NIL))) goto LA12_;
		{
			NIM_BOOL T16_;
			T16_ = (NIM_BOOL)0;
			T16_ = globalRaiseHook_JbO1ti4ULxrw54m4zNPbpA(e);
			if (!!(T16_)) goto LA17_;
			goto BeforeRet_;
		}
		LA17_: ;
	}
	LA12_: ;
	{
		if (!!((excHandler_rqLlY5bs9atDw2OXYqJEn5g == NIM_NIL))) goto LA21_;
		{
			NIM_BOOL T25_;
			T25_ = (NIM_BOOL)0;
			T25_ = !((*excHandler_rqLlY5bs9atDw2OXYqJEn5g).hasRaiseAction);
			if (T25_) goto LA26_;
			T25_ = (*excHandler_rqLlY5bs9atDw2OXYqJEn5g).raiseAction.ClE_0? (*excHandler_rqLlY5bs9atDw2OXYqJEn5g).raiseAction.ClP_0(e, (*excHandler_rqLlY5bs9atDw2OXYqJEn5g).raiseAction.ClE_0):((TM_Q5wkpxktOdTGvlSRo9bzt9aw_6)((*excHandler_rqLlY5bs9atDw2OXYqJEn5g).raiseAction.ClP_0))(e);
			LA26_: ;
			if (!T25_) goto LA27_;
			nimrtl_pushCurrentException(e);
			longjmp((*excHandler_rqLlY5bs9atDw2OXYqJEn5g).context, ((int) 1));
		}
		LA27_: ;
	}
	goto LA19_;
	LA21_: ;
	{
		if (!(isObjWithCache((*e).Sup.m_type, (&NTI_NrupLB36t9bV7iFDHtrF69aw_), Nim_OfCheck_CACHE8))) goto LA30_;
		showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ((*e).name);
		quitOrDebug_IZ2oOmqdsYQ7vixQGKSDcA_2system();
	}
	goto LA19_;
	LA30_: ;
	{
		TY_gpc2RrLEcWgv7ONpLYNHOw buf;
		NI L;
		memset((void*)buf, 0, sizeof(buf));
		L = ((NI) 0);
		{
			if (!((NI)(L + ((NI) 28)) < ((NI) 2000))) goto LA35_;
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&buf[(L)- 0]))), "Error: unhandled exception: ", ((NI) 28));
			L += ((NI) 28);
		}
		LA35_: ;
		{
			if (!!(((*e).message == 0))) goto LA39_;
			{
				if (!((NI)(L + ((*e).message ? (*e).message->Sup.len : 0)) < ((NI) 2000))) goto LA43_;
				copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&buf[(L)- 0]))), ((void*) ((*e).message->data)), ((NI) (((*e).message ? (*e).message->Sup.len : 0))));
				L += ((*e).message ? (*e).message->Sup.len : 0);
			}
			LA43_: ;
		}
		LA39_: ;
		{
			if (!((NI)(L + ((NI) 2)) < ((NI) 2000))) goto LA47_;
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&buf[(L)- 0]))), " [", ((NI) 2));
			L += ((NI) 2);
		}
		LA47_: ;
		{
			if (!((NI)(L + ((*e).name ? strlen((*e).name) : 0)) < ((NI) 2000))) goto LA51_;
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&buf[(L)- 0]))), ((void*) ((*e).name)), ((NI) (((*e).name ? strlen((*e).name) : 0))));
			L += ((*e).name ? strlen((*e).name) : 0);
		}
		LA51_: ;
		{
			if (!((NI)(L + ((NI) 2)) < ((NI) 2000))) goto LA55_;
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&buf[(L)- 0]))), "]\012", ((NI) 2));
			L += ((NI) 2);
		}
		LA55_: ;
		showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ(((NCSTRING) (buf)));
		quitOrDebug_IZ2oOmqdsYQ7vixQGKSDcA_2system();
	}
	LA19_: ;
	}BeforeRet_: ;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_raiseException)(Exception* e, NCSTRING ename) {
	{
		if (!((*e).name == 0)) goto LA3_;
		(*e).name = ename;
	}
	LA3_: ;
	raiseExceptionAux_jP8mO9c3YubVoLarNIvGorQ(e);
}
static N_NIMCALL(void, Marker_TY_beOxjNaux3PfvyYBLMJh2A)(void* p, NI op) {
	ReraiseError_GRbrBa7JIulgD34jGcFb8w* a;
	a = (ReraiseError_GRbrBa7JIulgD34jGcFb8w*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.trace, op);
}

static N_INLINE(void, sysFatal_gu8AGlf3JTsS25q0fXJFMAsystem)(NimStringDesc* message) {
	ReraiseError_GRbrBa7JIulgD34jGcFb8w* e;
	NimStringDesc* T1_;
	e = (ReraiseError_GRbrBa7JIulgD34jGcFb8w*)0;
	e = (ReraiseError_GRbrBa7JIulgD34jGcFb8w*) nimrtl_newObj((&NTI_beOxjNaux3PfvyYBLMJh2A_), sizeof(ReraiseError_GRbrBa7JIulgD34jGcFb8w));
	(*e).Sup.Sup.m_type = (&NTI_GRbrBa7JIulgD34jGcFb8w_);
	T1_ = (NimStringDesc*)0;
	T1_ = (*e).Sup.message; (*e).Sup.message = nimrtl_copyStringRC1(message);
	if (T1_) nimGCunrefNoCycle(T1_);
	nimrtl_raiseException((Exception*)e, "ReraiseError");
}

N_LIB_EXPORT N_CDECL(void, nimrtl_reraiseException)(void) {
	{
		if (!(currException_9bVPeDJlYTi9bQApZpfH8wjg == NIM_NIL)) goto LA3_;
		sysFatal_gu8AGlf3JTsS25q0fXJFMAsystem(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_9));
	}
	goto LA1_;
	LA3_: ;
	{
		raiseExceptionAux_jP8mO9c3YubVoLarNIvGorQ(currException_9bVPeDJlYTi9bQApZpfH8wjg);
	}
	LA1_: ;
}

N_NIMCALL(void, writeStackTrace_njssp69aa7hvxte9bJ8uuDcg_2)(void) {
	showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ("No stack traceback available\012");
}

N_NOINLINE(void, stackOverflow_II46IjNZztN9bmbxUD8dt8g_2)(void) {
	writeStackTrace_njssp69aa7hvxte9bJ8uuDcg_2();
	showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ("Stack overflow\012");
	quitOrDebug_IZ2oOmqdsYQ7vixQGKSDcA_2system();
}

N_LIB_EXPORT N_CDECL(void, nimFrame)(TFrame* s) {
	NI T1_;
	T1_ = (NI)0;
	{
		if (!(framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw == NIM_NIL)) goto LA4_;
		T1_ = ((NI) 0);
	}
	goto LA2_;
	LA4_: ;
	{
		T1_ = ((NI) ((NI16)((*framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw).calldepth + ((NI16) 1))));
	}
	LA2_: ;
	(*s).calldepth = ((NI16) (T1_));
	(*s).prev = framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw;
	framePtr_HRfVMH3jYeBJz6Q6X9b6Ptw = s;
	{
		if (!((*s).calldepth == ((NI16) 2000))) goto LA9_;
		stackOverflow_II46IjNZztN9bmbxUD8dt8g_2();
	}
	LA9_: ;
}

N_NOCONV(void, signalHandler)(int sign) {
	NCSTRING msg;
	msg = (NCSTRING)0;
	{
		if (!(sign == ((int) 2))) goto LA3_;
		msg = "SIGINT: Interrupted by Ctrl-C.\012";
	}
	goto LA1_;
	LA3_: ;
	{
		if (!(sign == ((int) 11))) goto LA6_;
		msg = "SIGSEGV: Illegal storage access. (Attempt to read from nil\?)\012";
	}
	goto LA1_;
	LA6_: ;
	{
		if (!(sign == ((int) 6))) goto LA9_;
		msg = "SIGABRT: Abnormal termination.\012";
	}
	goto LA1_;
	LA9_: ;
	{
		if (!(sign == ((int) 8))) goto LA12_;
		msg = "SIGFPE: Arithmetic error.\012";
	}
	goto LA1_;
	LA12_: ;
	{
		if (!(sign == ((int) 4))) goto LA15_;
		msg = "SIGILL: Illegal operation.\012";
	}
	goto LA1_;
	LA15_: ;
	{
		if (!(sign == ((int) 11))) goto LA18_;
		msg = "SIGBUS: Illegal storage access. (Attempt to read from nil\?)\012";
	}
	goto LA1_;
	LA18_: ;
	{
		{
			{
				if (!(sign == ((int) 13))) goto LA24_;
				msg = "SIGPIPE: Pipe closed.\012";
				goto LA21;
			}
			LA24_: ;
			msg = "unknown signal\012";
		} LA21: ;
	}
	LA1_: ;
	showErrorMessage_rsUJ87b89bH0GlWKYL9c8wUQ(msg);
	exit(((NI) 1));
}

N_NIMCALL(void, registerSignalHandler_njssp69aa7hvxte9bJ8uuDcg_3)(void) {
	TY_lfH2drpqP9aSEAAjWgrYv8Q T1_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T2_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T3_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T4_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T5_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T6_;
	TY_lfH2drpqP9aSEAAjWgrYv8Q T7_;
	T1_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T1_ = signal(((int) 2), signalHandler);
	T2_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T2_ = signal(((int) 11), signalHandler);
	T3_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T3_ = signal(((int) 6), signalHandler);
	T4_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T4_ = signal(((int) 8), signalHandler);
	T5_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T5_ = signal(((int) 4), signalHandler);
	T6_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T6_ = signal(((int) 11), signalHandler);
	T7_ = (TY_lfH2drpqP9aSEAAjWgrYv8Q)0;
	T7_ = signal(((int) 13), signalHandler);
}

N_NIMCALL(NI, ptrSize_FVy3yH9cNo61BYTEPuP9awLA)(void* p) {
	NI result;
	void* x;
	BaseChunk_Sdq7WpT6qAH858F5ZEdG3w* c;
	result = (NI)0;
	x = ((void*) ((NI)((NU32)(((NI) (p))) - (NU32)(((NI)sizeof(FreeCell_u6M5LHprqzkn9axr04yg9bGQ))))));
	c = pageAddr_4uti7hTxTUDxUPqFMgMvHAsystem(p);
	result = (NI)((NU32)((*c).size) - (NU32)(((NI)sizeof(FreeCell_u6M5LHprqzkn9axr04yg9bGQ))));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = isSmallChunk_xxNWShoyEPMUVN7FvfpDjwsystem(c);
		if (!!(T3_)) goto LA4_;
		result -= (NI)(((NI)sizeof(BigChunk_Rv9c70Uhp2TytkX7eH78qEg)) - ((NI) 8));
	}
	LA4_: ;
	return result;
}

N_NIMCALL(void*, realloc_O21OiSxurjvup9cA55o9ae1A)(MemRegion_x81NhDv59b8ercDZ9bi85jyg* allocator, void* p, NI newsize) {
	void* result;
	result = (void*)0;
	{
		if (!(((NI) 0) < ((NI) (newsize)))) goto LA3_;
		result = alloc0_WDxgSWQ1mSIerfvC0kmUtg(allocator, newsize);
		{
			NI T9_;
			if (!!((p == NIM_NIL))) goto LA7_;
			T9_ = (NI)0;
			T9_ = ptrSize_FVy3yH9cNo61BYTEPuP9awLA(p);
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(result, p, ((NI) (((T9_ <= ((NI) (newsize))) ? T9_ : ((NI) (newsize))))));
			dealloc_jqYVOi4APb9cRx3G9a57AkRw(allocator, p);
		}
		LA7_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		if (!!((p == NIM_NIL))) goto LA11_;
		dealloc_jqYVOi4APb9cRx3G9a57AkRw(allocator, p);
	}
	goto LA1_;
	LA11_: ;
	LA1_: ;
	return result;
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_realloc)(void* p, NI newSize) {
	void* result;
	result = (void*)0;
	result = realloc_O21OiSxurjvup9cA55o9ae1A((&gch_IcYaEuuWivYAS86vFMTS3Q.region), p, newSize);
	return result;
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_allocShared)(NI size) {
	void* result;
	result = (void*)0;
	result = nimrtl_alloc(size);
	return result;
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_allocShared0)(NI size) {
	void* result;
	result = (void*)0;
	result = nimrtl_allocShared(size);
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(result, size);
	return result;
}

N_LIB_EXPORT N_NOCONV(void, nimrtl_deallocShared)(void* p) {
	nimrtl_dealloc(p);
}

N_LIB_EXPORT N_NOCONV(void*, nimrtl_reallocShared)(void* p, NI newSize) {
	void* result;
	result = (void*)0;
	result = nimrtl_realloc(p, newSize);
	return result;
}

N_NIMCALL(NI, getRefcount)(void* p) {
	NI result;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* T1_;
	result = (NI)0;
	T1_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
	T1_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p);
	result = (NI)((NU32)((*T1_).refcount) >> (NU32)(((NI) 3)));
	return result;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_rtlAddCycleRoot)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
}

N_NIMCALL(void, setPosition_plJQLEbXvFqZv6Phpo1t1w)(GcStack_7fytPA5bBsob6See21YMRA* stack, void* position) {
}

N_LIB_EXPORT N_NOINLINE(void, nimrtl_setStackBottom)(void* theStackBottom) {
	{
		if (!(gch_IcYaEuuWivYAS86vFMTS3Q.stack.bottom == NIM_NIL)) goto LA3_;
		gch_IcYaEuuWivYAS86vFMTS3Q.stack.bottom = theStackBottom;
	}
	goto LA1_;
	LA3_: ;
	{
		NI a;
		NI b;
		if (!!((theStackBottom == gch_IcYaEuuWivYAS86vFMTS3Q.stack.bottom))) goto LA6_;
		a = ((NI) (theStackBottom));
		b = ((NI) (gch_IcYaEuuWivYAS86vFMTS3Q.stack.bottom));
		gch_IcYaEuuWivYAS86vFMTS3Q.stack.bottom = ((void*) (((a >= b) ? a : b)));
	}
	goto LA1_;
	LA6_: ;
	LA1_: ;
	setPosition_plJQLEbXvFqZv6Phpo1t1w((&gch_IcYaEuuWivYAS86vFMTS3Q.stack), theStackBottom);
}
static N_NIMCALL(void, Marker_TY_6woiEp3hwhYMr1p5tjkZvA)(void* p, NI op) {
	OverflowError_I3Jtn27626sFBOls6BBQ2Q* a;
	a = (OverflowError_I3Jtn27626sFBOls6BBQ2Q*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.trace, op);
}

static N_INLINE(void, sysFatal_cjY6dGD4PiJNY9cmtw6Ay8Qsystem)(NimStringDesc* message) {
	OverflowError_I3Jtn27626sFBOls6BBQ2Q* e;
	NimStringDesc* T1_;
	e = (OverflowError_I3Jtn27626sFBOls6BBQ2Q*)0;
	e = (OverflowError_I3Jtn27626sFBOls6BBQ2Q*) nimrtl_newObj((&NTI_6woiEp3hwhYMr1p5tjkZvA_), sizeof(OverflowError_I3Jtn27626sFBOls6BBQ2Q));
	(*e).Sup.Sup.Sup.m_type = (&NTI_I3Jtn27626sFBOls6BBQ2Q_);
	T1_ = (NimStringDesc*)0;
	T1_ = (*e).Sup.Sup.message; (*e).Sup.Sup.message = nimrtl_copyStringRC1(message);
	if (T1_) nimGCunrefNoCycle(T1_);
	nimrtl_raiseException((Exception*)e, "OverflowError");
}

N_NOINLINE(void, raiseOverflow)(void) {
	sysFatal_cjY6dGD4PiJNY9cmtw6Ay8Qsystem(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_10));
}

static N_INLINE(NI, addInt)(NI a, NI b) {
	NI result;
{	result = (NI)0;
	result = (NI)((NU32)(a) + (NU32)(b));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = (((NI) 0) <= (NI)(result ^ a));
		if (T3_) goto LA4_;
		T3_ = (((NI) 0) <= (NI)(result ^ b));
		LA4_: ;
		if (!T3_) goto LA5_;
		goto BeforeRet_;
	}
	LA5_: ;
	raiseOverflow();
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NI, mulInt)(NI a, NI b) {
	NI result;
	NF resAsFloat;
	NF floatProd;
{	result = (NI)0;
	resAsFloat = (NF)0;
	floatProd = (NF)0;
	result = (NI)((NU32)(a) * (NU32)(b));
	floatProd = ((NF)(((double) (a))) * (NF)(((double) (b))));
	resAsFloat = ((double) (result));
	{
		if (!(resAsFloat == floatProd)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!(((NF)(3.2000000000000000e+01) * (NF)((((NF)(resAsFloat) - (NF)(floatProd)) < 0? -(((NF)(resAsFloat) - (NF)(floatProd))) : (((NF)(resAsFloat) - (NF)(floatProd)))))) <= (floatProd < 0? -(floatProd) : (floatProd)))) goto LA7_;
		goto BeforeRet_;
	}
	LA7_: ;
	raiseOverflow();
	}BeforeRet_: ;
	return result;
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_newSeq)(TNimType* typ, NI len) {
	void* result;
	NI size;
	NI T1_;
	result = (void*)0;
	T1_ = (NI)0;
	T1_ = mulInt(len, (*(*typ).base).size);
	size = addInt(T1_, ((NI) 8));
	result = nimrtl_newObj(typ, size);
	(*((TGenericSeq*) (result))).len = len;
	(*((TGenericSeq*) (result))).reserved = len;
	return result;
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_newSeqRC1)(TNimType* typ, NI len) {
	void* result;
	NI size;
	NI T1_;
	result = (void*)0;
	T1_ = (NI)0;
	T1_ = mulInt(len, (*(*typ).base).size);
	size = addInt(T1_, ((NI) 8));
	result = nimrtl_newObjRC1(typ, size);
	(*((TGenericSeq*) (result))).len = len;
	(*((TGenericSeq*) (result))).reserved = len;
	return result;
}

N_NIMCALL(void*, growObj_FZeyQYjWPcE9c06y1gNqZxw)(void* old, NI newsize, GcHeap_1TRH1TZMaVZTnLNcIHuNFQ* gch) {
	void* result;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* ol;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* res;
	void* T1_;
	NI elemSize;
	NI oldsize;
	result = (void*)0;
	collectCT_zoTIuavlrCHyw3B8MBaLJA(gch);
	ol = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(old);
	T1_ = (void*)0;
	T1_ = rawAlloc_yn9c8RLaS8vgVBeMBfmkdUg((&(*gch).region), (NI)(newsize + ((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))));
	res = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) (T1_));
	elemSize = ((NI) 1);
	{
		if (!!(((*(*ol).typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28)))) goto LA4_;
		elemSize = (*(*(*ol).typ).base).size;
	}
	LA4_: ;
	oldsize = (NI)((NI)((*((TGenericSeq*) (old))).len * elemSize) + ((NI) 8));
	copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) (res)), ((void*) (ol)), ((NI) ((NI)(oldsize + ((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))))));
	zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(((void*) ((NI)((NU32)((NI)((NU32)(((NI) (res))) + (NU32)(oldsize))) + (NU32)(((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g)))))), ((NI) ((NI)(newsize - oldsize))));
	{
		if (!((NU32)((NI)((NU32)((*ol).refcount) >> (NU32)(((NI) 3)))) <= (NU32)(((NI) 1)))) goto LA8_;
		{
			NI j;
			Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
			if (!!(((NI)((*ol).refcount & ((NI) 4)) == ((NI) 0)))) goto LA12_;
			j = (NI)((*gch).zct.len - ((NI) 1));
			d = (*gch).zct.d;
			{
				while (1) {
					if (!(((NI) 0) <= j)) goto LA15;
					{
						if (!(d[(j)- 0] == ol)) goto LA18_;
						d[(j)- 0] = res;
						goto LA14;
					}
					LA18_: ;
					j -= ((NI) 1);
				} LA15: ;
			} LA14: ;
		}
		LA12_: ;
		rawDealloc_DA62HrGC5sdfCED505KyyQ((&(*gch).region), ((void*) (ol)));
	}
	goto LA6_;
	LA8_: ;
	{
		(*res).refcount = ((NI) 8);
		decRef_MV4BBk6J1qu70IbBxwEn4wsystem(ol);
	}
	LA6_: ;
	result = cellToUsr_vA0UG8JLZvpzP1Xf3vkPgwsystem(res);
	return result;
}

N_LIB_EXPORT N_CDECL(void*, nimrtl_growObj)(void* old, NI newsize) {
	void* result;
	result = (void*)0;
	result = growObj_FZeyQYjWPcE9c06y1gNqZxw(old, newsize, (&gch_IcYaEuuWivYAS86vFMTS3Q));
	return result;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_disable)(void) {
	gch_IcYaEuuWivYAS86vFMTS3Q.recGcLock += ((NI) 1);
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_enable)(void) {
	{
		if (!(((NI) 0) < gch_IcYaEuuWivYAS86vFMTS3Q.recGcLock)) goto LA3_;
		gch_IcYaEuuWivYAS86vFMTS3Q.recGcLock -= ((NI) 1);
	}
	LA3_: ;
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_setStrategy)(GC_Strategy_dZWpEuKPYMLPbE41rs2EqQ strategy) {
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_enableMarkAndSweep)(void) {
	gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold = ((NI) 4194304);
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_disableMarkAndSweep)(void) {
	gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold = ((NI) 2147483646);
}

N_LIB_EXPORT N_CDECL(void, nimrtl_GC_fullCollect)(void) {
	NI oldThreshold;
	oldThreshold = gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold;
	gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold = ((NI) 0);
	collectCT_zoTIuavlrCHyw3B8MBaLJA((&gch_IcYaEuuWivYAS86vFMTS3Q));
	gch_IcYaEuuWivYAS86vFMTS3Q.cycleThreshold = oldThreshold;
}

static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
	copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((&(*dest).data[((*dest).Sup.len)- 0]))), ((void*) ((*src).data)), ((NI) ((NI)((*src).Sup.len + ((NI) 1)))));
	(*dest).Sup.len += (*src).Sup.len;
}

N_NIMCALL(NimStringDesc*, rawNewString)(NI space) {
	NimStringDesc* result;
	NI s;
	void* T5_;
	result = (NimStringDesc*)0;
	s = space;
	{
		if (!(s < ((NI) 7))) goto LA3_;
		s = ((NI) 7);
	}
	LA3_: ;
	T5_ = (void*)0;
	T5_ = nimrtl_newObj((&strDesc_D0UzA4zsDu5tgpJQ9a9clXPg), (NI)((NI)(((NI)sizeof(TGenericSeq)) + s) + ((NI) 1)));
	result = ((NimStringDesc*) (T5_));
	(*result).Sup.reserved = s;
	return result;
}

static N_INLINE(NI, resize_bzF9a0JivP3Z4njqaxuLc5wsystem)(NI old) {
	NI result;
	result = (NI)0;
	{
		if (!(old <= ((NI) 0))) goto LA3_;
		result = ((NI) 4);
	}
	goto LA1_;
	LA3_: ;
	{
		if (!(old < ((NI) 65536))) goto LA6_;
		result = (NI)(old * ((NI) 2));
	}
	goto LA1_;
	LA6_: ;
	{
		result = (NI)((NI)(old * ((NI) 3)) / ((NI) 2));
	}
	LA1_: ;
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_resizeString)(NimStringDesc* dest, NI addlen) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		if (!((NI)((*dest).Sup.len + addlen) <= ((NI) ((NI)((*dest).Sup.reserved & ((NI) 2147483647)))))) goto LA3_;
		result = dest;
	}
	goto LA1_;
	LA3_: ;
	{
		NI sp;
		NI T6_;
		void* T7_;
		T6_ = (NI)0;
		T6_ = resize_bzF9a0JivP3Z4njqaxuLc5wsystem(((NI) ((NI)((*dest).Sup.reserved & ((NI) 2147483647)))));
		sp = ((T6_ >= (NI)((*dest).Sup.len + addlen)) ? T6_ : (NI)((*dest).Sup.len + addlen));
		T7_ = (void*)0;
		T7_ = nimrtl_growObj(((void*) (dest)), (NI)((NI)(((NI)sizeof(TGenericSeq)) + sp) + ((NI) 1)));
		result = ((NimStringDesc*) (T7_));
		(*result).Sup.reserved = sp;
	}
	LA1_: ;
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_setLengthStr)(NimStringDesc* s, NI newLen) {
	NimStringDesc* result;
	NI n;
	result = (NimStringDesc*)0;
	n = ((newLen >= ((NI) 0)) ? newLen : ((NI) 0));
	{
		if (!(n <= ((NI) ((NI)((*s).Sup.reserved & ((NI) 2147483647)))))) goto LA3_;
		result = s;
	}
	goto LA1_;
	LA3_: ;
	{
		result = nimrtl_resizeString(s, n);
	}
	LA1_: ;
	(*result).Sup.len = n;
	(*result).data[(n)- 0] = 0;
	return result;
}

N_NIMCALL(void, add_IbYQ9cTcoQ89aIwM2IEYGMng)(NimStringDesc** result, NI64 x) {
	NI base;
	NI i;
	NI64 y;
	base = ((*result) ? (*result)->Sup.len : 0);
	(*result) = nimrtl_setLengthStr((*result), ((NI) ((NI)(base + ((NI) 32)))));
	i = ((NI) 0);
	y = x;
	{
		while (1) {
			NI64 d;
			d = (NI64)(y / IL64(10));
			(*result)->data[(NI)(base + i)] = ((NIM_CHAR) (((NI) ((NI)((((NI) ((NI64)(y - (NI64)(d * IL64(10))))) > 0? (((NI) ((NI64)(y - (NI64)(d * IL64(10)))))) : -(((NI) ((NI64)(y - (NI64)(d * IL64(10))))))) + ((NI) 48))))));
			i += ((NI) 1);
			y = d;
			{
				if (!(y == IL64(0))) goto LA5_;
				goto LA1;
			}
			LA5_: ;
		}
	} LA1: ;
	{
		if (!(x < IL64(0))) goto LA9_;
		(*result)->data[(NI)(base + i)] = 45;
		i += ((NI) 1);
	}
	LA9_: ;
	(*result) = nimrtl_setLengthStr((*result), ((NI) ((NI)(base + i))));
	{
		NI j;
		NI colontmp_;
		NI res;
		j = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)((NI)(i / ((NI) 2)) - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				NIM_CHAR T14_;
				if (!(res <= colontmp_)) goto LA13;
				j = res;
				T14_ = (NIM_CHAR)0;
				T14_ = (*result)->data[(NI)(base + j)];
				(*result)->data[(NI)(base + j)] = (*result)->data[(NI)((NI)((NI)(base + i) - j) - ((NI) 1))];
				(*result)->data[(NI)((NI)((NI)(base + i) - j) - ((NI) 1))] = T14_;
				res += ((NI) 1);
			} LA13: ;
		}
	}
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimIntToStr)(NI x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = rawNewString(((NI) 16));
	add_IbYQ9cTcoQ89aIwM2IEYGMng((&result), ((NI64) (x)));
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimInt64ToStr)(NI64 x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = rawNewString(((NI) 32));
	add_IbYQ9cTcoQ89aIwM2IEYGMng((&result), x);
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_GC_getStatistics)(void) {
	NimStringDesc* result;
	NimStringDesc* T1_;
	NI T2_;
	NimStringDesc* T3_;
	NI T4_;
	NimStringDesc* T5_;
	NimStringDesc* T6_;
	NimStringDesc* T7_;
	NimStringDesc* T8_;
	NimStringDesc* T9_;
	NimStringDesc* T10_;
	NimStringDesc* T11_;
	NimStringDesc* T12_;
	NimStringDesc* T13_;
	NimStringDesc* T14_;
	result = (NimStringDesc*)0;
	nimrtl_GC_disable();
	T1_ = (NimStringDesc*)0;
	T2_ = (NI)0;
	T2_ = nimrtl_getTotalMem();
	T3_ = (NimStringDesc*)0;
	T3_ = nimrtl_nimIntToStr(T2_);
	T4_ = (NI)0;
	T4_ = nimrtl_getOccupiedMem();
	T5_ = (NimStringDesc*)0;
	T5_ = nimrtl_nimIntToStr(T4_);
	T6_ = (NimStringDesc*)0;
	T6_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.stackScans);
	T7_ = (NimStringDesc*)0;
	T7_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxStackCells);
	T8_ = (NimStringDesc*)0;
	T8_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.cycleCollections);
	T9_ = (NimStringDesc*)0;
	T9_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxThreshold);
	T10_ = (NimStringDesc*)0;
	T10_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.zct.cap);
	T11_ = (NimStringDesc*)0;
	T11_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.cycleTableSize);
	T12_ = (NimStringDesc*)0;
	T12_ = nimrtl_nimInt64ToStr((NI64)(gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxPause / IL64(1000000)));
	T1_ = rawNewString(T3_->Sup.len + T5_->Sup.len + T6_->Sup.len + T7_->Sup.len + T8_->Sup.len + T9_->Sup.len + T10_->Sup.len + T11_->Sup.len + T12_->Sup.len + 202);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_11));
appendString(T1_, T3_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_12));
appendString(T1_, T5_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_13));
appendString(T1_, T6_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_14));
appendString(T1_, T7_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_15));
appendString(T1_, T8_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_16));
appendString(T1_, T9_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_17));
appendString(T1_, T10_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_18));
appendString(T1_, T11_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_19));
appendString(T1_, T12_);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_20));
	result = T1_;
	T13_ = (NimStringDesc*)0;
	T14_ = (NimStringDesc*)0;
	T14_ = nimrtl_nimIntToStr(gch_IcYaEuuWivYAS86vFMTS3Q.stat.maxStackSize);
	T13_ = rawNewString(result->Sup.len + T14_->Sup.len + 22);
appendString(T13_, result);
appendString(T13_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_21));
appendString(T13_, T14_);
appendString(T13_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_20));
	result = T13_;
	nimrtl_GC_enable();
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_copyString)(NimStringDesc* src) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		if (!!((src == NIM_NIL))) goto LA3_;
		{
			if (!!(((NI)((*src).Sup.reserved & ((NI) (-2147483647 -1))) == ((NI) 0)))) goto LA7_;
			result = src;
		}
		goto LA5_;
		LA7_: ;
		{
			result = rawNewStringNoInit((*src).Sup.len);
			(*result).Sup.len = (*src).Sup.len;
			copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((*result).data)), ((void*) ((*src).data)), ((NI) ((NI)((*src).Sup.len + ((NI) 1)))));
		}
		LA5_: ;
	}
	LA3_: ;
	return result;
}

N_NIMCALL(TNimType*, extGetCellType)(void* c) {
	TNimType* result;
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* T1_;
	result = (TNimType*)0;
	T1_ = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
	T1_ = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(c);
	result = (*T1_).typ;
	return result;
}

N_LIB_EXPORT N_CDECL(TGenericSeq*, nimrtl_setLengthSeq)(TGenericSeq* seq, NI elemSize, NI newLen) {
	TGenericSeq* result;
	result = (TGenericSeq*)0;
	result = seq;
	{
		NI T5_;
		void* T6_;
		if (!(((NI) ((NI)((*result).reserved & ((NI) 2147483647)))) < newLen)) goto LA3_;
		T5_ = (NI)0;
		T5_ = resize_bzF9a0JivP3Z4njqaxuLc5wsystem(((NI) ((NI)((*result).reserved & ((NI) 2147483647)))));
		(*result).reserved = ((T5_ >= newLen) ? T5_ : newLen);
		T6_ = (void*)0;
		T6_ = nimrtl_growObj(((void*) (result)), (NI)((NI)(elemSize * (*result).reserved) + ((NI) 8)));
		result = ((TGenericSeq*) (T6_));
	}
	goto LA1_;
	LA3_: ;
	{
		if (!(newLen < (*result).len)) goto LA8_;
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*result).len - ((NI) 1));
			res = newLen;
			{
				while (1) {
					TNimType* T13_;
					if (!(res <= colontmp_)) goto LA12;
					i = res;
					T13_ = (TNimType*)0;
					T13_ = extGetCellType(((void*) (result)));
					forAllChildrenAux_YOI1Uo54H9aas13WthjhsfA(((void*) ((NI)((NU32)((NI)((NU32)(((NI) (result))) + (NU32)(((NI) 8)))) + (NU32)((NI)((NU32)(i) * (NU32)(elemSize)))))), (*T13_).base, ((WalkOp_Wfy7gT5VQ8B3aJBxqU8D9cQ) 2));
					res += ((NI) 1);
				} LA12: ;
			}
		}
		zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(((void*) ((NI)((NU32)((NI)((NU32)(((NI) (result))) + (NU32)(((NI) 8)))) + (NU32)((NI)((NU32)(newLen) * (NU32)(elemSize)))))), ((NI) ((NI)((NU32)((NI)((NU32)((*result).len) - (NU32)(newLen))) * (NU32)(elemSize)))));
	}
	goto LA1_;
	LA8_: ;
	LA1_: ;
	(*result).len = newLen;
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimBoolToStr)(NIM_BOOL x) {
	NimStringDesc* result;
{	result = (NimStringDesc*)0;
	{
		if (!x) goto LA3_;
		result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_22));
	}
	goto LA1_;
	LA3_: ;
	{
		result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_23));
	}
	LA1_: ;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, mnewString)(NI len) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = rawNewString(len);
	(*result).Sup.len = len;
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_nimCharToStr)(NIM_CHAR x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = mnewString(((NI) 1));
	result->data[((NI) 0)] = x;
	return result;
}

N_NIMCALL(void, initReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA)(ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	init_WHgd5C59bkXWDz3vnAxfzXQ((&(*cl).marked));
	(*cl).recdepth = ((NI) -1);
	(*cl).indent = ((NI) 0);
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprEnum)(NI e, TNimType* typ) {
	NimStringDesc* result;
	TNimNode* n;
	NimStringDesc* T19_;
	NimStringDesc* T20_;
{	result = (NimStringDesc*)0;
	n = (*typ).node;
	{
		NI o;
		if (!!((((*typ).flags &(1U<<((NU)(((TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ) 2))&7U)))!=0))) goto LA3_;
		o = (NI)(e - (*(*n).sons[(((NI) 0))- 0]).offset);
		{
			NIM_BOOL T7_;
			T7_ = (NIM_BOOL)0;
			T7_ = (((NI) 0) <= o);
			if (!(T7_)) goto LA8_;
			T7_ = ((NU32)(o) < (NU32)((*(*typ).node).len));
			LA8_: ;
			if (!T7_) goto LA9_;
			result = nimrtl_cstrToNimstr((*(*n).sons[(o)- 0]).name);
			goto BeforeRet_;
		}
		LA9_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		TNimNode** s;
		s = (*n).sons;
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*n).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA14;
					i = res;
					{
						if (!((*s[(i)- 0]).offset == e)) goto LA17_;
						result = nimrtl_cstrToNimstr((*s[(i)- 0]).name);
						goto BeforeRet_;
					}
					LA17_: ;
					res += ((NI) 1);
				} LA14: ;
			}
		}
	}
	LA1_: ;
	T19_ = (NimStringDesc*)0;
	T20_ = (NimStringDesc*)0;
	T20_ = nimrtl_nimIntToStr(e);
	T19_ = rawNewString(T20_->Sup.len + 16);
appendString(T19_, T20_);
appendString(T19_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_28));
	result = T19_;
	}BeforeRet_: ;
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprBool)(NIM_BOOL x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		if (!x) goto LA3_;
		result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_22));
	}
	goto LA1_;
	LA3_: ;
	{
		result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_23));
	}
	LA1_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, reprInt)(NI64 x) {
	NimStringDesc* result;
{	result = (NimStringDesc*)0;
	result = nimrtl_nimInt64ToStr(x);
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = s;
	{
		void* T5_;
		if (!(((NI) ((NI)((*result).Sup.reserved & ((NI) 2147483647)))) <= (*result).Sup.len)) goto LA3_;
		(*result).Sup.reserved = resize_bzF9a0JivP3Z4njqaxuLc5wsystem(((NI) ((NI)((*result).Sup.reserved & ((NI) 2147483647)))));
		T5_ = (void*)0;
		T5_ = nimrtl_growObj(((void*) (result)), (NI)((NI)(((NI)sizeof(TGenericSeq)) + (*result).Sup.reserved) + ((NI) 1)));
		result = ((NimStringDesc*) (T5_));
	}
	LA3_: ;
	(*result).data[((*result).Sup.len)- 0] = c;
	(*result).data[((NI)((*result).Sup.len + ((NI) 1)))- 0] = 0;
	(*result).Sup.len += ((NI) 1);
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprChar)(NIM_CHAR x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_29));
	switch (((NU8)(x))) {
	case 34:
	{
		result = nimrtl_resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_30));
	}
	break;
	case 92:
	{
		result = nimrtl_resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_31));
	}
	break;
	case 128 ... 255:
	case 0 ... 31:
	{
		NimStringDesc* T4_;
		NimStringDesc* T5_;
		T4_ = (NimStringDesc*)0;
		T5_ = (NimStringDesc*)0;
		T5_ = reprInt(((NI64) (((NU8)(x)))));
		T4_ = rawNewString(T5_->Sup.len + 1);
appendString(T4_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_32));
appendString(T4_, T5_);
		result = nimrtl_resizeString(result, T4_->Sup.len + 0);
appendString(result, T4_);
	}
	break;
	default:
	{
		result = addChar(result, x);
	}
	break;
	}
	result = nimrtl_resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_29));
	return result;
}

N_NIMCALL(void, addSetElem_Kn6x9bywsw6UYG9beY19cFc8Q)(NimStringDesc** result, NI elem, TNimType* typ) {
	switch ((*typ).kind) {
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 14):
	{
		NimStringDesc* T2_;
		T2_ = (NimStringDesc*)0;
		T2_ = nimrtl_reprEnum(elem, typ);
		(*result) = nimrtl_resizeString((*result), T2_->Sup.len + 0);
appendString((*result), T2_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 1):
	{
		NimStringDesc* T4_;
		T4_ = (NimStringDesc*)0;
		T4_ = nimrtl_reprBool(((NIM_BOOL) (elem)));
		(*result) = nimrtl_resizeString((*result), T4_->Sup.len + 0);
appendString((*result), T4_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 2):
	{
		NimStringDesc* T6_;
		T6_ = (NimStringDesc*)0;
		T6_ = nimrtl_reprChar(((NIM_CHAR) (((NI) (elem)))));
		(*result) = nimrtl_resizeString((*result), T6_->Sup.len + 0);
appendString((*result), T6_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 20):
	{
		addSetElem_Kn6x9bywsw6UYG9beY19cFc8Q(result, elem, (*typ).base);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 31) ... ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 35):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 41):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 42):
	{
		NimStringDesc* T9_;
		T9_ = (NimStringDesc*)0;
		T9_ = reprInt(((NI64) (elem)));
		(*result) = nimrtl_resizeString((*result), T9_->Sup.len + 0);
appendString((*result), T9_);
	}
	break;
	default:
	{
		(*result) = nimrtl_resizeString((*result), 16);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_28));
	}
	break;
	}
}

N_NIMCALL(void, reprSetAux_hUJOLGug9apUf00OJCE66qg)(NimStringDesc** result, void* p, TNimType* typ) {
	NI elemCounter;
	NI64 u;
	elemCounter = ((NI) 0);
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_26));
	u = (NI64)0;
	switch ((*typ).size) {
	case ((NI) 1):
	{
		u = ((NI64)(NU64)(NU8)((*((NI8*) (p)))));
	}
	break;
	case ((NI) 2):
	{
		u = ((NI64)(NU64)(NU16)((*((NI16*) (p)))));
	}
	break;
	case ((NI) 4):
	{
		u = ((NI64)(NU64)(NU32)((*((NI32*) (p)))));
	}
	break;
	case ((NI) 8):
	{
		u = (*((NI64*) (p)));
	}
	break;
	default:
	{
		NI8* a;
		a = ((NI8*) (p));
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((NI)((*typ).size * ((NI) 8)) - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA8;
					i = res;
					{
						if (!!(((NI)(((NI)(NU)(NU8)(a[((NI)(i / ((NI) 8)))- 0])) & (NI)((NU32)(((NI) 1)) << (NU32)(((NI) ((NI)(i % ((NI) 8))))))) == ((NI) 0)))) goto LA11_;
						{
							if (!(((NI) 0) < elemCounter)) goto LA15_;
							(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_27));
						}
						LA15_: ;
						addSetElem_Kn6x9bywsw6UYG9beY19cFc8Q(result, (NI)(i + (*(*typ).node).len), (*typ).base);
						elemCounter += ((NI) 1);
					}
					LA11_: ;
					res += ((NI) 1);
				} LA8: ;
			}
		}
	}
	break;
	}
	{
		if (!((*typ).size <= ((NI) 8))) goto LA19_;
		{
			NI i_2;
			NI res_2;
			i_2 = (NI)0;
			res_2 = ((NI) 0);
			{
				while (1) {
					if (!(res_2 <= ((NI) 63))) goto LA23;
					i_2 = res_2;
					{
						if (!!(((NI64)(u & (NI64)((NU64)(IL64(1)) << (NU64)(((NI64) (i_2))))) == IL64(0)))) goto LA26_;
						{
							if (!(((NI) 0) < elemCounter)) goto LA30_;
							(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_27));
						}
						LA30_: ;
						addSetElem_Kn6x9bywsw6UYG9beY19cFc8Q(result, (NI)(i_2 + (*(*typ).node).len), (*typ).base);
						elemCounter += ((NI) 1);
					}
					LA26_: ;
					res_2 += ((NI) 1);
				} LA23: ;
			}
		}
	}
	LA19_: ;
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_33));
}

N_NIMCALL(void, reprArray_e9bayrEsuZxZS2R51iDjmHQ_2)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	NI bs;
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_34));
	bs = (*(*typ).base).size;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)((NI)((*typ).size / bs) - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA3;
				i = res;
				{
					if (!(((NI) 0) < i)) goto LA6_;
					(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_27));
				}
				LA6_: ;
				reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, ((void*) ((NI)(((NI) (p)) + (NI)(i * bs)))), (*typ).base, cl);
				res += ((NI) 1);
			} LA3: ;
		}
	}
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_35));
}

N_NIMCALL(void, reprRecordAux_DwhuG4GTpS9cHlrxP9c9cKltQ)(NimStringDesc** result, void* p, TNimNode* n, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	switch ((*n).kind) {
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 0):
	{
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 1):
	{
		NimStringDesc* T3_;
		T3_ = (NimStringDesc*)0;
		T3_ = nimrtl_cstrToNimstr((*n).name);
		(*result) = nimrtl_resizeString((*result), T3_->Sup.len + 0);
appendString((*result), T3_);
		(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_36));
		reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, ((void*) ((NI)(((NI) (p)) + (*n).offset))), (*n).typ, cl);
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 2):
	{
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*n).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA7;
					i = res;
					{
						if (!(((NI) 0) < i)) goto LA10_;
						(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_37));
					}
					LA10_: ;
					reprRecordAux_DwhuG4GTpS9cHlrxP9c9cKltQ(result, p, (*n).sons[(i)- 0], cl);
					res += ((NI) 1);
				} LA7: ;
			}
		}
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 3):
	{
		TNimNode* m;
		m = selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ(p, n);
		reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, ((void*) ((NI)(((NI) (p)) + (*n).offset))), (*n).typ, cl);
		{
			if (!!((m == NIM_NIL))) goto LA15_;
			reprRecordAux_DwhuG4GTpS9cHlrxP9c9cKltQ(result, p, m, cl);
		}
		LA15_: ;
	}
	break;
	}
}

N_NIMCALL(void, reprRecord_e9bayrEsuZxZS2R51iDjmHQ_3)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	TNimType* curTyp;
	NIM_BOOL first;
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_34));
	curTyp = typ;
	first = NIM_TRUE;
	{
		while (1) {
			NimStringDesc* part;
			if (!!((curTyp == NIM_NIL))) goto LA2;
			part = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_24));
			reprRecordAux_DwhuG4GTpS9cHlrxP9c9cKltQ((&part), p, (*curTyp).node, cl);
			{
				if (!(((NI) 0) < (part ? part->Sup.len : 0))) goto LA5_;
				{
					if (!!(first)) goto LA9_;
					(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_37));
				}
				LA9_: ;
				(*result) = nimrtl_resizeString((*result), part->Sup.len + 0);
appendString((*result), part);
				first = NIM_FALSE;
			}
			LA5_: ;
			curTyp = (*curTyp).base;
		} LA2: ;
	}
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_35));
}

N_NIMCALL(NimStringDesc*, reprPointer)(void* x) {
	NimStringDesc* result;
	TY_JpYObICIkqkM7eHG4jy19aw buf;
	int T1_;
{	result = (NimStringDesc*)0;
	memset((void*)buf, 0, sizeof(buf));
	T1_ = (int)0;
	T1_ = sprintf(((NCSTRING) (buf)), "%p", x);
	result = nimrtl_cstrToNimstr(((NCSTRING) (buf)));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(void, reprRef_e9bayrEsuZxZS2R51iDjmHQ_4)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* cell;
	NimStringDesc* T1_;
	NimStringDesc* T2_;
	cell = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(p);
	T1_ = (NimStringDesc*)0;
	T2_ = (NimStringDesc*)0;
	T2_ = reprPointer(p);
	T1_ = rawNewString(T2_->Sup.len + 4);
appendString(T1_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_39));
appendString(T1_, T2_);
	(*result) = nimrtl_resizeString((*result), T1_->Sup.len + 0);
appendString((*result), T1_);
	{
		NIM_BOOL T5_;
		T5_ = (NIM_BOOL)0;
		T5_ = contains_9c4TZ2Zl3sU4TUeK9bR8E9ciw((*cl).marked, cell);
		if (!!(T5_)) goto LA6_;
		incl_m4q9b16kJJcoKe9c4ERtlpCg((&(*cl).marked), cell);
		(*result) = nimrtl_resizeString((*result), 5);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_40));
		reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, p, (*typ).base, cl);
	}
	LA6_: ;
}

N_NIMCALL(void, reprSequence_e9bayrEsuZxZS2R51iDjmHQ_5)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	NimStringDesc* T5_;
	NimStringDesc* T6_;
	NI bs;
{	{
		if (!(p == NIM_NIL)) goto LA3_;
		(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_38));
		goto BeforeRet_;
	}
	LA3_: ;
	T5_ = (NimStringDesc*)0;
	T6_ = (NimStringDesc*)0;
	T6_ = reprPointer(p);
	T5_ = rawNewString(T6_->Sup.len + 1);
appendString(T5_, T6_);
appendString(T5_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_34));
	(*result) = nimrtl_resizeString((*result), T5_->Sup.len + 0);
appendString((*result), T5_);
	bs = (*(*typ).base).size;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)((*((TGenericSeq*) (p))).len - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA9;
				i = res;
				{
					if (!(((NI) 0) < i)) goto LA12_;
					(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_27));
				}
				LA12_: ;
				reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, ((void*) ((NI)((NI)(((NI) (p)) + ((NI) 8)) + (NI)(i * bs)))), (*typ).base, cl);
				res += ((NI) 1);
			} LA9: ;
		}
	}
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_35));
	}BeforeRet_: ;
}

N_NIMCALL(NimStringDesc*, dollar__rzAI8EMyNBAQwGODeohhAA)(NU64 x) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	{
		if (!(x == ((NI) 0))) goto LA3_;
		result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_41));
	}
	goto LA1_;
	LA3_: ;
	{
		TY_JpYObICIkqkM7eHG4jy19aw buf;
		NI i;
		NU64 n;
		NI half;
		memset((void*)buf, 0, sizeof(buf));
		i = ((NI) 0);
		n = x;
		{
			while (1) {
				NU64 nn;
				if (!!((n == ((NI) 0)))) goto LA7;
				nn = (NU64)((NU64)(n) / (NU64)(10ULL));
				buf[(i)- 0] = ((NIM_CHAR) ((NU64)((NU64)((NU64)((NU64)(n) - (NU64)((NU64)((NU64)(10ULL) * (NU64)(nn))))) + (NU64)(((NI) 48)))));
				i += ((NI) 1);
				n = nn;
			} LA7: ;
		}
		half = (NI)(i / ((NI) 2));
		{
			NI t;
			NI colontmp_;
			NI res;
			t = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (half - 1);
			res = ((NI) 0);
			{
				while (1) {
					NIM_CHAR T11_;
					if (!(res <= colontmp_)) goto LA10;
					t = res;
					T11_ = (NIM_CHAR)0;
					T11_ = buf[(t)- 0];
					buf[(t)- 0] = buf[((NI)((NI)(i - t) - ((NI) 1)))- 0];
					buf[((NI)((NI)(i - t) - ((NI) 1)))- 0] = T11_;
					res += ((NI) 1);
				} LA10: ;
			}
		}
		result = nimrtl_cstrToNimstr(((NCSTRING) (buf)));
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void, add_XyS0BXa1E5ylXzhvUQlY9cg)(NimStringDesc** x, NCSTRING y) {
	NI i;
	i = ((NI) 0);
	{
		while (1) {
			if (!!(((NU8)(y[i]) == (NU8)(0)))) goto LA2;
			(*x) = addChar((*x), y[i]);
			i += ((NI) 1);
		} LA2: ;
	}
}

N_NIMCALL(void, add_A9bDQDKw5SEqD3OvtOnC1bg)(NimStringDesc** result, NF x) {
	TY_eVNFTutn6un5gcq48fQLdg buf;
	NI n;
	int T1_;
	NIM_BOOL hasDot;
	memset((void*)buf, 0, sizeof(buf));
	T1_ = (int)0;
	T1_ = sprintf(((NCSTRING) (buf)), "%.16g", x);
	n = ((NI) (T1_));
	hasDot = NIM_FALSE;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)(n - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA4;
				i = res;
				{
					if (!((NU8)(buf[(i)- 0]) == (NU8)(44))) goto LA7_;
					buf[(i)- 0] = 46;
					hasDot = NIM_TRUE;
				}
				goto LA5_;
				LA7_: ;
				{
					if (!(((NU8)(buf[(i)- 0])) >= ((NU8)(97)) && ((NU8)(buf[(i)- 0])) <= ((NU8)(122)) || ((NU8)(buf[(i)- 0])) >= ((NU8)(65)) && ((NU8)(buf[(i)- 0])) <= ((NU8)(90)) || ((NU8)(buf[(i)- 0])) == ((NU8)(46)))) goto LA10_;
					hasDot = NIM_TRUE;
				}
				goto LA5_;
				LA10_: ;
				LA5_: ;
				res += ((NI) 1);
			} LA4: ;
		}
	}
	{
		if (!!(hasDot)) goto LA14_;
		buf[(n)- 0] = 46;
		buf[((NI)(n + ((NI) 1)))- 0] = 48;
		buf[((NI)(n + ((NI) 2)))- 0] = 0;
	}
	LA14_: ;
	{
		if (!(((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(110)) || ((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(78)))) goto LA18_;
		(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_42));
	}
	goto LA16_;
	LA18_: ;
	{
		if (!((NU8)(buf[((NI)(n - ((NI) 1)))- 0]) == (NU8)(70))) goto LA21_;
		{
			if (!((NU8)(buf[(((NI) 0))- 0]) == (NU8)(45))) goto LA25_;
			(*result) = nimrtl_resizeString((*result), 4);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_43));
		}
		goto LA23_;
		LA25_: ;
		{
			(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_44));
		}
		LA23_: ;
	}
	goto LA16_;
	LA21_: ;
	{
		add_XyS0BXa1E5ylXzhvUQlY9cg(result, ((NCSTRING) (buf)));
	}
	LA16_: ;
}

N_NIMCALL(NimStringDesc*, nimFloatToStr)(NF f) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = rawNewString(((NI) 8));
	add_A9bDQDKw5SEqD3OvtOnC1bg((&result), f);
	return result;
}

N_NIMCALL(NI, getInt_5g9bNpUms27Cioy22A8yrYg)(void* p, NI size) {
	NI result;
{	result = (NI)0;
	switch (size) {
	case ((NI) 1):
	{
		result = ((NI) ((*((NU8*) (p)))));
		goto BeforeRet_;
	}
	break;
	case ((NI) 2):
	{
		result = ((NI) ((*((NU16*) (p)))));
		goto BeforeRet_;
	}
	break;
	case ((NI) 4):
	{
		result = ((NI) ((*((NU32*) (p)))));
		goto BeforeRet_;
	}
	break;
	case ((NI) 8):
	{
		result = ((NI) ((*((NU64*) (p)))));
		goto BeforeRet_;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(void, reprStrAux_LyaXzdaWBkFL0tnaaDmZmA)(NimStringDesc** result, NCSTRING s, NI len) {
	NimStringDesc* T5_;
	NimStringDesc* T6_;
{	{
		if (!(((void*) (s)) == NIM_NIL)) goto LA3_;
		(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_38));
		goto BeforeRet_;
	}
	LA3_: ;
	T5_ = (NimStringDesc*)0;
	T6_ = (NimStringDesc*)0;
	T6_ = reprPointer(((void*) (s)));
	T5_ = rawNewString(T6_->Sup.len + 1);
appendString(T5_, T6_);
appendString(T5_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_45));
	(*result) = nimrtl_resizeString((*result), T5_->Sup.len + 0);
appendString((*result), T5_);
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (len - 1);
		res = ((NI) 0);
		{
			while (1) {
				NIM_CHAR c;
				if (!(res <= colontmp_)) goto LA9;
				i = res;
				c = s[i];
				switch (((NU8)(c))) {
				case 34:
				{
					(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_30));
				}
				break;
				case 92:
				{
					(*result) = nimrtl_resizeString((*result), 2);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_31));
				}
				break;
				case 10:
				{
					(*result) = nimrtl_resizeString((*result), 6);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_46));
				}
				break;
				case 128 ... 255:
				case 0 ... 9:
				case 11 ... 31:
				{
					NimStringDesc* T14_;
					NimStringDesc* T15_;
					T14_ = (NimStringDesc*)0;
					T15_ = (NimStringDesc*)0;
					T15_ = reprInt(((NI64) (((NU8)(c)))));
					T14_ = rawNewString(T15_->Sup.len + 1);
appendString(T14_, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_32));
appendString(T14_, T15_);
					(*result) = nimrtl_resizeString((*result), T14_->Sup.len + 0);
appendString((*result), T14_);
				}
				break;
				default:
				{
					(*result) = addChar((*result), c);
				}
				break;
				}
				res += ((NI) 1);
			} LA9: ;
		}
	}
	(*result) = nimrtl_resizeString((*result), 1);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_45));
	}BeforeRet_: ;
}

N_NIMCALL(void, reprAux_e9bayrEsuZxZS2R51iDjmHQ)(NimStringDesc** result, void* p, TNimType* typ, ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
{	{
		if (!((*cl).recdepth == ((NI) 0))) goto LA3_;
		(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_25));
		goto BeforeRet_;
	}
	LA3_: ;
	(*cl).recdepth -= ((NI) 1);
	switch ((*typ).kind) {
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 19):
	{
		reprSetAux_hUJOLGug9apUf00OJCE66qg(result, p, typ);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 16):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 4):
	{
		reprArray_e9bayrEsuZxZS2R51iDjmHQ_2(result, p, typ, cl);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 18):
	{
		reprRecord_e9bayrEsuZxZS2R51iDjmHQ_3(result, p, typ, cl);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 17):
	{
		TNimType* t;
		t = (*((TNimType**) (p)));
		reprRecord_e9bayrEsuZxZS2R51iDjmHQ_3(result, p, t, cl);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 21):
	{
		{
			if (!((*((void**) (p))) == NIM_NIL)) goto LA12_;
			(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_38));
		}
		goto LA10_;
		LA12_: ;
		{
			reprRef_e9bayrEsuZxZS2R51iDjmHQ_4(result, (*((void**) (p))), typ, cl);
		}
		LA10_: ;
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24):
	{
		reprSequence_e9bayrEsuZxZS2R51iDjmHQ_5(result, (*((void**) (p))), typ, cl);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 31):
	{
		NimStringDesc* T17_;
		T17_ = (NimStringDesc*)0;
		T17_ = nimrtl_nimIntToStr((*((NI*) (p))));
		(*result) = nimrtl_resizeString((*result), T17_->Sup.len + 0);
appendString((*result), T17_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 32):
	{
		NimStringDesc* T19_;
		T19_ = (NimStringDesc*)0;
		T19_ = nimrtl_nimIntToStr(((NI) ((*((NI8*) (p))))));
		(*result) = nimrtl_resizeString((*result), T19_->Sup.len + 0);
appendString((*result), T19_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 33):
	{
		NimStringDesc* T21_;
		T21_ = (NimStringDesc*)0;
		T21_ = nimrtl_nimIntToStr(((NI) ((*((NI16*) (p))))));
		(*result) = nimrtl_resizeString((*result), T21_->Sup.len + 0);
appendString((*result), T21_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 34):
	{
		NimStringDesc* T23_;
		T23_ = (NimStringDesc*)0;
		T23_ = nimrtl_nimIntToStr(((NI) ((*((NI32*) (p))))));
		(*result) = nimrtl_resizeString((*result), T23_->Sup.len + 0);
appendString((*result), T23_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 35):
	{
		NimStringDesc* T25_;
		T25_ = (NimStringDesc*)0;
		T25_ = nimrtl_nimInt64ToStr((*((NI64*) (p))));
		(*result) = nimrtl_resizeString((*result), T25_->Sup.len + 0);
appendString((*result), T25_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 40):
	{
		NimStringDesc* T27_;
		T27_ = (NimStringDesc*)0;
		T27_ = dollar__rzAI8EMyNBAQwGODeohhAA(((NU64) ((*((NU*) (p))))));
		(*result) = nimrtl_resizeString((*result), T27_->Sup.len + 0);
appendString((*result), T27_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 41):
	{
		NimStringDesc* T29_;
		T29_ = (NimStringDesc*)0;
		T29_ = dollar__rzAI8EMyNBAQwGODeohhAA(((NU64) ((*((NU8*) (p))))));
		(*result) = nimrtl_resizeString((*result), T29_->Sup.len + 0);
appendString((*result), T29_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 42):
	{
		NimStringDesc* T31_;
		T31_ = (NimStringDesc*)0;
		T31_ = dollar__rzAI8EMyNBAQwGODeohhAA(((NU64) ((*((NU16*) (p))))));
		(*result) = nimrtl_resizeString((*result), T31_->Sup.len + 0);
appendString((*result), T31_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 43):
	{
		NimStringDesc* T33_;
		T33_ = (NimStringDesc*)0;
		T33_ = dollar__rzAI8EMyNBAQwGODeohhAA(((NU64) ((*((NU32*) (p))))));
		(*result) = nimrtl_resizeString((*result), T33_->Sup.len + 0);
appendString((*result), T33_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 44):
	{
		NimStringDesc* T35_;
		T35_ = (NimStringDesc*)0;
		T35_ = dollar__rzAI8EMyNBAQwGODeohhAA((*((NU64*) (p))));
		(*result) = nimrtl_resizeString((*result), T35_->Sup.len + 0);
appendString((*result), T35_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 36):
	{
		NimStringDesc* T37_;
		T37_ = (NimStringDesc*)0;
		T37_ = nimFloatToStr((*((NF*) (p))));
		(*result) = nimrtl_resizeString((*result), T37_->Sup.len + 0);
appendString((*result), T37_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 37):
	{
		NimStringDesc* T39_;
		T39_ = (NimStringDesc*)0;
		T39_ = nimFloatToStr(((NF) ((*((NF32*) (p))))));
		(*result) = nimrtl_resizeString((*result), T39_->Sup.len + 0);
appendString((*result), T39_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 38):
	{
		NimStringDesc* T41_;
		T41_ = (NimStringDesc*)0;
		T41_ = nimFloatToStr((*((NF*) (p))));
		(*result) = nimrtl_resizeString((*result), T41_->Sup.len + 0);
appendString((*result), T41_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 14):
	{
		NI T43_;
		NimStringDesc* T44_;
		T43_ = (NI)0;
		T43_ = getInt_5g9bNpUms27Cioy22A8yrYg(p, (*typ).size);
		T44_ = (NimStringDesc*)0;
		T44_ = nimrtl_reprEnum(T43_, typ);
		(*result) = nimrtl_resizeString((*result), T44_->Sup.len + 0);
appendString((*result), T44_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 1):
	{
		NimStringDesc* T46_;
		T46_ = (NimStringDesc*)0;
		T46_ = nimrtl_reprBool((*((NIM_BOOL*) (p))));
		(*result) = nimrtl_resizeString((*result), T46_->Sup.len + 0);
appendString((*result), T46_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 2):
	{
		NimStringDesc* T48_;
		T48_ = (NimStringDesc*)0;
		T48_ = nimrtl_reprChar((*((NIM_CHAR*) (p))));
		(*result) = nimrtl_resizeString((*result), T48_->Sup.len + 0);
appendString((*result), T48_);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28):
	{
		NimStringDesc** sp;
		NCSTRING T50_;
		sp = ((NimStringDesc**) (p));
		T50_ = (NCSTRING)0;
		{
			if (!((*sp) == 0)) goto LA53_;
			T50_ = NIM_NIL;
		}
		goto LA51_;
		LA53_: ;
		{
			T50_ = (*sp)->data;
		}
		LA51_: ;
		reprStrAux_LyaXzdaWBkFL0tnaaDmZmA(result, T50_, ((*sp) ? (*sp)->Sup.len : 0));
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 29):
	{
		NCSTRING cs;
		cs = (*((NCSTRING*) (p)));
		{
			if (!(cs == 0)) goto LA59_;
			(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_38));
		}
		goto LA57_;
		LA59_: ;
		{
			reprStrAux_LyaXzdaWBkFL0tnaaDmZmA(result, cs, (cs ? strlen(cs) : 0));
		}
		LA57_: ;
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 20):
	{
		reprAux_e9bayrEsuZxZS2R51iDjmHQ(result, p, (*typ).base, cl);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 25):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 26):
	{
		{
			if (!((*((void**) (p))) == NIM_NIL)) goto LA66_;
			(*result) = nimrtl_resizeString((*result), 3);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_38));
		}
		goto LA64_;
		LA66_: ;
		{
			NimStringDesc* T69_;
			T69_ = (NimStringDesc*)0;
			T69_ = reprPointer((*((void**) (p))));
			(*result) = nimrtl_resizeString((*result), T69_->Sup.len + 0);
appendString((*result), T69_);
		}
		LA64_: ;
	}
	break;
	default:
	{
		(*result) = nimrtl_resizeString((*result), 15);
appendString((*result), ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_47));
	}
	break;
	}
	(*cl).recdepth += ((NI) 1);
	}BeforeRet_: ;
}

N_NIMCALL(void, deinitReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA_2)(ReprClosure_QK7SSKN8dPEpZedUTVKSLw* cl) {
	deinit_WHgd5C59bkXWDz3vnAxfzXQ_3((&(*cl).marked));
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprAny)(void* p, TNimType* typ) {
	NimStringDesc* result;
	ReprClosure_QK7SSKN8dPEpZedUTVKSLw cl;
	result = (NimStringDesc*)0;
	memset((void*)(&cl), 0, sizeof(cl));
	initReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA((&cl));
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_24));
	{
		if (!((*typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 17) || (*typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 18) || (*typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 16) || (*typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 4) || (*typ).kind == ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 19))) goto LA3_;
		reprAux_e9bayrEsuZxZS2R51iDjmHQ((&result), p, typ, (&cl));
	}
	goto LA1_;
	LA3_: ;
	{
		void* p_2;
		p_2 = p;
		reprAux_e9bayrEsuZxZS2R51iDjmHQ((&result), ((void*) ((&p_2))), typ, (&cl));
	}
	LA1_: ;
	result = nimrtl_resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_20));
	deinitReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA_2((&cl));
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprStr)(NimStringDesc* s) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_24));
	reprStrAux_LyaXzdaWBkFL0tnaaDmZmA((&result), s->data, (s ? s->Sup.len : 0));
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprSet)(void* p, TNimType* typ) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_24));
	reprSetAux_hUJOLGug9apUf00OJCE66qg((&result), p, typ);
	return result;
}

N_LIB_EXPORT N_CDECL(NimStringDesc*, nimrtl_reprOpenArray)(void* p, NI length, TNimType* elemtyp) {
	NimStringDesc* result;
	ReprClosure_QK7SSKN8dPEpZedUTVKSLw cl;
	NI bs;
	result = (NimStringDesc*)0;
	memset((void*)(&cl), 0, sizeof(cl));
	initReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA((&cl));
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_34));
	bs = (*elemtyp).size;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)(length - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA3;
				i = res;
				{
					if (!(((NI) 0) < i)) goto LA6_;
					result = nimrtl_resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_27));
				}
				LA6_: ;
				reprAux_e9bayrEsuZxZS2R51iDjmHQ((&result), ((void*) ((NI)(((NI) (p)) + (NI)(i * bs)))), elemtyp, (&cl));
				res += ((NI) 1);
			} LA3: ;
		}
	}
	result = nimrtl_resizeString(result, 1);
appendString(result, ((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_35));
	deinitReprClosure_1SAi9bV4Tf9boSCAkLYGFXoA_2((&cl));
	return result;
}

N_LIB_EXPORT N_CDECL(Exception*, nimrtl_getCurrentException)(void) {
	Exception* result;
	result = (Exception*)0;
	result = currException_9bVPeDJlYTi9bQApZpfH8wjg;
	return result;
}

N_NIMCALL(NI64, mulInt64)(NI64 a, NI64 b) {
	NI64 result;
	NF resAsFloat;
	NF floatProd;
{	result = (NI64)0;
	resAsFloat = (NF)0;
	floatProd = (NF)0;
	result = (NI64)((NU64)(a) * (NU64)(b));
	floatProd = ((double) (a));
	floatProd = ((NF)(floatProd) * (NF)(((double) (b))));
	resAsFloat = ((double) (result));
	{
		if (!(resAsFloat == floatProd)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!(((NF)(3.2000000000000000e+01) * (NF)((((NF)(resAsFloat) - (NF)(floatProd)) < 0? -(((NF)(resAsFloat) - (NF)(floatProd))) : (((NF)(resAsFloat) - (NF)(floatProd)))))) <= (floatProd < 0? -(floatProd) : (floatProd)))) goto LA7_;
		goto BeforeRet_;
	}
	LA7_: ;
	raiseOverflow();
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NI, nimParseBiggestFloat)(NimStringDesc* s, NF* number, NI start) {
	NI result;
	NI i;
	NF sign;
	NI kdigits;
	NI fdigits;
	NI exponent;
	NU64 integer;
	NU64 fraction;
	NI frac_exponent;
	NI exp_sign;
	NI first_digit;
	NIM_BOOL has_sign;
	NI real_exponent;
	NIM_BOOL exp_negative;
	NI abs_exponent;
	TY_PGLh8drTnaWr3s1qUUSq2Q t;
	NI ti;
	NI maxlen;
{	result = (NI)0;
	i = start;
	sign = 1.0000000000000000e+00;
	kdigits = ((NI) 0);
	fdigits = ((NI) 0);
	exponent = (NI)0;
	integer = (NU64)0;
	fraction = (NU64)0;
	frac_exponent = ((NI) 0);
	exp_sign = ((NI) 1);
	first_digit = ((NI) -1);
	has_sign = NIM_FALSE;
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = ((NU8)(s->data[i]) == (NU8)(43));
		if (T3_) goto LA4_;
		T3_ = ((NU8)(s->data[i]) == (NU8)(45));
		LA4_: ;
		if (!T3_) goto LA5_;
		has_sign = NIM_TRUE;
		{
			if (!((NU8)(s->data[i]) == (NU8)(45))) goto LA9_;
			sign = -1.0000000000000000e+00;
		}
		LA9_: ;
		i += ((NI) 1);
	}
	LA5_: ;
	{
		NIM_BOOL T13_;
		T13_ = (NIM_BOOL)0;
		T13_ = ((NU8)(s->data[i]) == (NU8)(78));
		if (T13_) goto LA14_;
		T13_ = ((NU8)(s->data[i]) == (NU8)(110));
		LA14_: ;
		if (!T13_) goto LA15_;
		{
			NIM_BOOL T19_;
			T19_ = (NIM_BOOL)0;
			T19_ = ((NU8)(s->data[(NI)(i + ((NI) 1))]) == (NU8)(65));
			if (T19_) goto LA20_;
			T19_ = ((NU8)(s->data[(NI)(i + ((NI) 1))]) == (NU8)(97));
			LA20_: ;
			if (!T19_) goto LA21_;
			{
				NIM_BOOL T25_;
				T25_ = (NIM_BOOL)0;
				T25_ = ((NU8)(s->data[(NI)(i + ((NI) 2))]) == (NU8)(78));
				if (T25_) goto LA26_;
				T25_ = ((NU8)(s->data[(NI)(i + ((NI) 2))]) == (NU8)(110));
				LA26_: ;
				if (!T25_) goto LA27_;
				{
					if (!!((((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(97)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(122)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(65)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(90)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(48)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(57)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) == ((NU8)(95))))) goto LA31_;
					(*number) = NAN;
					result = (NI)((NI)(i + ((NI) 3)) - start);
					goto BeforeRet_;
				}
				LA31_: ;
			}
			LA27_: ;
		}
		LA21_: ;
		result = ((NI) 0);
		goto BeforeRet_;
	}
	LA15_: ;
	{
		NIM_BOOL T35_;
		T35_ = (NIM_BOOL)0;
		T35_ = ((NU8)(s->data[i]) == (NU8)(73));
		if (T35_) goto LA36_;
		T35_ = ((NU8)(s->data[i]) == (NU8)(105));
		LA36_: ;
		if (!T35_) goto LA37_;
		{
			NIM_BOOL T41_;
			T41_ = (NIM_BOOL)0;
			T41_ = ((NU8)(s->data[(NI)(i + ((NI) 1))]) == (NU8)(78));
			if (T41_) goto LA42_;
			T41_ = ((NU8)(s->data[(NI)(i + ((NI) 1))]) == (NU8)(110));
			LA42_: ;
			if (!T41_) goto LA43_;
			{
				NIM_BOOL T47_;
				T47_ = (NIM_BOOL)0;
				T47_ = ((NU8)(s->data[(NI)(i + ((NI) 2))]) == (NU8)(70));
				if (T47_) goto LA48_;
				T47_ = ((NU8)(s->data[(NI)(i + ((NI) 2))]) == (NU8)(102));
				LA48_: ;
				if (!T47_) goto LA49_;
				{
					if (!!((((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(97)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(122)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(65)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(90)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) >= ((NU8)(48)) && ((NU8)(s->data[(NI)(i + ((NI) 3))])) <= ((NU8)(57)) || ((NU8)(s->data[(NI)(i + ((NI) 3))])) == ((NU8)(95))))) goto LA53_;
					(*number) = ((NF)(INF) * (NF)(sign));
					result = (NI)((NI)(i + ((NI) 3)) - start);
					goto BeforeRet_;
				}
				LA53_: ;
			}
			LA49_: ;
		}
		LA43_: ;
		result = ((NI) 0);
		goto BeforeRet_;
	}
	LA37_: ;
	{
		if (!(((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)))) goto LA57_;
		first_digit = ((NI) ((NI)(((NI) (((NU8)(s->data[i])))) - ((NI) 48))));
	}
	LA57_: ;
	{
		while (1) {
			if (!(((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)))) goto LA60;
			kdigits += ((NI) 1);
			integer = (NU64)((NU64)((NU64)((NU64)(integer) * (NU64)(10ULL))) + (NU64)(((NU64) ((NI)(((NI) (((NU8)(s->data[i])))) - ((NI) 48))))));
			i += ((NI) 1);
			{
				while (1) {
					if (!((NU8)(s->data[i]) == (NU8)(95))) goto LA62;
					i += ((NI) 1);
				} LA62: ;
			}
		} LA60: ;
	}
	{
		if (!((NU8)(s->data[i]) == (NU8)(46))) goto LA65_;
		i += ((NI) 1);
		{
			if (!(kdigits <= ((NI) 0))) goto LA69_;
			{
				while (1) {
					if (!((NU8)(s->data[i]) == (NU8)(48))) goto LA72;
					frac_exponent += ((NI) 1);
					i += ((NI) 1);
					{
						while (1) {
							if (!((NU8)(s->data[i]) == (NU8)(95))) goto LA74;
							i += ((NI) 1);
						} LA74: ;
					}
				} LA72: ;
			}
		}
		LA69_: ;
		{
			NIM_BOOL T77_;
			T77_ = (NIM_BOOL)0;
			T77_ = (first_digit == ((NI) -1));
			if (!(T77_)) goto LA78_;
			T77_ = (((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)));
			LA78_: ;
			if (!T77_) goto LA79_;
			first_digit = ((NI) ((NI)(((NI) (((NU8)(s->data[i])))) - ((NI) 48))));
		}
		LA79_: ;
		{
			while (1) {
				if (!(((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)))) goto LA82;
				fdigits += ((NI) 1);
				frac_exponent += ((NI) 1);
				integer = (NU64)((NU64)((NU64)((NU64)(integer) * (NU64)(10ULL))) + (NU64)(((NU64) ((NI)(((NI) (((NU8)(s->data[i])))) - ((NI) 48))))));
				i += ((NI) 1);
				{
					while (1) {
						if (!((NU8)(s->data[i]) == (NU8)(95))) goto LA84;
						i += ((NI) 1);
					} LA84: ;
				}
			} LA82: ;
		}
	}
	LA65_: ;
	{
		NIM_BOOL T87_;
		NIM_BOOL T89_;
		NIM_BOOL T91_;
		T87_ = (NIM_BOOL)0;
		T87_ = ((NI)(kdigits + fdigits) <= ((NI) 0));
		if (!(T87_)) goto LA88_;
		T89_ = (NIM_BOOL)0;
		T89_ = (i == start);
		if (T89_) goto LA90_;
		T91_ = (NIM_BOOL)0;
		T91_ = (i == (NI)(start + ((NI) 1)));
		if (!(T91_)) goto LA92_;
		T91_ = has_sign;
		LA92_: ;
		T89_ = T91_;
		LA90_: ;
		T87_ = T89_;
		LA88_: ;
		if (!T87_) goto LA93_;
		result = ((NI) 0);
		goto BeforeRet_;
	}
	LA93_: ;
	{
		if (!(((NU8)(s->data[i])) == ((NU8)(101)) || ((NU8)(s->data[i])) == ((NU8)(69)))) goto LA97_;
		i += ((NI) 1);
		{
			NIM_BOOL T101_;
			T101_ = (NIM_BOOL)0;
			T101_ = ((NU8)(s->data[i]) == (NU8)(43));
			if (T101_) goto LA102_;
			T101_ = ((NU8)(s->data[i]) == (NU8)(45));
			LA102_: ;
			if (!T101_) goto LA103_;
			{
				if (!((NU8)(s->data[i]) == (NU8)(45))) goto LA107_;
				exp_sign = ((NI) -1);
			}
			LA107_: ;
			i += ((NI) 1);
		}
		LA103_: ;
		{
			if (!!((((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57))))) goto LA111_;
			result = ((NI) 0);
			goto BeforeRet_;
		}
		LA111_: ;
		{
			while (1) {
				if (!(((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)))) goto LA114;
				exponent = (NI)((NI)(exponent * ((NI) 10)) + ((NI) ((NI)(((NI) (((NU8)(s->data[i])))) - ((NI) 48)))));
				i += ((NI) 1);
				{
					while (1) {
						if (!((NU8)(s->data[i]) == (NU8)(95))) goto LA116;
						i += ((NI) 1);
					} LA116: ;
				}
			} LA114: ;
		}
	}
	LA97_: ;
	real_exponent = (NI)((NI)(exp_sign * exponent) - frac_exponent);
	exp_negative = (real_exponent < ((NI) 0));
	abs_exponent = (real_exponent > 0? (real_exponent) : -(real_exponent));
	{
		if (!(((NI) 999) < abs_exponent)) goto LA119_;
		{
			if (!exp_negative) goto LA123_;
			(*number) = ((NF)(0.0) * (NF)(sign));
		}
		goto LA121_;
		LA123_: ;
		{
			(*number) = ((NF)(INF) * (NF)(sign));
		}
		LA121_: ;
		result = (NI)(i - start);
		goto BeforeRet_;
	}
	LA119_: ;
	{
		NIM_BOOL T128_;
		NI slop;
		T128_ = (NIM_BOOL)0;
		T128_ = ((NI)(kdigits + fdigits) <= ((NI) 16));
		if (!(T128_)) goto LA129_;
		T128_ = (first_digit <= ((NI) 8));
		LA129_: ;
		if (!T128_) goto LA130_;
		{
			if (!(abs_exponent <= ((NI) 22))) goto LA134_;
			{
				if (!exp_negative) goto LA138_;
				(*number) = ((NF)(((NF)(sign) * (NF)(((NF) (integer))))) / (NF)(powtens_l8b44pimyaWe7sztIOF1Tw[(abs_exponent)- 0]));
			}
			goto LA136_;
			LA138_: ;
			{
				(*number) = ((NF)(((NF)(sign) * (NF)(((NF) (integer))))) * (NF)(powtens_l8b44pimyaWe7sztIOF1Tw[(abs_exponent)- 0]));
			}
			LA136_: ;
			result = (NI)(i - start);
			goto BeforeRet_;
		}
		LA134_: ;
		slop = (NI)((NI)(((NI) 15) - kdigits) - fdigits);
		{
			NIM_BOOL T143_;
			T143_ = (NIM_BOOL)0;
			T143_ = (abs_exponent <= (NI)(((NI) 22) + slop));
			if (!(T143_)) goto LA144_;
			T143_ = !(exp_negative);
			LA144_: ;
			if (!T143_) goto LA145_;
			(*number) = ((NF)(((NF)(((NF)(sign) * (NF)(((NF) (integer))))) * (NF)(powtens_l8b44pimyaWe7sztIOF1Tw[(slop)- 0]))) * (NF)(powtens_l8b44pimyaWe7sztIOF1Tw[((NI)(abs_exponent - slop))- 0]));
			result = (NI)(i - start);
			goto BeforeRet_;
		}
		LA145_: ;
	}
	LA130_: ;
	memset((void*)t, 0, sizeof(t));
	ti = ((NI) 0);
	maxlen = ((NI) 494);
	result = (NI)(i - start);
	i = start;
	{
		while (1) {
			if (!(((NU8)(s->data[i])) >= ((NU8)(48)) && ((NU8)(s->data[i])) <= ((NU8)(57)) || ((NU8)(s->data[i])) == ((NU8)(43)) || ((NU8)(s->data[i])) == ((NU8)(45)))) goto LA148;
			{
				if (!(ti < maxlen)) goto LA151_;
				t[(ti)- 0] = s->data[i];
				ti += ((NI) 1);
			}
			LA151_: ;
			i += ((NI) 1);
			{
				while (1) {
					if (!(((NU8)(s->data[i])) == ((NU8)(46)) || ((NU8)(s->data[i])) == ((NU8)(95)))) goto LA154;
					i += ((NI) 1);
				} LA154: ;
			}
		} LA148: ;
	}
	t[(ti)- 0] = 69;
	ti += ((NI) 1);
	{
		if (!exp_negative) goto LA157_;
		t[(ti)- 0] = 45;
	}
	goto LA155_;
	LA157_: ;
	{
		t[(ti)- 0] = 43;
	}
	LA155_: ;
	ti += ((NI) 1);
	ti += ((NI) 3);
	t[((NI)(ti - ((NI) 1)))- 0] = ((NIM_CHAR) ((NI)(((NI) 48) + ((NI) ((NI)(abs_exponent % ((NI) 10)))))));
	abs_exponent = (NI)(abs_exponent / ((NI) 10));
	t[((NI)(ti - ((NI) 2)))- 0] = ((NIM_CHAR) ((NI)(((NI) 48) + ((NI) ((NI)(abs_exponent % ((NI) 10)))))));
	abs_exponent = (NI)(abs_exponent / ((NI) 10));
	t[((NI)(ti - ((NI) 3)))- 0] = ((NIM_CHAR) ((NI)(((NI) 48) + ((NI) ((NI)(abs_exponent % ((NI) 10)))))));
	(*number) = strtod(((NCSTRING) (t)), NIM_NIL);
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, copyStrLast)(NimStringDesc* s, NI start, NI last) {
	NimStringDesc* result;
	NI start_2;
	NI len;
	result = (NimStringDesc*)0;
	start_2 = ((start >= ((NI) 0)) ? start : ((NI) 0));
	len = (NI)((NI)(((last <= (NI)((*s).Sup.len - ((NI) 1))) ? last : (NI)((*s).Sup.len - ((NI) 1))) - start_2) + ((NI) 1));
	{
		if (!(((NI) 0) < len)) goto LA3_;
		result = rawNewStringNoInit(len);
		(*result).Sup.len = len;
		copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((*result).data)), ((void*) ((&(*s).data[(start_2)- 0]))), ((NI) (len)));
		(*result).data[(len)- 0] = 0;
	}
	goto LA1_;
	LA3_: ;
	{
		result = rawNewString(len);
	}
	LA1_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, copyStr)(NimStringDesc* s, NI start) {
	NimStringDesc* result;
	result = (NimStringDesc*)0;
	result = copyStrLast(s, start, (NI)((*s).Sup.len - ((NI) 1)));
	return result;
}

N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemSize) {
	TGenericSeq* result;
	result = (TGenericSeq*)0;
	result = seq;
	{
		void* T5_;
		if (!(((NI) ((NI)((*result).reserved & ((NI) 2147483647)))) <= (*result).len)) goto LA3_;
		(*result).reserved = resize_bzF9a0JivP3Z4njqaxuLc5wsystem(((NI) ((NI)((*result).reserved & ((NI) 2147483647)))));
		T5_ = (void*)0;
		T5_ = nimrtl_growObj(((void*) (result)), (NI)((NI)(elemSize * (*result).reserved) + ((NI) 8)));
		result = ((TGenericSeq*) (T5_));
	}
	LA3_: ;
	return result;
}
static N_NIMCALL(void, Marker_TY_TmgWlPUbRr7iGD2UE1cu6A)(void* p, NI op) {
	AssertionError_8FC9arcap3s5ZtfMs75krtA* a;
	a = (AssertionError_8FC9arcap3s5ZtfMs75krtA*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.trace, op);
}

static N_INLINE(void, sysFatal_mWrNPcJugise9aqN0yGByGwsystem)(NimStringDesc* message) {
	AssertionError_8FC9arcap3s5ZtfMs75krtA* e;
	NimStringDesc* T1_;
	e = (AssertionError_8FC9arcap3s5ZtfMs75krtA*)0;
	e = (AssertionError_8FC9arcap3s5ZtfMs75krtA*) nimrtl_newObj((&NTI_TmgWlPUbRr7iGD2UE1cu6A_), sizeof(AssertionError_8FC9arcap3s5ZtfMs75krtA));
	(*e).Sup.Sup.m_type = (&NTI_8FC9arcap3s5ZtfMs75krtA_);
	T1_ = (NimStringDesc*)0;
	T1_ = (*e).Sup.message; (*e).Sup.message = nimrtl_copyStringRC1(message);
	if (T1_) nimGCunrefNoCycle(T1_);
	nimrtl_raiseException((Exception*)e, "AssertionError");
}

N_NOINLINE(void, raiseAssert_PpfSiTIeNpMAb9a5o6SglJw_2)(NimStringDesc* msg) {
	sysFatal_mWrNPcJugise9aqN0yGByGwsystem(msg);
}
static N_NIMCALL(void, Marker_TY_yCEN9anxCD6mzBxGjuaRBdg)(void* p, NI op) {
	ValueError_Gi06FkNeykJn7mrqRZYrkA* a;
	a = (ValueError_Gi06FkNeykJn7mrqRZYrkA*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.trace, op);
}
static N_NIMCALL(void, Marker_TY_iCd9aJMEo0ovVcW5hQQKhzg)(void* p, NI op) {
	NilAccessError_le1LLqP8alYTev1dbGWJlg* a;
	a = (NilAccessError_le1LLqP8alYTev1dbGWJlg*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.trace, op);
}

static N_INLINE(void, sysFatal_3R7YjovOXNtHgMU6dDCuBQsystem)(NimStringDesc* message) {
	NilAccessError_le1LLqP8alYTev1dbGWJlg* e;
	NimStringDesc* T1_;
	e = (NilAccessError_le1LLqP8alYTev1dbGWJlg*)0;
	e = (NilAccessError_le1LLqP8alYTev1dbGWJlg*) nimrtl_newObj((&NTI_iCd9aJMEo0ovVcW5hQQKhzg_), sizeof(NilAccessError_le1LLqP8alYTev1dbGWJlg));
	(*e).Sup.Sup.Sup.m_type = (&NTI_le1LLqP8alYTev1dbGWJlg_);
	T1_ = (NimStringDesc*)0;
	T1_ = (*e).Sup.Sup.message; (*e).Sup.Sup.message = nimrtl_copyStringRC1(message);
	if (T1_) nimGCunrefNoCycle(T1_);
	nimrtl_raiseException((Exception*)e, "NilAccessError");
}

N_NOINLINE(void, chckNil)(void* p) {
	{
		if (!(p == NIM_NIL)) goto LA3_;
		sysFatal_3R7YjovOXNtHgMU6dDCuBQsystem(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_48));
	}
	LA3_: ;
}
static N_NIMCALL(void, Marker_TY_Qx9aKy4vZ9bVz9bnG9brQcRHGA)(void* p, NI op) {
	OSError_3XwRQvmzCEOC4QnT706q1g* a;
	a = (OSError_3XwRQvmzCEOC4QnT706q1g*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.trace, op);
}

N_NIMCALL(int, getFileHandle_bZ9c2yojtXoDTUpfyl8h8Rg)(FILE* f) {
	int result;
	result = (int)0;
	result = fileno(f);
	return result;
}

N_NIMCALL(void, close_BWnr8V7RERYno9bIdPmw8Hw_2)(FILE* f) {
	int T1_;
	T1_ = (int)0;
	T1_ = fclose(f);
}

N_NIMCALL(NIM_BOOL, open_sEp0GH2306oGo9bqBpj5oTQ)(FILE** f, NimStringDesc* filename, FileMode_fVUBHvW79bXUw1j55Oo9avSQ mode, NI bufSize) {
	NIM_BOOL result;
	void* p;
{	result = (NIM_BOOL)0;
	p = fopen(filename->data, FormatOpen_129cS4U5eK4wWqE9bNeKN1Aw[(mode)- 0]->data);
	{
		FILE* f2;
		struct stat res;
		if (!!((p == NIM_NIL))) goto LA3_;
		f2 = ((FILE*) (p));
		memset((void*)(&res), 0, sizeof(res));
		{
			NIM_BOOL T7_;
			int T8_;
			int T9_;
			T7_ = (NIM_BOOL)0;
			T8_ = (int)0;
			T8_ = getFileHandle_bZ9c2yojtXoDTUpfyl8h8Rg(f2);
			T9_ = (int)0;
			T9_ = fstat(T8_, (&res));
			T7_ = (((NI32) 0) <= T9_);
			if (!(T7_)) goto LA10_;
			T7_ = S_ISDIR(res.st_mode);
			LA10_: ;
			if (!T7_) goto LA11_;
			close_BWnr8V7RERYno9bIdPmw8Hw_2(f2);
			result = NIM_FALSE;
			goto BeforeRet_;
		}
		LA11_: ;
		result = NIM_TRUE;
		(*f) = ((FILE*) (p));
		{
			NIM_BOOL T15_;
			int T19_;
			T15_ = (NIM_BOOL)0;
			T15_ = (((NI) 0) < bufSize);
			if (!(T15_)) goto LA16_;
			T15_ = (bufSize <= ((NI) 2147483647));
			LA16_: ;
			if (!T15_) goto LA17_;
			T19_ = (int)0;
			T19_ = setvbuf((*f), NIM_NIL, _IOFBF, ((size_t) (((int) (bufSize)))));
		}
		goto LA13_;
		LA17_: ;
		{
			int T23_;
			if (!(bufSize == ((NI) 0))) goto LA21_;
			T23_ = (int)0;
			T23_ = setvbuf((*f), NIM_NIL, _IONBF, ((NI) 0));
		}
		goto LA13_;
		LA21_: ;
		LA13_: ;
	}
	LA3_: ;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NI, readBuffer_nZ0pNe9cd9cXtoayexCiaDtA)(FILE* f, void* buffer, NI len) {
	NI result;
	result = (NI)0;
	result = fread(buffer, ((NI) 1), ((size_t) (len)), f);
	{
		if (!!((result == ((NI) (len))))) goto LA3_;
		checkErr_BWnr8V7RERYno9bIdPmw8Hw(f);
	}
	LA3_: ;
	return result;
}

N_NIMCALL(NI, writeBuffer_nZ0pNe9cd9cXtoayexCiaDtA_2)(FILE* f, void* buffer, NI len) {
	NI result;
	int T1_;
	result = (NI)0;
	T1_ = (int)0;
	T1_ = fwrite(buffer, ((NI) 1), ((size_t) (len)), f);
	result = ((NI) (T1_));
	checkErr_BWnr8V7RERYno9bIdPmw8Hw(f);
	return result;
}

N_NIMCALL(void, flushFile_BWnr8V7RERYno9bIdPmw8Hw_3)(FILE* f) {
	int T1_;
	T1_ = (int)0;
	T1_ = fflush(f);
}

N_NIMCALL(NI64, getFilePos_XePgC9ccBXCgb9bEHXZpnMqA_2)(FILE* f) {
	NI64 result;
	long T1_;
	result = (NI64)0;
	T1_ = (long)0;
	T1_ = ftell(f);
	result = ((NI64) (T1_));
	{
		if (!(result < IL64(0))) goto LA4_;
		raiseEIO_PpfSiTIeNpMAb9a5o6SglJw(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_54));
	}
	LA4_: ;
	return result;
}

N_NIMCALL(void, setFilePos_YAngY19cHH2nZ9bqhMgAHz8Q)(FILE* f, NI64 pos, FileSeekPos_I9aQjuvWxs8BspGbxwsngWw relativeTo) {
	{
		int T3_;
		T3_ = (int)0;
		T3_ = fseek(f, ((long) (pos)), ((int) (relativeTo)));
		if (!!((T3_ == ((NI32) 0)))) goto LA4_;
		raiseEIO_PpfSiTIeNpMAb9a5o6SglJw(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_55));
	}
	LA4_: ;
}

N_NIMCALL(NI64, getFileSize_XePgC9ccBXCgb9bEHXZpnMqA)(FILE* f) {
	NI64 result;
	NI64 oldPos;
	int T1_;
	result = (NI64)0;
	oldPos = getFilePos_XePgC9ccBXCgb9bEHXZpnMqA_2(f);
	T1_ = (int)0;
	T1_ = fseek(f, ((NI) 0), ((int) 2));
	result = getFilePos_XePgC9ccBXCgb9bEHXZpnMqA_2(f);
	setFilePos_YAngY19cHH2nZ9bqhMgAHz8Q(f, oldPos, ((FileSeekPos_I9aQjuvWxs8BspGbxwsngWw) 0));
	return result;
}

N_NIMCALL(void, genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw)(void* dest, TNimNode* n) {
	NI d;
	d = ((NI) (dest));
	switch ((*n).kind) {
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 0):
	{
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 1):
	{
		genericReset(((void*) ((NI)((NU32)(d) + (NU32)((*n).offset)))), (*n).typ);
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 2):
	{
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*n).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA6;
					i = res;
					genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw(dest, (*n).sons[(i)- 0]);
					res += ((NI) 1);
				} LA6: ;
			}
		}
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 3):
	{
		TNimNode* m;
		m = selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ(dest, n);
		{
			if (!!((m == NIM_NIL))) goto LA10_;
			genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw(dest, m);
		}
		LA10_: ;
		zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(((void*) ((NI)((NU32)(d) + (NU32)((*n).offset)))), ((NI) ((*(*n).typ).size)));
	}
	break;
	}
}

N_NIMCALL(void, genericReset)(void* dest, TNimType* mt) {
	NI d;
	d = ((NI) (dest));
	switch ((*mt).kind) {
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24):
	{
		unsureAsgnRef(((void**) (dest)), NIM_NIL);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 18):
	{
		genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw(dest, (*mt).node);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 17):
	{
		TNimType** pint;
		genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw(dest, (*mt).node);
		pint = ((TNimType**) (dest));
		(*pint) = NIM_NIL;
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 16):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 4):
	{
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((NI)((*mt).size / (*(*mt).base).size) - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA7;
					i = res;
					genericReset(((void*) ((NI)((NU32)(d) + (NU32)((NI)((NU32)(i) * (NU32)((*(*mt).base).size)))))), (*mt).base);
					res += ((NI) 1);
				} LA7: ;
			}
		}
	}
	break;
	default:
	{
		zeroMem_7EL8Zq3xF2ujDWgp3bAEogsystem(dest, ((NI) ((*mt).size)));
	}
	break;
	}
}

N_NIMCALL(NI, cmp_xEnKsp9cfvO7Do9cTYXo8eJw)(NimStringDesc* x, NimStringDesc* y) {
	NI result;
	int T1_;
	result = (NI)0;
	T1_ = (int)0;
	T1_ = strcmp(x->data, y->data);
	result = ((NI) (T1_));
	return result;
}
static N_NIMCALL(void, Marker_TY_axqhRnwd09cVJkRcojfw6mA)(void* p, NI op) {
	KeyError_ifYAhUumNzWR9c9cN9amyJLtg* a;
	a = (KeyError_ifYAhUumNzWR9c9cN9amyJLtg*)p;
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.parent, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.message, op);
	nimrtl_nimGCvisit((void*)(*a).Sup.Sup.trace, op);
}

N_NIMCALL(void, genericAssignAux_ulsQvfENf9buS9atYunbm7gA)(void* dest, void* src, TNimNode* n, NIM_BOOL shallow) {
	NI d;
	NI s;
	d = ((NI) (dest));
	s = ((NI) (src));
	switch ((*n).kind) {
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 1):
	{
		genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA(((void*) ((NI)((NU32)(d) + (NU32)((*n).offset)))), ((void*) ((NI)((NU32)(s) + (NU32)((*n).offset)))), (*n).typ, shallow);
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 2):
	{
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*n).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA5;
					i = res;
					genericAssignAux_ulsQvfENf9buS9atYunbm7gA(dest, src, (*n).sons[(i)- 0], shallow);
					res += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 3):
	{
		TNimNode* dd;
		TNimNode* m;
		dd = selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ(dest, n);
		m = selectBranch_MvIsyjoRI1g7VY9cXrLB1dQ(src, n);
		{
			NIM_BOOL T9_;
			T9_ = (NIM_BOOL)0;
			T9_ = !((m == dd));
			if (!(T9_)) goto LA10_;
			T9_ = !((dd == NIM_NIL));
			LA10_: ;
			if (!T9_) goto LA11_;
			genericResetAux_byg9cq1Sxxop7ZDN9b4I0riw(dest, dd);
		}
		LA11_: ;
		copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) ((NI)((NU32)(d) + (NU32)((*n).offset)))), ((void*) ((NI)((NU32)(s) + (NU32)((*n).offset)))), ((NI) ((*(*n).typ).size)));
		{
			if (!!((m == NIM_NIL))) goto LA15_;
			genericAssignAux_ulsQvfENf9buS9atYunbm7gA(dest, src, m, shallow);
		}
		LA15_: ;
	}
	break;
	case ((TNimNodeKind_unfNsxrcATrufDZmpBq4HQ) 0):
	{
	}
	break;
	}
}

N_NIMCALL(void, genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA)(void* dest, void* src, TNimType* mt, NIM_BOOL shallow) {
	NI d;
	NI s;
{	d = ((NI) (dest));
	s = ((NI) (src));
	switch ((*mt).kind) {
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28):
	{
		void** x;
		void* s2;
		x = ((void**) (dest));
		s2 = (*((void**) (s)));
		{
			NIM_BOOL T4_;
			NIM_BOOL T5_;
			T4_ = (NIM_BOOL)0;
			T5_ = (NIM_BOOL)0;
			T5_ = (s2 == NIM_NIL);
			if (T5_) goto LA6_;
			T5_ = shallow;
			LA6_: ;
			T4_ = T5_;
			if (T4_) goto LA7_;
			T4_ = !(((NI)((*((TGenericSeq*) (s2))).reserved & ((NI) (-2147483647 -1))) == ((NI) 0)));
			LA7_: ;
			if (!T4_) goto LA8_;
			unsureAsgnRef(x, s2);
		}
		goto LA2_;
		LA8_: ;
		{
			NimStringDesc* T11_;
			T11_ = (NimStringDesc*)0;
			T11_ = nimrtl_copyString(((NimStringDesc*) (s2)));
			unsureAsgnRef(x, ((void*) (T11_)));
		}
		LA2_: ;
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 24):
	{
		void* s2_2;
		TGenericSeq* seq;
		void** x_2;
		void* T21_;
		NI dst;
		s2_2 = (*((void**) (src)));
		seq = ((TGenericSeq*) (s2_2));
		x_2 = ((void**) (dest));
		{
			NIM_BOOL T15_;
			NIM_BOOL T16_;
			T15_ = (NIM_BOOL)0;
			T16_ = (NIM_BOOL)0;
			T16_ = (s2_2 == NIM_NIL);
			if (T16_) goto LA17_;
			T16_ = shallow;
			LA17_: ;
			T15_ = T16_;
			if (T15_) goto LA18_;
			T15_ = !(((NI)((*seq).reserved & ((NI) (-2147483647 -1))) == ((NI) 0)));
			LA18_: ;
			if (!T15_) goto LA19_;
			unsureAsgnRef(x_2, s2_2);
			goto BeforeRet_;
		}
		LA19_: ;
		T21_ = (void*)0;
		T21_ = nimrtl_newSeq(mt, (*seq).len);
		unsureAsgnRef(x_2, T21_);
		dst = ((NI) ((*((void**) (dest)))));
		{
			NI i;
			NI colontmp_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = (NI)((*seq).len - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					if (!(res <= colontmp_)) goto LA24;
					i = res;
					genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA(((void*) ((NI)((NU32)((NI)((NU32)(dst) + (NU32)((NI)((NU32)(i) * (NU32)((*(*mt).base).size))))) + (NU32)(((NI) 8))))), ((void*) ((NI)((NU32)((NI)((NU32)(((NI) (s2_2))) + (NU32)((NI)((NU32)(i) * (NU32)((*(*mt).base).size))))) + (NU32)(((NI) 8))))), (*mt).base, shallow);
					res += ((NI) 1);
				} LA24: ;
			}
		}
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 17):
	{
		TNimType** pint;
		{
			if (!!(((*mt).base == NIM_NIL))) goto LA28_;
			genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA(dest, src, (*mt).base, shallow);
		}
		LA28_: ;
		genericAssignAux_ulsQvfENf9buS9atYunbm7gA(dest, src, (*mt).node, shallow);
		pint = ((TNimType**) (dest));
		(*pint) = mt;
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 18):
	{
		genericAssignAux_ulsQvfENf9buS9atYunbm7gA(dest, src, (*mt).node, shallow);
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 16):
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 4):
	{
		{
			NI i_2;
			NI colontmp__2;
			NI res_2;
			i_2 = (NI)0;
			colontmp__2 = (NI)0;
			colontmp__2 = (NI)((NI)((*mt).size / (*(*mt).base).size) - ((NI) 1));
			res_2 = ((NI) 0);
			{
				while (1) {
					if (!(res_2 <= colontmp__2)) goto LA34;
					i_2 = res_2;
					genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA(((void*) ((NI)((NU32)(d) + (NU32)((NI)((NU32)(i_2) * (NU32)((*(*mt).base).size)))))), ((void*) ((NI)((NU32)(s) + (NU32)((NI)((NU32)(i_2) * (NU32)((*(*mt).base).size)))))), (*mt).base, shallow);
					res_2 += ((NI) 1);
				} LA34: ;
			}
		}
	}
	break;
	case ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 22):
	{
		unsureAsgnRef(((void**) (dest)), (*((void**) (s))));
	}
	break;
	default:
	{
		copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(dest, src, ((NI) ((*mt).size)));
	}
	break;
	}
	}BeforeRet_: ;
}

N_NIMCALL(void, genericShallowAssign)(void* dest, void* src, TNimType* mt) {
	genericAssignAux_T3cq9aUp9bgGOBuyUSWGriTA(dest, src, mt, NIM_TRUE);
}

N_NIMCALL(NI, countBits32)(NI32 n) {
	NI result;
	NI32 v;
	result = (NI)0;
	v = n;
	v = (NI32)((NU32)(v) - (NU32)((NI32)((NI32)((NU32)(v) >> (NU32)(((NI32) 1))) & ((NI32) 1431655765))));
	v = (NI32)((NU32)((NI32)(v & ((NI32) 858993459))) + (NU32)((NI32)((NI32)((NU32)(v) >> (NU32)(((NI32) 2))) & ((NI32) 858993459))));
	result = ((NI) ((NI32)((NU32)((NI32)((NU32)((NI32)((NI32)((NU32)(v) + (NU32)((NI32)((NU32)(v) >> (NU32)(((NI32) 4))))) & ((NI32) 252645135))) * (NU32)(((NI32) 16843009)))) >> (NU32)(((NI32) 24)))));
	return result;
}

N_NIMCALL(NI, cardSet)(TY_S8ib5N31oJbAkqOZTlNg5Q s, NI len) {
	NI result;
	result = (NI)0;
	result = ((NI) 0);
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)(len - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				NI T4_;
				if (!(res <= colontmp_)) goto LA3;
				i = res;
				T4_ = (NI)0;
				T4_ = countBits32(((NI32) (s[(i)- 0])));
				result += T4_;
				res += ((NI) 1);
			} LA3: ;
		}
	}
	return result;
}

N_NIMCALL(NI, rawFileSize_jO6UN73ASx5jqerEr5FqZg)(FILE* file) {
	NI result;
	long oldPos;
	int T1_;
	int T2_;
	result = (NI)0;
	oldPos = ftell(file);
	T1_ = (int)0;
	T1_ = fseek(file, ((NI) 0), ((int) 2));
	result = ftell(file);
	T2_ = (int)0;
	T2_ = fseek(file, oldPos, ((int) 0));
	return result;
}

N_NIMCALL(NIM_BOOL, endOfFile_OpxMRqWNQzmofyVQsNQqVA)(FILE* f) {
	NIM_BOOL result;
	int c;
	int T1_;
{	result = (NIM_BOOL)0;
	c = fgetc(f);
	T1_ = (int)0;
	T1_ = ungetc(c, f);
	result = (c < ((NI32) 0));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, readAllBuffer_QygGtYi2d8AILktDeUIkvQ)(FILE* file) {
	NimStringDesc* result;
	NimStringDesc* buffer;
	result = (NimStringDesc*)0;
	result = nimrtl_copyString(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_24));
	buffer = mnewString(((NI) 4000));
	{
		while (1) {
			NI bytesRead;
			bytesRead = readBuffer_nZ0pNe9cd9cXtoayexCiaDtA(file, ((void*) ((&buffer->data[((NI) 0)]))), ((NI) 4000));
			{
				if (!(bytesRead == ((NI) 4000))) goto LA5_;
				result = nimrtl_resizeString(result, buffer->Sup.len + 0);
appendString(result, buffer);
			}
			goto LA3_;
			LA5_: ;
			{
				buffer = nimrtl_setLengthStr(buffer, ((NI) (bytesRead)));
				result = nimrtl_resizeString(result, buffer->Sup.len + 0);
appendString(result, buffer);
				goto LA1;
			}
			LA3_: ;
		}
	} LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, readAllFile_nEoG9c9aoJvOPVkq2dsFRb5Q)(FILE* file, NI len) {
	NimStringDesc* result;
	NI bytes;
	result = (NimStringDesc*)0;
	result = mnewString(((NI) (len)));
	bytes = readBuffer_nZ0pNe9cd9cXtoayexCiaDtA(file, ((void*) ((&result->data[((NI) 0)]))), ((NI) (len)));
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = endOfFile_OpxMRqWNQzmofyVQsNQqVA(file);
		if (!T3_) goto LA4_;
		{
			if (!(bytes < len)) goto LA8_;
			result = nimrtl_setLengthStr(result, ((NI) (bytes)));
		}
		LA8_: ;
	}
	goto LA1_;
	LA4_: ;
	{
		NimStringDesc* T11_;
		T11_ = (NimStringDesc*)0;
		T11_ = readAllBuffer_QygGtYi2d8AILktDeUIkvQ(file);
		result = nimrtl_resizeString(result, T11_->Sup.len + 0);
appendString(result, T11_);
	}
	LA1_: ;
	return result;
}

N_NIMCALL(NimStringDesc*, readAll_y7iEIBoIrYlvsLCqA1SrwQ)(FILE* file) {
	NimStringDesc* result;
	NI len;
	result = (NimStringDesc*)0;
	{
		if (!!((file == stdin))) goto LA3_;
		len = rawFileSize_jO6UN73ASx5jqerEr5FqZg(file);
	}
	goto LA1_;
	LA3_: ;
	{
		len = ((NI) -1);
	}
	LA1_: ;
	{
		if (!(((NI) 0) < len)) goto LA8_;
		result = readAllFile_nEoG9c9aoJvOPVkq2dsFRb5Q(file, len);
	}
	goto LA6_;
	LA8_: ;
	{
		result = readAllBuffer_QygGtYi2d8AILktDeUIkvQ(file);
	}
	LA6_: ;
	return result;
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
		if (!!((src == NIM_NIL))) goto LA3_;
		c = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src);
		(*c).refcount += ((NI) 8);
	}
	LA3_: ;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c_2;
		if (!!(((*dest) == NIM_NIL))) goto LA7_;
		c_2 = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest));
		{
			(*c_2).refcount -= ((NI) 8);
			if (!((NU32)((*c_2).refcount) < (NU32)(((NI) 8)))) goto LA11_;
			nimrtl_rtlAddZCT(c_2);
		}
		LA11_: ;
	}
	LA7_: ;
	(*dest) = src;
}

static N_INLINE(void, sysFatal_p4l3kdztdOPD3nsQRAEDqwsystem)(NimStringDesc* message, NimStringDesc* arg) {
	IOError_9czoZw3pzPyrBmb5zTHY1OQ* e;
	NimStringDesc* T1_;
	e = (IOError_9czoZw3pzPyrBmb5zTHY1OQ*)0;
	e = (IOError_9czoZw3pzPyrBmb5zTHY1OQ*) nimrtl_newObj((&NTI_HX2M9cQhE3jaovp9aYJDdslA_), sizeof(IOError_9czoZw3pzPyrBmb5zTHY1OQ));
	(*e).Sup.Sup.Sup.m_type = (&NTI_9czoZw3pzPyrBmb5zTHY1OQ_);
	T1_ = (NimStringDesc*)0;
	T1_ = rawNewString(message->Sup.len + arg->Sup.len + 0);
appendString(T1_, message);
appendString(T1_, arg);
	asgnRefNoCycle((void**) (&(*e).Sup.Sup.message), T1_);
	nimrtl_raiseException((Exception*)e, "IOError");
}

N_NIMCALL(NimStringDesc*, readFile_T9cm5LIRX2tKEH9aREBZ8A0w)(NimStringDesc* filename) {
	NimStringDesc* volatile result;
	FILE* f;
	result = (NimStringDesc*)0;
	f = (FILE*)0;
	{
		NIM_BOOL T3_;
		TSafePoint TM_Q5wkpxktOdTGvlSRo9bzt9aw_56;
		T3_ = (NIM_BOOL)0;
		T3_ = open_sEp0GH2306oGo9bqBpj5oTQ(&f, filename, ((FileMode_fVUBHvW79bXUw1j55Oo9avSQ) 0), ((NI) -1));
		if (!T3_) goto LA4_;
		nimrtl_pushSafePoint(&TM_Q5wkpxktOdTGvlSRo9bzt9aw_56);
		TM_Q5wkpxktOdTGvlSRo9bzt9aw_56.status = setjmp(TM_Q5wkpxktOdTGvlSRo9bzt9aw_56.context);
		if (TM_Q5wkpxktOdTGvlSRo9bzt9aw_56.status == 0) {
			result = readAll_y7iEIBoIrYlvsLCqA1SrwQ(f);
			nimrtl_popSafePoint();
		}
		else {
			nimrtl_popSafePoint();
		}
		{
			close_BWnr8V7RERYno9bIdPmw8Hw_2(f);
		}
		if (TM_Q5wkpxktOdTGvlSRo9bzt9aw_56.status != 0) nimrtl_reraiseException();
	}
	goto LA1_;
	LA4_: ;
	{
		sysFatal_p4l3kdztdOPD3nsQRAEDqwsystem(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_57), filename);
	}
	LA1_: ;
	return result;
}

N_NIMCALL(void, write_c4mGyJBvK73pdM22jiweKQ)(FILE* f, NimStringDesc* s) {
	{
		NI T3_;
		T3_ = (NI)0;
		T3_ = writeBuffer_nZ0pNe9cd9cXtoayexCiaDtA_2(f, ((void*) (s->data)), ((NI) ((s ? s->Sup.len : 0))));
		if (!!((T3_ == (s ? s->Sup.len : 0)))) goto LA4_;
		raiseEIO_PpfSiTIeNpMAb9a5o6SglJw(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_59));
	}
	LA4_: ;
}

N_NIMCALL(void, writeFile_c1B29b0ZdDRPHc27YaKqwaA)(NimStringDesc* filename, NimStringDesc* content) {
	FILE* f;
	f = (FILE*)0;
	{
		NIM_BOOL T3_;
		TSafePoint TM_Q5wkpxktOdTGvlSRo9bzt9aw_58;
		T3_ = (NIM_BOOL)0;
		T3_ = open_sEp0GH2306oGo9bqBpj5oTQ(&f, filename, ((FileMode_fVUBHvW79bXUw1j55Oo9avSQ) 1), ((NI) -1));
		if (!T3_) goto LA4_;
		nimrtl_pushSafePoint(&TM_Q5wkpxktOdTGvlSRo9bzt9aw_58);
		TM_Q5wkpxktOdTGvlSRo9bzt9aw_58.status = setjmp(TM_Q5wkpxktOdTGvlSRo9bzt9aw_58.context);
		if (TM_Q5wkpxktOdTGvlSRo9bzt9aw_58.status == 0) {
			write_c4mGyJBvK73pdM22jiweKQ(f, content);
			nimrtl_popSafePoint();
		}
		else {
			nimrtl_popSafePoint();
		}
		{
			close_BWnr8V7RERYno9bIdPmw8Hw_2(f);
		}
		if (TM_Q5wkpxktOdTGvlSRo9bzt9aw_58.status != 0) nimrtl_reraiseException();
	}
	goto LA1_;
	LA4_: ;
	{
		sysFatal_p4l3kdztdOPD3nsQRAEDqwsystem(((NimStringDesc*) &TM_Q5wkpxktOdTGvlSRo9bzt9aw_57), filename);
	}
	LA1_: ;
}
static N_NIMCALL(void, Marker_TY_xyYfiXqv9bXR7uHakYC9cy3A)(void* p, NI op) {
	TY_xyYfiXqv9bXR7uHakYC9cy3A* a;
	NI T1_;
	a = (TY_xyYfiXqv9bXR7uHakYC9cy3A*)p;
	T1_ = (NI)0;
	for (T1_ = 0; T1_ < a->Sup.len; T1_++) {
	nimrtl_nimGCvisit((void*)a->data[T1_], op);
	}
}

N_NIMCALL(NCSTRING*, allocCStringArray_TG6GWpa9cdnVJVGZxJaqBJg)(NimStringDesc** a, NI aLen_0) {
	NCSTRING* result;
	void* T1_;
	NimStringDesc** x;
	result = (NCSTRING*)0;
	T1_ = (void*)0;
	T1_ = nimrtl_alloc0(((NI) ((NI)((NI)(aLen_0 + ((NI) 1)) * ((NI) 4)))));
	result = ((NCSTRING*) (T1_));
	x = ((NimStringDesc**) (a));
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (aLen_0-1);
		res = ((NI) 0);
		{
			while (1) {
				void* T5_;
				if (!(res <= colontmp_)) goto LA4;
				i = res;
				T5_ = (void*)0;
				T5_ = nimrtl_alloc0(((NI) ((NI)((x[(i)- 0] ? x[(i)- 0]->Sup.len : 0) + ((NI) 1)))));
				result[(i)- 0] = ((NCSTRING) (T5_));
				copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem(((void*) (result[(i)- 0])), ((void*) ((&x[(i)- 0]->data[((NI) 0)]))), ((NI) ((x[(i)- 0] ? x[(i)- 0]->Sup.len : 0))));
				res += ((NI) 1);
			} LA4: ;
		}
	}
	return result;
}

N_NIMCALL(void, deallocCStringArray_PrKbmufafP6J0HO6K4x3tQ)(NCSTRING* a) {
	NI i;
	i = ((NI) 0);
	{
		while (1) {
			if (!!((((void*) (a[(i)- 0])) == NIM_NIL))) goto LA2;
			nimrtl_dealloc(((void*) (a[(i)- 0])));
			i += ((NI) 1);
		} LA2: ;
	}
	nimrtl_dealloc(((void*) (a)));
}

N_NIMCALL(NIM_BOOL, open_GRr4dBTChSldEteMxZDsuw)(FILE** f, int filehandle, FileMode_fVUBHvW79bXUw1j55Oo9avSQ mode) {
	NIM_BOOL result;
	result = (NIM_BOOL)0;
	(*f) = fdopen(filehandle, FormatOpen_129cS4U5eK4wWqE9bNeKN1Aw[(mode)- 0]->data);
	result = !(((*f) == NIM_NIL));
	return result;
}
NIM_EXTERNC N_NOINLINE(void, systemInit000)(void) {
	TNimType T1_;
nimRegisterGlobalMarker(TM_Q5wkpxktOdTGvlSRo9bzt9aw_4);
	nimvm_IAxmsqnME4Jmed24hOgrFQ = NIM_FALSE;
	memset((void*)(&T1_), 0, sizeof(T1_));
	T1_.size = ((NI) 4);
	T1_.kind = ((TNimKind_jIBKr1ejBgsfM33Kxw4j7A) 28);
	T1_.flags = 2;
	strDesc_D0UzA4zsDu5tgpJQ9a9clXPg = T1_;
	initAllocator_IZ2oOmqdsYQ7vixQGKSDcAsystem();
	initGC_njssp69aa7hvxte9bJ8uuDcg();
	registerSignalHandler_njssp69aa7hvxte9bJ8uuDcg_3();
}

NIM_EXTERNC N_NOINLINE(void, systemDatInit000)(void) {
static TNimNode* TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[4];
static TNimNode TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[18];
NTI_13RNkKqUOX1TtorOUlKtqA_.size = sizeof(TNimObject);
NTI_13RNkKqUOX1TtorOUlKtqA_.kind = 17;
NTI_13RNkKqUOX1TtorOUlKtqA_.base = 0;
NTI_13RNkKqUOX1TtorOUlKtqA_.flags = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[0].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[0].kind = 2;
NTI_13RNkKqUOX1TtorOUlKtqA_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[0];
NTI_bAvOj2UcojKN87yAQLs0aw_.size = sizeof(Exception);
NTI_bAvOj2UcojKN87yAQLs0aw_.kind = 17;
NTI_bAvOj2UcojKN87yAQLs0aw_.base = (&NTI_13RNkKqUOX1TtorOUlKtqA_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[0] = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[2];
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[2].kind = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[2].offset = offsetof(Exception, parent);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[2].typ = (&NTI_oUKtBcKRdK6usj8RWrlp6A_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[2].name = "parent";
TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[1] = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[3];
NTI_S9agCYBinaYZnGWcjTdxclg_.size = sizeof(NCSTRING);
NTI_S9agCYBinaYZnGWcjTdxclg_.kind = 29;
NTI_S9agCYBinaYZnGWcjTdxclg_.base = 0;
NTI_S9agCYBinaYZnGWcjTdxclg_.flags = 3;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[3].kind = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[3].offset = offsetof(Exception, name);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[3].typ = (&NTI_S9agCYBinaYZnGWcjTdxclg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[3].name = "name";
TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[2] = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[4];
NTI_77mFvmsOLKik79ci2hXkHEg_.size = sizeof(NimStringDesc*);
NTI_77mFvmsOLKik79ci2hXkHEg_.kind = 28;
NTI_77mFvmsOLKik79ci2hXkHEg_.base = 0;
NTI_77mFvmsOLKik79ci2hXkHEg_.flags = 2;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[4].kind = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[4].offset = offsetof(Exception, message);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[4].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[4].name = "msg";
TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[3] = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[5];
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[5].kind = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[5].offset = offsetof(Exception, trace);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[5].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[5].name = "trace";
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[1].len = 4; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[1].kind = 2; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[1].sons = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_3[0];
NTI_bAvOj2UcojKN87yAQLs0aw_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[1];
NTI_oUKtBcKRdK6usj8RWrlp6A_.size = sizeof(Exception*);
NTI_oUKtBcKRdK6usj8RWrlp6A_.kind = 22;
NTI_oUKtBcKRdK6usj8RWrlp6A_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
NTI_oUKtBcKRdK6usj8RWrlp6A_.marker = Marker_TY_oUKtBcKRdK6usj8RWrlp6A;
NTI_Fjf9b9b2IlzRO2tspHxG3tgg_.size = sizeof(SystemError_Fjf9b9b2IlzRO2tspHxG3tgg);
NTI_Fjf9b9b2IlzRO2tspHxG3tgg_.kind = 17;
NTI_Fjf9b9b2IlzRO2tspHxG3tgg_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[6].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[6].kind = 2;
NTI_Fjf9b9b2IlzRO2tspHxG3tgg_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[6];
NTI_NrupLB36t9bV7iFDHtrF69aw_.size = sizeof(OutOfMemError_NrupLB36t9bV7iFDHtrF69aw);
NTI_NrupLB36t9bV7iFDHtrF69aw_.kind = 17;
NTI_NrupLB36t9bV7iFDHtrF69aw_.base = (&NTI_Fjf9b9b2IlzRO2tspHxG3tgg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[7].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[7].kind = 2;
NTI_NrupLB36t9bV7iFDHtrF69aw_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[7];
NTI_9czoZw3pzPyrBmb5zTHY1OQ_.size = sizeof(IOError_9czoZw3pzPyrBmb5zTHY1OQ);
NTI_9czoZw3pzPyrBmb5zTHY1OQ_.kind = 17;
NTI_9czoZw3pzPyrBmb5zTHY1OQ_.base = (&NTI_Fjf9b9b2IlzRO2tspHxG3tgg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[8].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[8].kind = 2;
NTI_9czoZw3pzPyrBmb5zTHY1OQ_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[8];
NTI_HX2M9cQhE3jaovp9aYJDdslA_.size = sizeof(IOError_9czoZw3pzPyrBmb5zTHY1OQ*);
NTI_HX2M9cQhE3jaovp9aYJDdslA_.kind = 22;
NTI_HX2M9cQhE3jaovp9aYJDdslA_.base = (&NTI_9czoZw3pzPyrBmb5zTHY1OQ_);
NTI_HX2M9cQhE3jaovp9aYJDdslA_.marker = Marker_TY_HX2M9cQhE3jaovp9aYJDdslA;
NTI_GRbrBa7JIulgD34jGcFb8w_.size = sizeof(ReraiseError_GRbrBa7JIulgD34jGcFb8w);
NTI_GRbrBa7JIulgD34jGcFb8w_.kind = 17;
NTI_GRbrBa7JIulgD34jGcFb8w_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[9].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[9].kind = 2;
NTI_GRbrBa7JIulgD34jGcFb8w_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[9];
NTI_beOxjNaux3PfvyYBLMJh2A_.size = sizeof(ReraiseError_GRbrBa7JIulgD34jGcFb8w*);
NTI_beOxjNaux3PfvyYBLMJh2A_.kind = 22;
NTI_beOxjNaux3PfvyYBLMJh2A_.base = (&NTI_GRbrBa7JIulgD34jGcFb8w_);
NTI_beOxjNaux3PfvyYBLMJh2A_.marker = Marker_TY_beOxjNaux3PfvyYBLMJh2A;
NTI_QcJsjWXxMFpjHfkCIK5ExA_.size = sizeof(ArithmeticError_QcJsjWXxMFpjHfkCIK5ExA);
NTI_QcJsjWXxMFpjHfkCIK5ExA_.kind = 17;
NTI_QcJsjWXxMFpjHfkCIK5ExA_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[10].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[10].kind = 2;
NTI_QcJsjWXxMFpjHfkCIK5ExA_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[10];
NTI_I3Jtn27626sFBOls6BBQ2Q_.size = sizeof(OverflowError_I3Jtn27626sFBOls6BBQ2Q);
NTI_I3Jtn27626sFBOls6BBQ2Q_.kind = 17;
NTI_I3Jtn27626sFBOls6BBQ2Q_.base = (&NTI_QcJsjWXxMFpjHfkCIK5ExA_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[11].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[11].kind = 2;
NTI_I3Jtn27626sFBOls6BBQ2Q_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[11];
NTI_6woiEp3hwhYMr1p5tjkZvA_.size = sizeof(OverflowError_I3Jtn27626sFBOls6BBQ2Q*);
NTI_6woiEp3hwhYMr1p5tjkZvA_.kind = 22;
NTI_6woiEp3hwhYMr1p5tjkZvA_.base = (&NTI_I3Jtn27626sFBOls6BBQ2Q_);
NTI_6woiEp3hwhYMr1p5tjkZvA_.marker = Marker_TY_6woiEp3hwhYMr1p5tjkZvA;
NTI_8FC9arcap3s5ZtfMs75krtA_.size = sizeof(AssertionError_8FC9arcap3s5ZtfMs75krtA);
NTI_8FC9arcap3s5ZtfMs75krtA_.kind = 17;
NTI_8FC9arcap3s5ZtfMs75krtA_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[12].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[12].kind = 2;
NTI_8FC9arcap3s5ZtfMs75krtA_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[12];
NTI_TmgWlPUbRr7iGD2UE1cu6A_.size = sizeof(AssertionError_8FC9arcap3s5ZtfMs75krtA*);
NTI_TmgWlPUbRr7iGD2UE1cu6A_.kind = 22;
NTI_TmgWlPUbRr7iGD2UE1cu6A_.base = (&NTI_8FC9arcap3s5ZtfMs75krtA_);
NTI_TmgWlPUbRr7iGD2UE1cu6A_.marker = Marker_TY_TmgWlPUbRr7iGD2UE1cu6A;
NTI_Gi06FkNeykJn7mrqRZYrkA_.size = sizeof(ValueError_Gi06FkNeykJn7mrqRZYrkA);
NTI_Gi06FkNeykJn7mrqRZYrkA_.kind = 17;
NTI_Gi06FkNeykJn7mrqRZYrkA_.base = (&NTI_bAvOj2UcojKN87yAQLs0aw_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[13].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[13].kind = 2;
NTI_Gi06FkNeykJn7mrqRZYrkA_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[13];
NTI_yCEN9anxCD6mzBxGjuaRBdg_.size = sizeof(ValueError_Gi06FkNeykJn7mrqRZYrkA*);
NTI_yCEN9anxCD6mzBxGjuaRBdg_.kind = 22;
NTI_yCEN9anxCD6mzBxGjuaRBdg_.base = (&NTI_Gi06FkNeykJn7mrqRZYrkA_);
NTI_yCEN9anxCD6mzBxGjuaRBdg_.marker = Marker_TY_yCEN9anxCD6mzBxGjuaRBdg;
NTI_rR5Bzr1D5krxoo1NcNyeMA_.size = sizeof(NI);
NTI_rR5Bzr1D5krxoo1NcNyeMA_.kind = 31;
NTI_rR5Bzr1D5krxoo1NcNyeMA_.base = 0;
NTI_rR5Bzr1D5krxoo1NcNyeMA_.flags = 3;
NTI_Uk8TiHqxGdO37NabyvfS5g_.size = sizeof(NI);
NTI_Uk8TiHqxGdO37NabyvfS5g_.kind = 31;
NTI_Uk8TiHqxGdO37NabyvfS5g_.base = 0;
NTI_Uk8TiHqxGdO37NabyvfS5g_.flags = 3;
NTI_LBgXxpmYOpS8xroRZgNvbg_.size = sizeof(NI);
NTI_LBgXxpmYOpS8xroRZgNvbg_.kind = 31;
NTI_LBgXxpmYOpS8xroRZgNvbg_.base = 0;
NTI_LBgXxpmYOpS8xroRZgNvbg_.flags = 3;
NTI_Gz6vwaK0PZQIDIwfuvKsOg_.size = sizeof(NI);
NTI_Gz6vwaK0PZQIDIwfuvKsOg_.kind = 31;
NTI_Gz6vwaK0PZQIDIwfuvKsOg_.base = 0;
NTI_Gz6vwaK0PZQIDIwfuvKsOg_.flags = 3;
NTI_DcZ5N67dL3rBj9bxGtx09bFg_.size = sizeof(NI);
NTI_DcZ5N67dL3rBj9bxGtx09bFg_.kind = 31;
NTI_DcZ5N67dL3rBj9bxGtx09bFg_.base = 0;
NTI_DcZ5N67dL3rBj9bxGtx09bFg_.flags = 3;
NTI_g9buja9c9aeh0rkDpqsXOJF9bA_.size = sizeof(NI);
NTI_g9buja9c9aeh0rkDpqsXOJF9bA_.kind = 31;
NTI_g9buja9c9aeh0rkDpqsXOJF9bA_.base = 0;
NTI_g9buja9c9aeh0rkDpqsXOJF9bA_.flags = 3;
NTI_VaVACK0bpYmqIQ0mKcHfQQ_.size = sizeof(NIM_BOOL);
NTI_VaVACK0bpYmqIQ0mKcHfQQ_.kind = 1;
NTI_VaVACK0bpYmqIQ0mKcHfQQ_.base = 0;
NTI_VaVACK0bpYmqIQ0mKcHfQQ_.flags = 3;
NTI_le1LLqP8alYTev1dbGWJlg_.size = sizeof(NilAccessError_le1LLqP8alYTev1dbGWJlg);
NTI_le1LLqP8alYTev1dbGWJlg_.kind = 17;
NTI_le1LLqP8alYTev1dbGWJlg_.base = (&NTI_Fjf9b9b2IlzRO2tspHxG3tgg_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[14].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[14].kind = 2;
NTI_le1LLqP8alYTev1dbGWJlg_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[14];
NTI_iCd9aJMEo0ovVcW5hQQKhzg_.size = sizeof(NilAccessError_le1LLqP8alYTev1dbGWJlg*);
NTI_iCd9aJMEo0ovVcW5hQQKhzg_.kind = 22;
NTI_iCd9aJMEo0ovVcW5hQQKhzg_.base = (&NTI_le1LLqP8alYTev1dbGWJlg_);
NTI_iCd9aJMEo0ovVcW5hQQKhzg_.marker = Marker_TY_iCd9aJMEo0ovVcW5hQQKhzg;
NTI_3XwRQvmzCEOC4QnT706q1g_.size = sizeof(OSError_3XwRQvmzCEOC4QnT706q1g);
NTI_3XwRQvmzCEOC4QnT706q1g_.kind = 17;
NTI_3XwRQvmzCEOC4QnT706q1g_.base = (&NTI_Fjf9b9b2IlzRO2tspHxG3tgg_);
NTI_sVg18TP9cLifHyygRe9cro9aA_.size = sizeof(NI32);
NTI_sVg18TP9cLifHyygRe9cro9aA_.kind = 34;
NTI_sVg18TP9cLifHyygRe9cro9aA_.base = 0;
NTI_sVg18TP9cLifHyygRe9cro9aA_.flags = 3;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[15].kind = 1;
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[15].offset = offsetof(OSError_3XwRQvmzCEOC4QnT706q1g, errorCode);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[15].typ = (&NTI_sVg18TP9cLifHyygRe9cro9aA_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[15].name = "errorCode";
NTI_3XwRQvmzCEOC4QnT706q1g_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[15];
NTI_Qx9aKy4vZ9bVz9bnG9brQcRHGA_.size = sizeof(OSError_3XwRQvmzCEOC4QnT706q1g*);
NTI_Qx9aKy4vZ9bVz9bnG9brQcRHGA_.kind = 22;
NTI_Qx9aKy4vZ9bVz9bnG9brQcRHGA_.base = (&NTI_3XwRQvmzCEOC4QnT706q1g_);
NTI_Qx9aKy4vZ9bVz9bnG9brQcRHGA_.marker = Marker_TY_Qx9aKy4vZ9bVz9bnG9brQcRHGA;
NTI_ifYAhUumNzWR9c9cN9amyJLtg_.size = sizeof(KeyError_ifYAhUumNzWR9c9cN9amyJLtg);
NTI_ifYAhUumNzWR9c9cN9amyJLtg_.kind = 17;
NTI_ifYAhUumNzWR9c9cN9amyJLtg_.base = (&NTI_Gi06FkNeykJn7mrqRZYrkA_);
TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[16].len = 0; TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[16].kind = 2;
NTI_ifYAhUumNzWR9c9cN9amyJLtg_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[16];
NTI_axqhRnwd09cVJkRcojfw6mA_.size = sizeof(KeyError_ifYAhUumNzWR9c9cN9amyJLtg*);
NTI_axqhRnwd09cVJkRcojfw6mA_.kind = 22;
NTI_axqhRnwd09cVJkRcojfw6mA_.base = (&NTI_ifYAhUumNzWR9c9cN9amyJLtg_);
NTI_axqhRnwd09cVJkRcojfw6mA_.marker = Marker_TY_axqhRnwd09cVJkRcojfw6mA;
NTI_nmiMWKVIe46vacnhAFrQvw_.size = sizeof(NIM_CHAR);
NTI_nmiMWKVIe46vacnhAFrQvw_.kind = 2;
NTI_nmiMWKVIe46vacnhAFrQvw_.base = 0;
NTI_nmiMWKVIe46vacnhAFrQvw_.flags = 3;
NTI_a9bIsIkdQvQMv0xYGrfgSag_.size = sizeof(NI);
NTI_a9bIsIkdQvQMv0xYGrfgSag_.kind = 31;
NTI_a9bIsIkdQvQMv0xYGrfgSag_.base = 0;
NTI_a9bIsIkdQvQMv0xYGrfgSag_.flags = 3;
NTI_xyYfiXqv9bXR7uHakYC9cy3A_.size = sizeof(TY_xyYfiXqv9bXR7uHakYC9cy3A*);
NTI_xyYfiXqv9bXR7uHakYC9cy3A_.kind = 24;
NTI_xyYfiXqv9bXR7uHakYC9cy3A_.base = (&NTI_VYsfqmmqchsY5XzU9aJJBBA_);
NTI_xyYfiXqv9bXR7uHakYC9cy3A_.flags = 2;
NTI_xyYfiXqv9bXR7uHakYC9cy3A_.marker = Marker_TY_xyYfiXqv9bXR7uHakYC9cy3A;
NTI_UtShRB9b1wZO9cvpdowm9cefA_.size = sizeof(int);
NTI_UtShRB9b1wZO9cvpdowm9cefA_.kind = 34;
NTI_UtShRB9b1wZO9cvpdowm9cefA_.base = 0;
NTI_UtShRB9b1wZO9cvpdowm9cefA_.flags = 3;
NTI_nlCscttRCss70IBTyuBqnA_.size = sizeof(int);
NTI_nlCscttRCss70IBTyuBqnA_.kind = 34;
NTI_nlCscttRCss70IBTyuBqnA_.base = 0;
NTI_nlCscttRCss70IBTyuBqnA_.flags = 3;
NTI_9bz2muykEFR6eMHxLnfcjxA_.size = sizeof(void*);
NTI_9bz2muykEFR6eMHxLnfcjxA_.kind = 18;
NTI_9bz2muykEFR6eMHxLnfcjxA_.base = 0;
NTI_9bz2muykEFR6eMHxLnfcjxA_.flags = 3;
NTI_9bz2muykEFR6eMHxLnfcjxA_.node = &TM_Q5wkpxktOdTGvlSRo9bzt9aw_0[17];
NTI_7BHnQsEj49a9c6QtudqWTo1w_.size = sizeof(FILE*);
NTI_7BHnQsEj49a9c6QtudqWTo1w_.kind = 21;
NTI_7BHnQsEj49a9c6QtudqWTo1w_.base = (&NTI_9bz2muykEFR6eMHxLnfcjxA_);
NTI_7BHnQsEj49a9c6QtudqWTo1w_.flags = 3;
}

