/* Generated by Nim Compiler v0.19.4 */
/*   (c) 2018 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_NEW_MANGLING_RULES
#define NIM_INTBITS 32

#include "nimbase.h"
#include <string.h>
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
typedef struct tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw;
typedef struct tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug;
typedef struct tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q;
typedef struct tySequence_Mh9agqM29bm9aP5AUL1x7dZGA tySequence_Mh9agqM29bm9aP5AUL1x7dZGA;
typedef struct tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w;
typedef struct tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg;
typedef struct tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q;
typedef struct tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w;
typedef struct RootObj RootObj;
typedef struct tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ;
typedef struct tyObject_TScope_1cQRXW6aAknk7ywAwjH3nw tyObject_TScope_1cQRXW6aAknk7ywAwjH3nw;
typedef struct tyObject_TProcCon_s5jyYR8yL1QmFqiHICzU9aQ tyObject_TProcCon_s5jyYR8yL1QmFqiHICzU9aQ;
typedef struct tyObject_TMatchedConcept_9blNHn9cqK8EfxnwsfjDnKvg tyObject_TMatchedConcept_9blNHn9cqK8EfxnwsfjDnKvg;
typedef struct tySequence_DfgJFJEYoj4YBAHLZPl5lQ tySequence_DfgJFJEYoj4YBAHLZPl5lQ;
typedef struct tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg;
typedef struct tyObject_Trunk_ul49aWfv9aes8cutmeltT3gQ tyObject_Trunk_ul49aWfv9aes8cutmeltT3gQ;
typedef struct tySequence_9brg1xNurxcus33lU4IE1Dw tySequence_9brg1xNurxcus33lU4IE1Dw;
typedef struct tySequence_oYkV9aFZe0MXcEAprJaOUsA tySequence_oYkV9aFZe0MXcEAprJaOUsA;
typedef struct tySequence_arD7Tw6eD6lvOczWZl9buNg tySequence_arD7Tw6eD6lvOczWZl9buNg;
typedef struct tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA;
typedef struct tyObject_TCtx_S3Av1Ng7MBWGEZZBhfDYCw tyObject_TCtx_S3Av1Ng7MBWGEZZBhfDYCw;
typedef struct tySequence_jWKvSdankQPoT5bw9cBU9aiw tySequence_jWKvSdankQPoT5bw9cBU9aiw;
typedef struct tyObject_TIdent_GufRQq9c0miSybX3zBD4tyA tyObject_TIdent_GufRQq9c0miSybX3zBD4tyA;
typedef struct tyObject_IdentCachecolonObjectType__TzLHS09bRH9a0TYLs39cqcNaw tyObject_IdentCachecolonObjectType__TzLHS09bRH9a0TYLs39cqcNaw;
typedef struct tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct tySequence_YceFcaugL2PWNtVbyffD9bQ tySequence_YceFcaugL2PWNtVbyffD9bQ;
typedef struct tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA;
typedef struct tySequence_Ef05srmQTDulnBdXR4Ja6Q tySequence_Ef05srmQTDulnBdXR4Ja6Q;
typedef struct tySequence_DXS6mEo7PVUFJkirsQ9bNQA tySequence_DXS6mEo7PVUFJkirsQ9bNQA;
typedef struct tyObject_TLoc_EtHNvCB0bgfu9bFjzx9cb6aA tyObject_TLoc_EtHNvCB0bgfu9bFjzx9cb6aA;
typedef struct tyObject_RopeObj_OFzf0kSiPTcNreUIeJgWVA tyObject_RopeObj_OFzf0kSiPTcNreUIeJgWVA;
typedef struct tyObject_TLib_NBMxlJ6g3utqUlplqTTHkA tyObject_TLib_NBMxlJ6g3utqUlplqTTHkA;
typedef struct tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ;
typedef struct tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw;
typedef struct tyObject_Table_e2Ciu0s1q49aVQ7ULXy7l9bQ tyObject_Table_e2Ciu0s1q49aVQ7ULXy7l9bQ;
typedef struct tySequence_kxu4GK0onha2t9bo86mdVAg tySequence_kxu4GK0onha2t9bo86mdVAg;
typedef struct tySequence_48JTohSgTy339bRxHzUD8KA tySequence_48JTohSgTy339bRxHzUD8KA;
typedef struct tySequence_bWZXqEvLFwhLvAqSRoFNgQ tySequence_bWZXqEvLFwhLvAqSRoFNgQ;
typedef struct tyObject_IncrementalCtx_sdH7TnbKACuAzE7DBabnCA tyObject_IncrementalCtx_sdH7TnbKACuAzE7DBabnCA;
typedef struct tyObject_Table_0Y2brGGKD9bV6GJLXT9aUDgA tyObject_Table_0Y2brGGKD9bV6GJLXT9aUDgA;
typedef struct tySequence_23SMqauuRsbDANhthj9bWlA tySequence_23SMqauuRsbDANhthj9bWlA;
typedef struct tyObject_Table_NttoEzoiq5CiphZe81oadg tyObject_Table_NttoEzoiq5CiphZe81oadg;
typedef struct tySequence_squ9b9bUH4OLHf6cEMrt6hVA tySequence_squ9b9bUH4OLHf6cEMrt6hVA;
typedef struct tyObject_Table_nagDFX4QHx0s6Fvma9blmSg tyObject_Table_nagDFX4QHx0s6Fvma9blmSg;
typedef struct tySequence_pHNq3oXj9av2sEUdqaqeZjw tySequence_pHNq3oXj9av2sEUdqaqeZjw;
typedef struct tySequence_PzqTLBFNawCGiqTk0UORYw tySequence_PzqTLBFNawCGiqTk0UORYw;
typedef struct tySequence_MvZmat48bhe9b6x9aUD58D5Q tySequence_MvZmat48bhe9b6x9aUD58D5Q;
typedef struct tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g;
typedef struct tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w;
typedef struct tyObject_GcHeap_1TRH1TZMaVZTnLNcIHuNFQ tyObject_GcHeap_1TRH1TZMaVZTnLNcIHuNFQ;
typedef struct tyObject_GcStack_7fytPA5bBsob6See21YMRA tyObject_GcStack_7fytPA5bBsob6See21YMRA;
typedef struct tyObject_MemRegion_x81NhDv59b8ercDZ9bi85jyg tyObject_MemRegion_x81NhDv59b8ercDZ9bi85jyg;
typedef struct tyObject_SmallChunk_tXn60W2f8h3jgAYdEmy5NQ tyObject_SmallChunk_tXn60W2f8h3jgAYdEmy5NQ;
typedef struct tyObject_BigChunk_Rv9c70Uhp2TytkX7eH78qEg tyObject_BigChunk_Rv9c70Uhp2TytkX7eH78qEg;
typedef struct tyObject_LLChunk_XsENErzHIZV9bhvyJx56wGw tyObject_LLChunk_XsENErzHIZV9bhvyJx56wGw;
typedef struct tyObject_IntSet_EZObFrE3NC9bIb3YMkY9crZA tyObject_IntSet_EZObFrE3NC9bIb3YMkY9crZA;
typedef struct tyObject_Trunk_W0r8S0Y3UGke6T9bIUWnnuw tyObject_Trunk_W0r8S0Y3UGke6T9bIUWnnuw;
typedef struct tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw;
typedef struct tyObject_HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg tyObject_HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg;
typedef struct tyTuple_ujsjpB2O9cjj3uDHsXbnSzg tyTuple_ujsjpB2O9cjj3uDHsXbnSzg;
typedef struct tyObject_GcStat_0RwLoVBHZPfUAcLczmfQAg tyObject_GcStat_0RwLoVBHZPfUAcLczmfQAg;
typedef struct tyObject_CellSet_jG87P0AI9aZtss9ccTYBIISQ tyObject_CellSet_jG87P0AI9aZtss9ccTYBIISQ;
typedef struct tyObject_PageDesc_fublkgIY4LG3mT51LU2WHg tyObject_PageDesc_fublkgIY4LG3mT51LU2WHg;
typedef struct tyTuple_KlSLWBROOViO04uLQHu7ig tyTuple_KlSLWBROOViO04uLQHu7ig;
typedef struct tyTuple_zwpS6d6iewrdlBSTNFoyVA tyTuple_zwpS6d6iewrdlBSTNFoyVA;
typedef struct tyTuple_kN8up2W6YKc5YA9avn5mV5w tyTuple_kN8up2W6YKc5YA9avn5mV5w;
typedef struct tyObject_TIdPair_AdFnD2YdADPeuJbG2YJ4vg tyObject_TIdPair_AdFnD2YdADPeuJbG2YJ4vg;
typedef struct tyObject_TOptionEntry_H9ac5KbrDJVwT1zH5O83r7w tyObject_TOptionEntry_H9ac5KbrDJVwT1zH5O83r7w;
typedef struct tyObject_TInstantiationPair_HkXM4cJmOpk8zFcmq9c9c3gQ tyObject_TInstantiationPair_HkXM4cJmOpk8zFcmq9c9c3gQ;
typedef struct tyObject_TInstantiation_5LqgVn6Tq9ainQRK7TQAQxA tyObject_TInstantiation_5LqgVn6Tq9ainQRK7TQAQxA;
typedef struct tyTuple_xDU9bZmv1ZbZkJDaATBekIQ tyTuple_xDU9bZmv1ZbZkJDaATBekIQ;
typedef struct tyTuple_quA39a2QdEQU9cSEIUSibApQ tyTuple_quA39a2QdEQU9cSEIUSibApQ;
typedef struct tyTuple_2SGm9aGCXuo7XSQ9bqD29axXw tyTuple_2SGm9aGCXuo7XSQ9bqD29axXw;
typedef struct tyTuple_F3gkSrMB1qp2Tvf9bixVXwg tyTuple_F3gkSrMB1qp2Tvf9bixVXwg;
typedef struct tyTuple_wcNatyuf8WOqAhGLhSvgiw tyTuple_wcNatyuf8WOqAhGLhSvgiw;
typedef struct tyObject_BTree_VZdzO0Tlflp7WMN4gS8oPg tyObject_BTree_VZdzO0Tlflp7WMN4gS8oPg;
typedef struct tyObject_NodecolonObjectType__dNELmBSmY7nthjhZupWO6g tyObject_NodecolonObjectType__dNELmBSmY7nthjhZupWO6g;
typedef struct tyTuple_euPCXX9bc3XzndEhYlqNS7g tyTuple_euPCXX9bc3XzndEhYlqNS7g;
struct tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q {
NI counter;
tySequence_Mh9agqM29bm9aP5AUL1x7dZGA* data;
};
struct tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA {
tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q topLayer;
tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* nextLayer;
};
typedef NU8 tyEnum_TNimKind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 tySet_tyEnum_TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ;
typedef N_NIMCALL_PTR(void, tyProc_ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, tyProc_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
struct TNimType {
NI size;
tyEnum_TNimKind_jIBKr1ejBgsfM33Kxw4j7A kind;
tySet_tyEnum_TNimTypeFlag_v8QUszD1sWlSIWZz7mC4bQ flags;
TNimType* base;
TNimNode* node;
void* finalizer;
tyProc_ojoeKfW4VYIm36I9cpDTQIg marker;
tyProc_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 tyEnum_TNimNodeKind_unfNsxrcATrufDZmpBq4HQ;
struct TNimNode {
tyEnum_TNimNodeKind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q {
NU16 line;
NI16 col;
NI32 fileIndex;
};
struct tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg {
tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c;
tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* typeMap;
tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q symMap;
tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q localCache;
tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info;
NIM_BOOL allowMetaTypes;
NIM_BOOL skipTypedesc;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner;
NI recursionLimit;
};
struct RootObj {
TNimType* m_type;
};
struct tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w {
  RootObj Sup;
};
typedef NI tyArray_emiAJ8okywrJw7ZHLzlXbQ[34];
struct tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg {
NI elems;
NI counter;
NI max;
tyObject_Trunk_ul49aWfv9aes8cutmeltT3gQ* head;
tySequence_9brg1xNurxcus33lU4IE1Dw* data;
tyArray_emiAJ8okywrJw7ZHLzlXbQ a;
};
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_RcJNn9bSvWdJgUmA1O6sbHA) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
typedef NU32 tySet_tyEnum_TExprFlag_0WWd9a4ssQWuY7Q6ZKepq9cQ;
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_39auogS0nN05zO6JrT7za9cQ) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, tySet_tyEnum_TExprFlag_0WWd9a4ssQWuY7Q6ZKepq9cQ flags);
typedef NU32 tySet_tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw;
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_qlV9aWvA5wrWVg9bI5PqwJyA) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* nOrig, tySet_tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw filter, tySet_tyEnum_TExprFlag_0WWd9a4ssQWuY7Q6ZKepq9cQ flags);
typedef N_NIMCALL_PTR(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, tyProc_PiEiMdzXg9bcm3lEo4Q6iNw) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* prev);
typedef struct {
N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, ClP_0) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, void* ClE_0);
void* ClE_0;
} tyProc_icITxWxlFufT9aDDCEKD2VQ;
typedef struct {
N_NIMCALL_PTR(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, ClP_0) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* fn, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, void* ClE_0);
void* ClE_0;
} tyProc_GeenfmDntvGEQoCko16JtA;
struct tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA {
NI counter;
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* data;
};
typedef NU8 tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ;
typedef N_NIMCALL_PTR(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, tyProc_MdeusG9ckwmEe4HM4kmvN6w) (tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* dc, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ op, NI col);
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NU16 tySet_tyEnum_Feature_01UoAKYz1MxZiuG1X2VhNQ;
struct tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug {
  tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w Sup;
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* enforceVoidContext;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* module;
tyObject_TScope_1cQRXW6aAknk7ywAwjH3nw* currentScope;
tyObject_TScope_1cQRXW6aAknk7ywAwjH3nw* importTable;
tyObject_TScope_1cQRXW6aAknk7ywAwjH3nw* topLevelScope;
tyObject_TProcCon_s5jyYR8yL1QmFqiHICzU9aQ* p;
tyObject_TMatchedConcept_9blNHn9cqK8EfxnwsfjDnKvg* matchedConcept;
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* friendModules;
NI instCounter;
tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg ambiguousSymbols;
NI inGenericContext;
NI inStaticContext;
NI inUnrolledContext;
NI compilesContextId;
NI compilesContextIdGenerator;
NI inGenericInst;
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* converters;
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* patterns;
tySequence_oYkV9aFZe0MXcEAprJaOUsA* optionStack;
tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q symMapping;
tySequence_arD7Tw6eD6lvOczWZl9buNg* libs;
tyProc_RcJNn9bSvWdJgUmA1O6sbHA semConstExpr;
tyProc_39auogS0nN05zO6JrT7za9cQ semExpr;
tyProc_39auogS0nN05zO6JrT7za9cQ semTryExpr;
tyProc_RcJNn9bSvWdJgUmA1O6sbHA semTryConstExpr;
tyProc_39auogS0nN05zO6JrT7za9cQ semOperand;
tyProc_RcJNn9bSvWdJgUmA1O6sbHA semConstBoolExpr;
tyProc_qlV9aWvA5wrWVg9bI5PqwJyA semOverloadedCall;
tyProc_PiEiMdzXg9bcm3lEo4Q6iNw semTypeNode;
tyProc_icITxWxlFufT9aDDCEKD2VQ semInferredLambda;
tyProc_GeenfmDntvGEQoCko16JtA semGenerateInstance;
tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg includedFiles;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA pureEnumFields;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA userPragmas;
tyObject_TCtx_S3Av1Ng7MBWGEZZBhfDYCw* evalContext;
tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg unknownIdents;
tySequence_jWKvSdankQPoT5bw9cBU9aiw* generics;
NI topStmts;
NI lastGenericIdx;
NI hloLoopDetector;
NI inParallelStmt;
tyProc_MdeusG9ckwmEe4HM4kmvN6w instTypeBoundOp;
tyObject_TIdent_GufRQq9c0miSybX3zBD4tyA* selfName;
tyObject_IdentCachecolonObjectType__TzLHS09bRH9a0TYLs39cqcNaw* cache;
tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA signatures;
NimStringDesc* recursiveDep;
NIM_BOOL suggestionsMade;
tySet_tyEnum_Feature_01UoAKYz1MxZiuG1X2VhNQ features;
NI inTypeContext;
tySequence_YceFcaugL2PWNtVbyffD9bQ* typesWithOps;
};
struct tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA {
  RootObj Sup;
NI id;
};
typedef NU8 tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw;
typedef NU16 tyEnum_TMagic_shZhZOdbVC5nnFvcXQAImg;
typedef NU64 tySet_tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw;
typedef NU32 tySet_tyEnum_TOption_WspMeQySXNP2XoTWR5MTgg;
typedef NU8 tyEnum_TLocKind_O7PRFZKuiBBWbku09cayVBg;
typedef NU8 tyEnum_TStorageLoc_JK9cKMX3XnqHaUky9b6gkGEw;
typedef NU16 tySet_tyEnum_TLocFlag_o2bqJgR4ceIupnUSpxiudA;
struct tyObject_TLoc_EtHNvCB0bgfu9bFjzx9cb6aA {
tyEnum_TLocKind_O7PRFZKuiBBWbku09cayVBg k;
tyEnum_TStorageLoc_JK9cKMX3XnqHaUky9b6gkGEw storage;
tySet_tyEnum_TLocFlag_o2bqJgR4ceIupnUSpxiudA flags;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* lode;
tyObject_RopeObj_OFzf0kSiPTcNreUIeJgWVA* r;
tyObject_RopeObj_OFzf0kSiPTcNreUIeJgWVA* dup;
};
struct tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w {
  tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA Sup;
tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw kind;
union{
struct {tySequence_Ef05srmQTDulnBdXR4Ja6Q* typeInstCache;
} S1;
struct {tySequence_DXS6mEo7PVUFJkirsQ9bNQA* procInstCache;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* gcUnsafetyReason;
} S2;
struct {tySequence_DXS6mEo7PVUFJkirsQ9bNQA* usedGenerics;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA tab;
} S3;
struct {tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* guard;
NI bitsize;
} S4;
} _Ukind;
tyEnum_TMagic_shZhZOdbVC5nnFvcXQAImg magic;
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ;
tyObject_TIdent_GufRQq9c0miSybX3zBD4tyA* name;
tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner;
tySet_tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw flags;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* ast;
tySet_tyEnum_TOption_WspMeQySXNP2XoTWR5MTgg options;
NI position;
NI offset;
tyObject_TLoc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
tyObject_TLib_NBMxlJ6g3utqUlplqTTHkA* annex;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* constraint;
};
typedef NU32 tySet_tyEnum_TNodeFlag_jyh9acXHkhZANSSvPIY7ZLg;
typedef NU8 tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw;
struct tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw {
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ;
tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info;
tySet_tyEnum_TNodeFlag_jyh9acXHkhZANSSvPIY7ZLg flags;
tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw kind;
union{
struct {NI64 intVal;
} S1;
struct {NF floatVal;
} S2;
struct {NimStringDesc* strVal;
} S3;
struct {tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* sym;
} S4;
struct {tyObject_TIdent_GufRQq9c0miSybX3zBD4tyA* ident;
} S5;
struct {tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ* sons;
} S6;
} _Ukind;
NimStringDesc* comment;
};
struct tyObject_Table_e2Ciu0s1q49aVQ7ULXy7l9bQ {
tySequence_kxu4GK0onha2t9bo86mdVAg* data;
NI counter;
};
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClP_0) (void* ClE_0);
void* ClE_0;
} tyProc_xdLb0cyzx3FuM6Q4NnRTpQ;
typedef tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* tyArray_OLX364rHC66WkzRbMp49aQg[64];
typedef tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* tyArray_6GDJmNRiFxkWAAdMgUie8g[70];
struct tyObject_IncrementalCtx_sdH7TnbKACuAzE7DBabnCA {
char dummy;
};
typedef N_NIMCALL_PTR(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, tyProc_c6vdo1yHyj19b9bS17tijS2w) (tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* m, NI32 fileIdx);
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_d5yEkT9aXkAtHvVerr7IeCQ) (tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* m, NI32 fileIdx);
typedef N_NIMCALL_PTR(void, tyProc_sP1I7TbCn358eLy9bX4IphA) (tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* m, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
struct tyObject_Table_0Y2brGGKD9bV6GJLXT9aUDgA {
tySequence_23SMqauuRsbDANhthj9bWlA* data;
NI counter;
};
struct tyObject_Table_NttoEzoiq5CiphZe81oadg {
tySequence_squ9b9bUH4OLHf6cEMrt6hVA* data;
NI counter;
};
struct tyObject_Table_nagDFX4QHx0s6Fvma9blmSg {
tySequence_pHNq3oXj9av2sEUdqaqeZjw* data;
NI counter;
};
struct tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ {
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* modules;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA packageSyms;
tyObject_IntSet_PQrmFm4BXFkFSVOUl1ojSg deps;
NIM_BOOL suggestMode;
NIM_BOOL invalidTransitiveClosure;
tyObject_Table_e2Ciu0s1q49aVQ7ULXy7l9bQ inclToMod;
tySequence_48JTohSgTy339bRxHzUD8KA* importStack;
RootObj* backend;
tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* config;
tyObject_IdentCachecolonObjectType__TzLHS09bRH9a0TYLs39cqcNaw* cache;
RootObj* vm;
tyProc_xdLb0cyzx3FuM6Q4NnRTpQ doStopCompile;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* usageSym;
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* owners;
tySequence_bWZXqEvLFwhLvAqSRoFNgQ* methods;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* systemModule;
tyArray_OLX364rHC66WkzRbMp49aQg sysTypes;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA compilerprocs;
tyObject_TStrTable_f07aOS3dr28kGa5wcE29aFA exposed;
tyArray_6GDJmNRiFxkWAAdMgUie8g intTypeCache;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* opContains;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* opNot;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* emptyNode;
tyObject_IncrementalCtx_sdH7TnbKACuAzE7DBabnCA incr;
tyProc_c6vdo1yHyj19b9bS17tijS2w importModuleCallback;
tyProc_d5yEkT9aXkAtHvVerr7IeCQ includeFileCallback;
tyProc_sP1I7TbCn358eLy9bX4IphA recordStmt;
tyObject_Table_0Y2brGGKD9bV6GJLXT9aUDgA cacheSeqs;
tyObject_Table_NttoEzoiq5CiphZe81oadg cacheCounters;
tyObject_Table_nagDFX4QHx0s6Fvma9blmSg cacheTables;
tySequence_PzqTLBFNawCGiqTk0UORYw* passes;
};
typedef NU8 tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag;
typedef NU8 tyEnum_TCallingConvention_yjAJ8w0h1PBaSwSGJ3P7IA;
typedef NU64 tySet_tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw;
struct tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ {
  tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA Sup;
tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag kind;
tyEnum_TCallingConvention_yjAJ8w0h1PBaSwSGJ3P7IA callConv;
tySet_tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw flags;
tySequence_Ef05srmQTDulnBdXR4Ja6Q* sons;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* sym;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* destructor;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* deepCopy;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* assignment;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* sink;
tySequence_MvZmat48bhe9b6x9aUD58D5Q* methods;
NI64 size;
NI16 align;
NI16 lockLevel;
tyObject_TLoc_EtHNvCB0bgfu9bFjzx9cb6aA loc;
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typeInst;
};
typedef NU8 tyEnum_TDistinctCompare_9bNKHGs63atuMFXnAleTveg;
typedef NU8 tySet_tyEnum_TTypeCmpFlag_72pgRXSg7774cr9aCWVPORw;
typedef NU8 tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw;
typedef NU8 tyEnum_TPreferedDesc_tnd4qt9c4xddV8oKV5zyusw;
struct tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g {
NI refcount;
TNimType* typ;
};
struct tyObject_GcStack_7fytPA5bBsob6See21YMRA {
void* bottom;
};
struct tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w {
NI len;
NI cap;
tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
};
typedef tyObject_SmallChunk_tXn60W2f8h3jgAYdEmy5NQ* tyArray_SiRwrEKZdLgxqz9a9aoVBglg[512];
typedef NU32 tyArray_BHbOSqU1t9b3Gt7K2c6fQig[24];
typedef tyObject_BigChunk_Rv9c70Uhp2TytkX7eH78qEg* tyArray_N1u1nqOgmuJN9cSZrnMHgOQ[32];
typedef tyArray_N1u1nqOgmuJN9cSZrnMHgOQ tyArray_B6durA4ZCi1xjJvRtyYxMg[24];
typedef tyObject_Trunk_W0r8S0Y3UGke6T9bIUWnnuw* tyArray_lh2A89ahMmYg9bCmpVaplLbA[256];
struct tyObject_IntSet_EZObFrE3NC9bIb3YMkY9crZA {
tyArray_lh2A89ahMmYg9bCmpVaplLbA data;
};
typedef tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw* tyArray_0aOLqZchNi8nWtMTi8ND8w[2];
struct tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw {
tyArray_0aOLqZchNi8nWtMTi8ND8w link;
NI key;
NI upperBound;
NI level;
};
struct tyTuple_ujsjpB2O9cjj3uDHsXbnSzg {
tyObject_BigChunk_Rv9c70Uhp2TytkX7eH78qEg* Field0;
NI Field1;
};
typedef tyTuple_ujsjpB2O9cjj3uDHsXbnSzg tyArray_LzOv2eCDGiceMKQstCLmhw[30];
struct tyObject_HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg {
NI len;
tyArray_LzOv2eCDGiceMKQstCLmhw chunks;
tyObject_HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg* next;
};
struct tyObject_MemRegion_x81NhDv59b8ercDZ9bi85jyg {
NI minLargeObj;
NI maxLargeObj;
tyArray_SiRwrEKZdLgxqz9a9aoVBglg freeSmallChunks;
NU32 flBitmap;
tyArray_BHbOSqU1t9b3Gt7K2c6fQig slBitmap;
tyArray_B6durA4ZCi1xjJvRtyYxMg matrix;
tyObject_LLChunk_XsENErzHIZV9bhvyJx56wGw* llmem;
NI currMem;
NI maxMem;
NI freeMem;
NI occ;
NI lastSize;
tyObject_IntSet_EZObFrE3NC9bIb3YMkY9crZA chunkStarts;
tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw* root;
tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw* deleted;
tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw* last;
tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw* freeAvlNodes;
NIM_BOOL locked;
NIM_BOOL blockChunkSizeIncrease;
NI nextChunkSize;
tyObject_AvlNode_IaqjtwKhxLEpvDS9bct9blEw bottomData;
tyObject_HeapLinks_PDV1HBZ8CQSQJC9aOBFNRSg heapLinks;
};
struct tyObject_GcStat_0RwLoVBHZPfUAcLczmfQAg {
NI stackScans;
NI cycleCollections;
NI maxThreshold;
NI maxStackSize;
NI maxStackCells;
NI cycleTableSize;
NI64 maxPause;
};
struct tyObject_CellSet_jG87P0AI9aZtss9ccTYBIISQ {
NI counter;
NI max;
tyObject_PageDesc_fublkgIY4LG3mT51LU2WHg* head;
tyObject_PageDesc_fublkgIY4LG3mT51LU2WHg** data;
};
struct tyObject_GcHeap_1TRH1TZMaVZTnLNcIHuNFQ {
tyObject_GcStack_7fytPA5bBsob6See21YMRA stack;
NI cycleThreshold;
NI zctThreshold;
tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w zct;
tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w decStack;
tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w tempStack;
NI recGcLock;
tyObject_MemRegion_x81NhDv59b8ercDZ9bi85jyg region;
tyObject_GcStat_0RwLoVBHZPfUAcLczmfQAg stat;
tyObject_CellSet_jG87P0AI9aZtss9ccTYBIISQ marked;
tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w additionalRoots;
NI gcThreadId;
};
typedef NU64 tySet_tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag;
typedef NU8 tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw;
struct tyTuple_KlSLWBROOViO04uLQHu7ig {
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* Field0;
tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* Field1;
};
struct tyTuple_zwpS6d6iewrdlBSTNFoyVA {
NI Field0;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* Field1;
};
struct tyTuple_kN8up2W6YKc5YA9avn5mV5w {
NimStringDesc* Field0;
NI Field1;
NI Field2;
};
struct tyObject_TIdPair_AdFnD2YdADPeuJbG2YJ4vg {
tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* key;
RootObj* val;
};
struct tyObject_TInstantiationPair_HkXM4cJmOpk8zFcmq9c9c3gQ {
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* genericSym;
tyObject_TInstantiation_5LqgVn6Tq9ainQRK7TQAQxA* inst;
};
struct tyTuple_xDU9bZmv1ZbZkJDaATBekIQ {
NI Field0;
NI32 Field1;
NI32 Field2;
};
struct tyTuple_quA39a2QdEQU9cSEIUSibApQ {
tySequence_DfgJFJEYoj4YBAHLZPl5lQ* Field0;
tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* Field1;
};
struct tyTuple_2SGm9aGCXuo7XSQ9bqD29axXw {
NI Field0;
NimStringDesc* Field1;
tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* Field2;
};
struct tyTuple_F3gkSrMB1qp2Tvf9bixVXwg {
NI Field0;
NimStringDesc* Field1;
NI64 Field2;
};
struct tyObject_BTree_VZdzO0Tlflp7WMN4gS8oPg {
tyObject_NodecolonObjectType__dNELmBSmY7nthjhZupWO6g* root;
NI entries;
};
struct tyTuple_wcNatyuf8WOqAhGLhSvgiw {
NI Field0;
NimStringDesc* Field1;
tyObject_BTree_VZdzO0Tlflp7WMN4gS8oPg Field2;
};
typedef N_NIMCALL_PTR(tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w*, tyProc_8ooe5vdoqmvpHnfXV29bP3w) (tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* module);
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_A7Sdoem70tRxSEmKrf9cmyg) (tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w* p, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* topLevelStmt);
typedef N_NIMCALL_PTR(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, tyProc_EAEKmBUgKFg29agoUGtzDEQ) (tyObject_ModuleGraphcolonObjectType__RZI3hCs0FTPYx8StfC81qQ* graph, tyObject_TPassContext_Hb6rFM0ecvtlLf2kv9aU75w* p, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
struct tyTuple_euPCXX9bc3XzndEhYlqNS7g {
tyProc_8ooe5vdoqmvpHnfXV29bP3w Field0;
tyProc_A7Sdoem70tRxSEmKrf9cmyg Field1;
tyProc_EAEKmBUgKFg29agoUGtzDEQ Field2;
NIM_BOOL Field3;
};
struct tySequence_Ef05srmQTDulnBdXR4Ja6Q {
  TGenericSeq Sup;
  tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* data[SEQ_DECL_SIZE];
};
struct tySequence_YceFcaugL2PWNtVbyffD9bQ {
  TGenericSeq Sup;
  tyTuple_KlSLWBROOViO04uLQHu7ig data[SEQ_DECL_SIZE];
};
struct tySequence_MvZmat48bhe9b6x9aUD58D5Q {
  TGenericSeq Sup;
  tyTuple_zwpS6d6iewrdlBSTNFoyVA data[SEQ_DECL_SIZE];
};
struct tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ {
  TGenericSeq Sup;
  tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* data[SEQ_DECL_SIZE];
};
struct tySequence_Mh9agqM29bm9aP5AUL1x7dZGA {
  TGenericSeq Sup;
  tyObject_TIdPair_AdFnD2YdADPeuJbG2YJ4vg data[SEQ_DECL_SIZE];
};
struct tySequence_DfgJFJEYoj4YBAHLZPl5lQ {
  TGenericSeq Sup;
  tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* data[SEQ_DECL_SIZE];
};
struct tySequence_9brg1xNurxcus33lU4IE1Dw {
  TGenericSeq Sup;
  tyObject_Trunk_ul49aWfv9aes8cutmeltT3gQ* data[SEQ_DECL_SIZE];
};
struct tySequence_oYkV9aFZe0MXcEAprJaOUsA {
  TGenericSeq Sup;
  tyObject_TOptionEntry_H9ac5KbrDJVwT1zH5O83r7w* data[SEQ_DECL_SIZE];
};
struct tySequence_arD7Tw6eD6lvOczWZl9buNg {
  TGenericSeq Sup;
  tyObject_TLib_NBMxlJ6g3utqUlplqTTHkA* data[SEQ_DECL_SIZE];
};
struct tySequence_jWKvSdankQPoT5bw9cBU9aiw {
  TGenericSeq Sup;
  tyObject_TInstantiationPair_HkXM4cJmOpk8zFcmq9c9c3gQ data[SEQ_DECL_SIZE];
};
struct tySequence_DXS6mEo7PVUFJkirsQ9bNQA {
  TGenericSeq Sup;
  tyObject_TInstantiation_5LqgVn6Tq9ainQRK7TQAQxA* data[SEQ_DECL_SIZE];
};
struct tySequence_kxu4GK0onha2t9bo86mdVAg {
  TGenericSeq Sup;
  tyTuple_xDU9bZmv1ZbZkJDaATBekIQ data[SEQ_DECL_SIZE];
};
struct tySequence_48JTohSgTy339bRxHzUD8KA {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
struct tySequence_bWZXqEvLFwhLvAqSRoFNgQ {
  TGenericSeq Sup;
  tyTuple_quA39a2QdEQU9cSEIUSibApQ data[SEQ_DECL_SIZE];
};
struct tySequence_23SMqauuRsbDANhthj9bWlA {
  TGenericSeq Sup;
  tyTuple_2SGm9aGCXuo7XSQ9bqD29axXw data[SEQ_DECL_SIZE];
};
struct tySequence_squ9b9bUH4OLHf6cEMrt6hVA {
  TGenericSeq Sup;
  tyTuple_F3gkSrMB1qp2Tvf9bixVXwg data[SEQ_DECL_SIZE];
};
struct tySequence_pHNq3oXj9av2sEUdqaqeZjw {
  TGenericSeq Sup;
  tyTuple_wcNatyuf8WOqAhGLhSvgiw data[SEQ_DECL_SIZE];
};
struct tySequence_PzqTLBFNawCGiqTk0UORYw {
  TGenericSeq Sup;
  tyTuple_euPCXX9bc3XzndEhYlqNS7g data[SEQ_DECL_SIZE];
};
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem_2Mfumf6CnyNlShDWdIgobwsystem)(void* a, int v, NI size);
N_LIB_PRIVATE N_NIMCALL(void, initLayeredTypeMap_yTc1S4IWeD7MQCgbin2Tpg)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* Result);
N_NIMCALL(void, genericReset)(void* dest, TNimType* mt);
N_LIB_PRIVATE N_NIMCALL(void, copyIdTable_PAWgxjpTWlqAOeehMcKZ0w)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q* dest, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q src);
N_LIB_PRIVATE N_NIMCALL(void, initTypeVars_tAmlO1OVow0h9bbM019arw9aA)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* p, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* typeMap, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner, tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* Result);
N_LIB_PRIVATE N_NIMCALL(void, initIdTable_9cUS2oaKn1IFXKjLdglPZHQ)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q* x);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_LIB_PRIVATE N_NIMCALL(void, pushInfoContext_jVPMMc4H29cyI52qg0Kp9aUg)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, NI start);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, copyNode_lz8T1F9c0YwEOpUnrAUYgjg)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* src);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, replaceTypeVarsTAux_cNsAY9aO2v1oTCPqZyHga1w_2)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, lookup_NV2u9aw8arH6bTPO0CAzehA)(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* typeMap, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* key);
N_LIB_PRIVATE N_NIMCALL(RootObj*, idTableGet_6XGoeu1puMq6qoi2OW419bA)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q t, tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* key);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, handleGenericInvocation_cNsAY9aO2v1oTCPqZyHga1w_3)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(void, internalError_yTu5SGHF0j0P9cQrqN7YylA)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, NimStringDesc* errMsg);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, searchInstTypes_rG28W6V18KBAWJ6NSj4dKw)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* key);
static N_INLINE(NIM_BOOL, sameFlags_Zt6jJcbW2iyXXO9axP6Optwsemtypinst)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* a, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* b);
N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, compareTypes_oyXq5u7iL4RjsT9bovvTE9cg)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* x, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* y, tyEnum_TDistinctCompare_9bNKHGs63atuMFXnAleTveg cmp, tySet_tyEnum_TTypeCmpFlag_72pgRXSg7774cr9aCWVPORw flags);
N_LIB_PRIVATE N_NIMCALL(NI, sonsLen_SWFNCiWYB89bTUPh5KptkvA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* n);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, lookupTypeVar_cNsAY9aO2v1oTCPqZyHga1w_4)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(void, localError_NF6kBGchnhQYPbCedyefVA)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, NimStringDesc* arg);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
static N_INLINE(void, copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem)(void* dest, void* source, NI size);
static N_INLINE(void, nimCopyMem)(void* dest, void* source, NI size);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, typeToString_QlvraUan7WbHowhAbvDvdA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ, tyEnum_TPreferedDesc_tnd4qt9c4xddV8oKV5zyusw prefer);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, errorType_TAFoHO9clTWAqtOQW5Fp9bfQ)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c);
N_LIB_PRIVATE N_NIMCALL(void, idTablePut_Xhv7unnxpOqdw7OJsXRnRg)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q* t, tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* key, RootObj* val);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, instCopyType_2We2UBtd5z2KSfXRsPWlUQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, copyType_UkDKseEIJgQZ1cGmoQSskA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner, NIM_BOOL keepId);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr);
static N_INLINE(void, rtlAddZCT_MV4BBk6J1qu70IbBxwEn4w_2system)(tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_PRIVATE N_NOINLINE(void, addZCT_fCDI7oO1NNVXXURtxSzsRw)(tyObject_CellSeq_Axo1XVm9aaQueTOldv8le5w* s, tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g* c);
N_LIB_PRIVATE N_NIMCALL(void, propagateToOwner_Zokyl22yTzwcKmRycgQbKg)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* owner, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* elem);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, newType_dQhKkL6uAkw83dy6l4d7iQ)(tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag kind, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_LIB_PRIVATE N_NIMCALL(void, cacheTypeInst_S49buNpALSs86SoiVgOUCsQ)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* inst);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, lastSon_ab52xel9cFebv9am0xV04xXA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* n);
N_LIB_PRIVATE N_NIMCALL(void, safeAdd_sWj9cQEeYRFzlYJxtMxtLCw)(tySequence_Ef05srmQTDulnBdXR4Ja6Q** x, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* y);
N_LIB_PRIVATE N_NIMCALL(void, newTypeMapLayer_x5moFc3HUFPtBEFeVO9aGzQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* Result);
N_LIB_PRIVATE N_NIMCALL(void, rawAddSon_uZzh0IWnWErsZbQ8YFaRRA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* father, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* son);
N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, isGenericAlias_oBaRrNx0TwrublbZIUKenA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, skipGenericAlias_BFFuB9cFDZ89c6QWZqEFAtdA_3)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(void, checkPartialConstructedType_TBCMogG4zgmSdneojQOMAg)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t, tySet_tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag kinds);
N_NIMCALL(TGenericSeq*, incrSeqV3)(TGenericSeq* s, TNimType* typ);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, prepareNode_gKp9aBprbf0cqtXoSYBnCkw)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, replaceTypeVarsS_sLVA1gNd8WU8o9cEwKvBh9cA)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* s);
N_LIB_PRIVATE N_NIMCALL(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, copySym_hicZXrzB9bwpjzwTWf8NTog)(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* s, NIM_BOOL keepId);
static N_INLINE(NI, safeLen_CdME9baJhvveuPEDZE9bXoxArenderer)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
static N_INLINE(NI, len_CdME9baJhvveuPEDZE9bXoxAsigmatch)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(void, add_gCCf68XrWL79bKes6htzFjQ)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* father, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* son);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, newTypeS_n4b8NptRBFYYVGDg8PzeoQ)(tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag kind, tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ, NI len);
static N_INLINE(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, skipIntLit_7SeREq19a8pkSCOuiHcpHnwsigmatch)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, base_BFFuB9cFDZ89c6QWZqEFAtdA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, makeTypeDesc_SFEZUqjOzhnpf13sBCUUHQ)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ);
N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, containsGenericType_YPjOkGV9axAnGR3UfLeWZ1g)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(void, internalError_5hPl6LjCYJxMYxh9af9b9bXzw)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, NimStringDesc* errMsg);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar__E5ya0OOlyISUCw4ENFn9bLA)(tyTuple_kN8up2W6YKc5YA9avn5mV5w x);
N_LIB_PRIVATE N_NIMCALL(void, propagateFieldFlags_9apcPdGSC9bxzE64dwCRvbsA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(void, eraseVoidParams_SMFMWVGsCG21VhwFnWblRg)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_NIMCALL(TGenericSeq*, setLengthSeqV2)(TGenericSeq* s, TNimType* typ, NI newLen);
N_LIB_PRIVATE N_NIMCALL(void, skipIntLiteralParams_Bq8s6GYU4y5c8o6Mprs6mw)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, newNode_sa9bwmR1oPRYm27rlMD66CQ)(tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw kind, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ* sons, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ);
N_LIB_PRIVATE N_NIMCALL(NI, sonsLen_qPWPHw7WgJeEVYUdcaRIig)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(void, illFormedAst_aOnJJ9cXkOooTyUuLmnc09bw)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf);
N_LIB_PRIVATE N_NIMCALL(void, checkSonsLen_EezdXeDvu4rB7fR84AJZgw)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, NI length, tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, newNodeI_I7fH85CUcZMasoPRKxPsPg)(tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw kind, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, reResolveCallsWithTypedescParams_sMLp8yxUilACnyKrAFoTOA)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, isTypeParam_u68mEkLdR18iAnbsLA6Rgg)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n);
N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, newSymNode_UWZXukHA5As9aCftRHbafBg)(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* sym);
N_LIB_PRIVATE N_NIMCALL(void, newSons_W9cZG9c5PyHYZPzxHXuunFyQ)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* father, NI length);
N_LIB_PRIVATE N_NIMCALL(void, popInfoContext_HFVjkUQz7LMV9aOS6uKLckQ)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf);
N_LIB_PRIVATE N_NIMCALL(NI64, computeSize_vCG1GF2Iu043oALVyuJfOw_2)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ);
TNimType NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_;
extern TNimType NTI_9aiv9bp2t5icFNINcg9c4xi1Q_;
TNimType NTI_AWHx031vx269auvjKCITW9cw_;
TNimType NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_;
extern TNimType NTI_EjEifkTC8tg9afiUW4StSSA_;
extern TNimType NTI_WGx4rAexNXnczy1Avn646Q_;
extern TNimType NTI_VaVACK0bpYmqIQ0mKcHfQQ_;
extern TNimType NTI_K9bspPztfoWajecnwjyHuYQ_;
extern TNimType NTI_rR5Bzr1D5krxoo1NcNyeMA_;
extern tyObject_GcHeap_1TRH1TZMaVZTnLNcIHuNFQ gch_IcYaEuuWivYAS86vFMTS3Q;
extern TNimType NTI_Ef05srmQTDulnBdXR4Ja6Q_;
extern TNimType NTI_YceFcaugL2PWNtVbyffD9bQ_;
extern TNimType NTI_ehmV9bTklH2Gt9cXHV9c0HLeQ_;
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_4, "no generic body", 15);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_5, "cannot instantiate: \'", 21);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_6, "\'", 1);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_7, "substitution with generic parameter", 35);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_8, "invalid pragma: acyclic", 23);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_9, "type \'var var\' is not allowed", 29);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_11, "semtypinst.nim", 14);
NIM_CONST tyTuple_kN8up2W6YKc5YA9avn5mV5w TM_mrkrD9c2e31kE4GdQtpMdaQ_10 = {((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_11),
((NI) 542),
((NI) 23)}
;
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_12, "ReplaceTypeVarsN: when condition not a bool", 43);
STRING_LITERAL(TM_mrkrD9c2e31kE4GdQtpMdaQ_13, "illegal recursion in type \'", 27);

static N_INLINE(void, nimSetMem_2Mfumf6CnyNlShDWdIgobwsystem)(void* a, int v, NI size) {
	void* T1_;
	T1_ = (void*)0;
	T1_ = memset(a, v, ((size_t) (size)));
}

static N_INLINE(void, nimZeroMem)(void* p, NI size) {
	nimSetMem_2Mfumf6CnyNlShDWdIgobwsystem(p, ((int) 0), size);
}

N_LIB_PRIVATE N_NIMCALL(void, initLayeredTypeMap_yTc1S4IWeD7MQCgbin2Tpg)(tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* Result) {
	genericReset((void*)Result, (&NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_));
	copyIdTable_PAWgxjpTWlqAOeehMcKZ0w((&(*Result).topLayer), pt);
}

N_LIB_PRIVATE N_NIMCALL(void, initTypeVars_tAmlO1OVow0h9bbM019arw9aA)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* p, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* typeMap, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner, tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* Result) {
	genericReset((void*)Result, (&NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_));
	initIdTable_9cUS2oaKn1IFXKjLdglPZHQ((&(*Result).symMap));
	initIdTable_9cUS2oaKn1IFXKjLdglPZHQ((&(*Result).localCache));
	(*Result).typeMap = typeMap;
	(*Result).info = info;
	unsureAsgnRef((void**) (&(*Result).c), p);
	unsureAsgnRef((void**) (&(*Result).owner), owner);
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, lookup_NV2u9aw8arH6bTPO0CAzehA)(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* typeMap, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* key) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* tm;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	tm = typeMap;
	{
		while (1) {
			tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T3_;
			RootObj* T4_;
			if (!!((tm == NIM_NIL))) goto LA2;
			T3_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
			T3_ = &key->Sup;
			T4_ = (RootObj*)0;
			T4_ = idTableGet_6XGoeu1puMq6qoi2OW419bA((*tm).topLayer, T3_);
			result = ((tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*) (T4_));
			{
				if (!!((result == NIM_NIL))) goto LA7_;
				goto BeforeRet_;
			}
			LA7_: ;
			tm = (*tm).nextLayer;
		} LA2: ;
	}
	}BeforeRet_: ;
	return result;
}

static N_INLINE(NIM_BOOL, sameFlags_Zt6jJcbW2iyXXO9axP6Optwsemtypinst)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* a, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* b) {
	NIM_BOOL result;
	result = (NIM_BOOL)0;
	result = ((688128 & (*a).flags) == (688128 & (*b).flags));
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, searchInstTypes_rG28W6V18KBAWJ6NSj4dKw)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* key) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* genericTyp;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	genericTyp = (*key).sons->data[((NI) 0)];
	{
		NIM_BOOL T3_;
		NIM_BOOL T4_;
		T3_ = (NIM_BOOL)0;
		T4_ = (NIM_BOOL)0;
		T4_ = ((*genericTyp).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 10));
		if (!(T4_)) goto LA5_;
		T4_ = ((*key).sons->data[((NI) 0)] == genericTyp);
		LA5_: ;
		T3_ = T4_;
		if (!(T3_)) goto LA6_;
		T3_ = !(((*genericTyp).sym == NIM_NIL));
		LA6_: ;
		if (!!(T3_)) goto LA7_;
		goto BeforeRet_;
	}
	LA7_: ;
	{
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* inst;
		tySequence_Ef05srmQTDulnBdXR4Ja6Q* colontmp_;
		NI i;
		NI L;
		NI T10_;
		inst = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
		colontmp_ = (tySequence_Ef05srmQTDulnBdXR4Ja6Q*)0;
		colontmp_ = (*(*genericTyp).sym)._Ukind.S1.typeInstCache;
		i = ((NI) 0);
		T10_ = (colontmp_ ? colontmp_->Sup.len : 0);
		L = T10_;
		{
			while (1) {
				if (!(i < L)) goto LA12;
				inst = colontmp_->data[i];
				{
					{
						if (!((*inst).Sup.id == (*key).Sup.id)) goto LA16_;
						result = inst;
						goto BeforeRet_;
					}
					LA16_: ;
					{
						NI T20_;
						NI T21_;
						T20_ = ((*inst).sons ? (*inst).sons->Sup.len : 0);
						T21_ = ((*key).sons ? (*key).sons->Sup.len : 0);
						if (!(T20_ < T21_)) goto LA22_;
						goto BeforeRet_;
					}
					LA22_: ;
					{
						NIM_BOOL T26_;
						T26_ = (NIM_BOOL)0;
						T26_ = sameFlags_Zt6jJcbW2iyXXO9axP6Optwsemtypinst(inst, key);
						if (!!(T26_)) goto LA27_;
						goto LA13;
					}
					LA27_: ;
					{
						{
							NI j;
							NI colontmp__2;
							NI T31_;
							NI res;
							j = (NI)0;
							colontmp__2 = (NI)0;
							T31_ = (((*key).sons ? (*key).sons->Sup.len : 0)-1);
							colontmp__2 = T31_;
							res = ((NI) 1);
							{
								while (1) {
									if (!(res <= colontmp__2)) goto LA33;
									j = res;
									{
										NIM_BOOL T36_;
										T36_ = (NIM_BOOL)0;
										T36_ = compareTypes_oyXq5u7iL4RjsT9bovvTE9cg((*inst).sons->data[j], (*key).sons->data[j], ((tyEnum_TDistinctCompare_9bNKHGs63atuMFXnAleTveg) 0), 8);
										if (!!(T36_)) goto LA37_;
										goto LA29;
									}
									LA37_: ;
									res += ((NI) 1);
								} LA33: ;
							}
						}
						result = inst;
						goto BeforeRet_;
					} LA29: ;
				} LA13: ;
				i += ((NI) 1);
			} LA12: ;
		}
	}
	}BeforeRet_: ;
	return result;
}

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

static N_INLINE(void, copyMem_fPlwH3r9agN9aEHB6yCPMh0wsystem)(void* dest, void* source, NI size) {
	nimCopyMem(dest, source, size);
}

static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
	{
		if (!!((src == NIM_NIL))) goto LA3_;
		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;
	}
	LA3_: ;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, lookupTypeVar_cNsAY9aO2v1oTCPqZyHga1w_4)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	result = lookup_NV2u9aw8arH6bTPO0CAzehA((*cl).typeMap, t);
	{
		NimStringDesc* T11_;
		NimStringDesc* T12_;
		tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T13_;
		RootObj* T14_;
		if (!(result == NIM_NIL)) goto LA3_;
		{
			NIM_BOOL T7_;
			T7_ = (NIM_BOOL)0;
			T7_ = (*cl).allowMetaTypes;
			if (T7_) goto LA8_;
			T7_ = (((*t).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 11))&63U)))!=0);
			LA8_: ;
			if (!T7_) goto LA9_;
			goto BeforeRet_;
		}
		LA9_: ;
		T11_ = (NimStringDesc*)0;
		T12_ = (NimStringDesc*)0;
		T12_ = typeToString_QlvraUan7WbHowhAbvDvdA(t, ((tyEnum_TPreferedDesc_tnd4qt9c4xddV8oKV5zyusw) 0));
		T11_ = rawNewString((T12_ ? T12_->Sup.len : 0) + 22);
appendString(T11_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_5));
appendString(T11_, T12_);
appendString(T11_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_6));
		localError_NF6kBGchnhQYPbCedyefVA((*(*(*cl).c).graph).config, (*(*t).sym).info, T11_);
		result = errorType_TAFoHO9clTWAqtOQW5Fp9bfQ((*cl).c);
		T13_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
		T13_ = &t->Sup;
		T14_ = (RootObj*)0;
		T14_ = &result->Sup.Sup;
		idTablePut_Xhv7unnxpOqdw7OJsXRnRg((&(*(*cl).typeMap).topLayer), T13_, T14_);
	}
	goto LA1_;
	LA3_: ;
	{
		NIM_BOOL T16_;
		T16_ = (NIM_BOOL)0;
		T16_ = ((*result).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 12));
		if (!(T16_)) goto LA17_;
		T16_ = !((*cl).allowMetaTypes);
		LA17_: ;
		if (!T16_) goto LA18_;
		internalError_yTu5SGHF0j0P9cQrqN7YylA((*(*(*cl).c).graph).config, (*cl).info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_7));
	}
	goto LA1_;
	LA18_: ;
	LA1_: ;
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, instCopyType_2We2UBtd5z2KSfXRsPWlUQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	result = copyType_UkDKseEIJgQZ1cGmoQSskA(t, (*t).owner, (*cl).allowMetaTypes);
	{
		if (!(*cl).allowMetaTypes) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	(*result).flags |= ((NU64)1)<<((((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 8))%(sizeof(NU64)*8));
	{
		NIM_BOOL T7_;
		NIM_BOOL T9_;
		T7_ = (NIM_BOOL)0;
		T7_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 6) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 8) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 12) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 51) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 54) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 56) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 59));
		if (T7_) goto LA8_;
		T9_ = (NIM_BOOL)0;
		T9_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60));
		if (!(T9_)) goto LA10_;
		T9_ = ((*t).n == NIM_NIL);
		LA10_: ;
		T7_ = T9_;
		LA8_: ;
		if (!!(T7_)) goto LA11_;
		(*result).flags = ((*result).flags & ~ 1049088);
	}
	LA11_: ;
	}BeforeRet_: ;
	return result;
}

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

static N_INLINE(void, rtlAddZCT_MV4BBk6J1qu70IbBxwEn4w_2system)(tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g* c) {
	addZCT_fCDI7oO1NNVXXURtxSzsRw((&gch_IcYaEuuWivYAS86vFMTS3Q.zct), c);
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		tyObject_Cell_1zcF9cV8XIAtbN8h5HRUB8g* c;
		if (!!((src == NIM_NIL))) goto LA3_;
		c = usrToCell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src);
		(*c).refcount += ((NI) 8);
	}
	LA3_: ;
	{
		tyObject_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_;
			rtlAddZCT_MV4BBk6J1qu70IbBxwEn4w_2system(c_2);
		}
		LA11_: ;
	}
	LA7_: ;
	(*dest) = src;
}

N_LIB_PRIVATE N_NIMCALL(void, cacheTypeInst_S49buNpALSs86SoiVgOUCsQ)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* inst) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* gt;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t;
{	gt = (*inst).sons->data[((NI) 0)];
	{
		if (!((*gt).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 10))) goto LA3_;
		t = lastSon_ab52xel9cFebv9am0xV04xXA(gt);
	}
	goto LA1_;
	LA3_: ;
	{
		t = gt;
	}
	LA1_: ;
	{
		if (!((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 12) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 51) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 54) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 56) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60))) goto LA8_;
		goto BeforeRet_;
	}
	LA8_: ;
	safeAdd_sWj9cQEeYRFzlYJxtMxtLCw((&(*(*gt).sym)._Ukind.S1.typeInstCache), inst);
	}BeforeRet_: ;
}

N_LIB_PRIVATE N_NIMCALL(void, newTypeMapLayer_x5moFc3HUFPtBEFeVO9aGzQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA* Result) {
	genericReset((void*)Result, (&NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_));
	(*Result).nextLayer = (*cl).typeMap;
	initIdTable_9cUS2oaKn1IFXKjLdglPZHQ((&(*Result).topLayer));
}

N_LIB_PRIVATE N_NIMCALL(void, checkPartialConstructedType_TBCMogG4zgmSdneojQOMAg)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	{
		NIM_BOOL T3_;
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T5_;
		T3_ = (NIM_BOOL)0;
		T3_ = (((*t).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 4))&63U)))!=0);
		if (!(T3_)) goto LA4_;
		T5_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
		T5_ = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(t, IL64(36099165763184912));
		T3_ = !(((*T5_).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 17)));
		LA4_: ;
		if (!T3_) goto LA6_;
		localError_NF6kBGchnhQYPbCedyefVA(conf, info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_8));
	}
	goto LA1_;
	LA6_: ;
	{
		NIM_BOOL T9_;
		T9_ = (NIM_BOOL)0;
		T9_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 23) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 47));
		if (!(T9_)) goto LA10_;
		T9_ = ((*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 23) || (*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 47));
		LA10_: ;
		if (!T9_) goto LA11_;
		localError_NF6kBGchnhQYPbCedyefVA(conf, info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_9));
	}
	goto LA1_;
	LA11_: ;
	LA1_: ;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, handleGenericInvocation_cNsAY9aO2v1oTCPqZyHga1w_3)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* body;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* header;
	tySequence_Ef05srmQTDulnBdXR4Ja6Q* T46_;
	NIM_BOOL oldSkipTypedesc;
	tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA typeMapLayer;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* bbody;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* newbody;
	NIM_BOOL bodyIsNew;
	tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* dc;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	body = (*t).sons->data[((NI) 0)];
	{
		if (!!(((*body).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 10)))) goto LA3_;
		internalError_yTu5SGHF0j0P9cQrqN7YylA((*(*(*cl).c).graph).config, (*cl).info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_4));
	}
	LA3_: ;
	header = t;
	{
		tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T9_;
		RootObj* T10_;
		if (!(*cl).allowMetaTypes) goto LA7_;
		T9_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
		T9_ = &t->Sup;
		T10_ = (RootObj*)0;
		T10_ = idTableGet_6XGoeu1puMq6qoi2OW419bA((*cl).localCache, T9_);
		result = ((tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*) (T10_));
	}
	goto LA5_;
	LA7_: ;
	{
		result = searchInstTypes_rG28W6V18KBAWJ6NSj4dKw(t);
	}
	LA5_: ;
	{
		NIM_BOOL T14_;
		T14_ = (NIM_BOOL)0;
		T14_ = !((result == NIM_NIL));
		if (!(T14_)) goto LA15_;
		T14_ = ((688256 & (*result).flags) == (688256 & (*t).flags));
		LA15_: ;
		if (!T14_) goto LA16_;
		goto BeforeRet_;
	}
	LA16_: ;
	{
		NI i;
		NI colontmp_;
		NI T19_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		T19_ = (NI)0;
		T19_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
		colontmp_ = (NI)(T19_ - ((NI) 1));
		res = ((NI) 1);
		{
			while (1) {
				tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* x;
				if (!(res <= colontmp_)) goto LA21;
				i = res;
				x = (*t).sons->data[i];
				{
					if (!((*x).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 12))) goto LA24_;
					x = lookupTypeVar_cNsAY9aO2v1oTCPqZyHga1w_4(cl, x);
					{
						if (!!((x == NIM_NIL))) goto LA28_;
						{
							if (!(header == t)) goto LA32_;
							header = instCopyType_2We2UBtd5z2KSfXRsPWlUQ(cl, t);
						}
						LA32_: ;
						asgnRefNoCycle((void**) (&(*header).sons->data[i]), x);
						propagateToOwner_Zokyl22yTzwcKmRycgQbKg(header, x);
					}
					LA28_: ;
				}
				goto LA22_;
				LA24_: ;
				{
					propagateToOwner_Zokyl22yTzwcKmRycgQbKg(header, x);
				}
				LA22_: ;
				res += ((NI) 1);
			} LA21: ;
		}
	}
	{
		if (!!((header == t))) goto LA37_;
		result = searchInstTypes_rG28W6V18KBAWJ6NSj4dKw(header);
		{
			NIM_BOOL T41_;
			T41_ = (NIM_BOOL)0;
			T41_ = !((result == NIM_NIL));
			if (!(T41_)) goto LA42_;
			T41_ = ((688256 & (*result).flags) == (688256 & (*t).flags));
			LA42_: ;
			if (!T41_) goto LA43_;
			goto BeforeRet_;
		}
		LA43_: ;
	}
	goto LA35_;
	LA37_: ;
	{
		header = instCopyType_2We2UBtd5z2KSfXRsPWlUQ(cl, t);
	}
	LA35_: ;
	result = newType_dQhKkL6uAkw83dy6l4d7iQ(((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 11), (*(*t).sons->data[((NI) 0)]).owner);
	(*result).flags = (*header).flags;
	T46_ = (tySequence_Ef05srmQTDulnBdXR4Ja6Q*)0;
	T46_ = (tySequence_Ef05srmQTDulnBdXR4Ja6Q*) newSeq((&NTI_Ef05srmQTDulnBdXR4Ja6Q_), 1);
	asgnRefNoCycle((void**) (&T46_->data[0]), (*header).sons->data[((NI) 0)]);
	asgnRefNoCycle((void**) (&(*result).sons), T46_);
	{
		if (!!((*cl).allowMetaTypes)) goto LA49_;
		cacheTypeInst_S49buNpALSs86SoiVgOUCsQ(result);
	}
	goto LA47_;
	LA49_: ;
	{
		tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T52_;
		RootObj* T53_;
		T52_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
		T52_ = &t->Sup;
		T53_ = (RootObj*)0;
		T53_ = &result->Sup.Sup;
		idTablePut_Xhv7unnxpOqdw7OJsXRnRg((&(*cl).localCache), T52_, T53_);
	}
	LA47_: ;
	oldSkipTypedesc = (*cl).skipTypedesc;
	(*cl).skipTypedesc = NIM_TRUE;
	nimZeroMem((void*)(&typeMapLayer), sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA));
	newTypeMapLayer_x5moFc3HUFPtBEFeVO9aGzQ(cl, (&typeMapLayer));
	(*cl).typeMap = (&typeMapLayer);
	{
		NI i_2;
		NI colontmp__2;
		NI T55_;
		NI res_2;
		i_2 = (NI)0;
		colontmp__2 = (NI)0;
		T55_ = (NI)0;
		T55_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
		colontmp__2 = (NI)(T55_ - ((NI) 1));
		res_2 = ((NI) 1);
		{
			while (1) {
				tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* x_2;
				tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T58_;
				RootObj* T59_;
				if (!(res_2 <= colontmp__2)) goto LA57;
				i_2 = res_2;
				x_2 = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*t).sons->data[i_2]);
				asgnRefNoCycle((void**) (&(*header).sons->data[i_2]), x_2);
				propagateToOwner_Zokyl22yTzwcKmRycgQbKg(header, x_2);
				T58_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
				T58_ = &(*body).sons->data[(NI)(i_2 - ((NI) 1))]->Sup;
				T59_ = (RootObj*)0;
				T59_ = &x_2->Sup.Sup;
				idTablePut_Xhv7unnxpOqdw7OJsXRnRg((&(*(*cl).typeMap).topLayer), T58_, T59_);
				res_2 += ((NI) 1);
			} LA57: ;
		}
	}
	{
		NI i_3;
		NI colontmp__3;
		NI T61_;
		NI res_3;
		i_3 = (NI)0;
		colontmp__3 = (NI)0;
		T61_ = (NI)0;
		T61_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
		colontmp__3 = (NI)(T61_ - ((NI) 1));
		res_3 = ((NI) 1);
		{
			while (1) {
				if (!(res_3 <= colontmp__3)) goto LA63;
				i_3 = res_3;
				rawAddSon_uZzh0IWnWErsZbQ8YFaRRA(result, (*header).sons->data[i_3]);
				res_3 += ((NI) 1);
			} LA63: ;
		}
	}
	bbody = lastSon_ab52xel9cFebv9am0xV04xXA(body);
	newbody = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, bbody);
	bodyIsNew = !((newbody == bbody));
	(*cl).skipTypedesc = oldSkipTypedesc;
	(*newbody).flags = ((*newbody).flags | (((*t).flags | (*body).flags) & ~ 1049088));
	(*result).flags = (((*result).flags | (*newbody).flags) & ~ 1049088);
	(*cl).typeMap = (*(*cl).typeMap).nextLayer;
	{
		NIM_BOOL T66_;
		T66_ = (NIM_BOOL)0;
		T66_ = isGenericAlias_oBaRrNx0TwrublbZIUKenA(newbody);
		if (!T66_) goto LA67_;
		newbody = skipGenericAlias_BFFuB9cFDZ89c6QWZqEFAtdA_3(newbody);
	}
	LA67_: ;
	rawAddSon_uZzh0IWnWErsZbQ8YFaRRA(result, newbody);
	checkPartialConstructedType_TBCMogG4zgmSdneojQOMAg((*(*(*cl).c).graph).config, (*cl).info, newbody);
	dc = (*newbody).deepCopy;
	{
		tyTuple_KlSLWBROOViO04uLQHu7ig T98_;
		NI T99_;
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* mm;
		if (!((*cl).allowMetaTypes == NIM_FALSE)) goto LA71_;
		{
			NIM_BOOL T75_;
			T75_ = (NIM_BOOL)0;
			T75_ = !((dc == NIM_NIL));
			if (!(T75_)) goto LA76_;
			T75_ = !((((*(*newbody).deepCopy).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0));
			LA76_: ;
			if (!T75_) goto LA77_;
			asgnRefNoCycle((void**) (&(*newbody).deepCopy), (*(*cl).c).instTypeBoundOp((*cl).c, dc, result, (*cl).info, ((tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ) 2), ((NI) 1)));
		}
		LA77_: ;
		{
			NIM_BOOL T81_;
			T81_ = (NIM_BOOL)0;
			T81_ = bodyIsNew;
			if (!(T81_)) goto LA82_;
			T81_ = ((*newbody).typeInst == NIM_NIL);
			LA82_: ;
			if (!T81_) goto LA83_;
			asgnRefNoCycle((void**) (&(*newbody).typeInst), result);
			{
				NIM_BOOL T87_;
				T87_ = (NIM_BOOL)0;
				T87_ = (((*newbody).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 33))&63U)))!=0);
				if (!(T87_)) goto LA88_;
				T87_ = !(((*newbody).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 11)));
				LA88_: ;
				if (!T87_) goto LA89_;
				{
					tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T93_;
					T93_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
					T93_ = lastSon_ab52xel9cFebv9am0xV04xXA(newbody);
					if (!!(((*T93_).typeInst == NIM_NIL))) goto LA94_;
				}
				goto LA91_;
				LA94_: ;
				{
					tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T97_;
					T97_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
					T97_ = lastSon_ab52xel9cFebv9am0xV04xXA(newbody);
					asgnRefNoCycle((void**) (&(*T97_).typeInst), result);
				}
				LA91_: ;
			}
			LA89_: ;
		}
		LA83_: ;
		nimZeroMem((void*)(&T98_), sizeof(tyTuple_KlSLWBROOViO04uLQHu7ig));
		T98_.Field0 = newbody;
		T98_.Field1 = result;
		asgnRefNoCycle((void**) (&(*(*cl).c).typesWithOps), (tySequence_YceFcaugL2PWNtVbyffD9bQ*) incrSeqV3(&((*(*cl).c).typesWithOps)->Sup, (&NTI_YceFcaugL2PWNtVbyffD9bQ_)));
		T99_ = (*(*cl).c).typesWithOps->Sup.len++;
		asgnRefNoCycle((void**) (&(*(*cl).c).typesWithOps->data[T99_].Field0), T98_.Field0);
		asgnRefNoCycle((void**) (&(*(*cl).c).typesWithOps->data[T99_].Field1), T98_.Field1);
		mm = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(bbody, IL64(36239903266220304));
		{
			tySequence_MvZmat48bhe9b6x9aUD58D5Q* methods;
			if (!!((((*mm).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 8))&63U)))!=0))) goto LA102_;
			(*mm).flags |= ((NU64)1)<<((((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 8))%(sizeof(NU64)*8));
			methods = (*mm).methods;
			{
				NI col;
				tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* meth;
				NI i_4;
				NI L;
				NI T105_;
				col = (NI)0;
				meth = (tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*)0;
				i_4 = ((NI) 0);
				T105_ = (methods ? methods->Sup.len : 0);
				L = T105_;
				{
					while (1) {
						tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* T108_;
						if (!(i_4 < L)) goto LA107;
						col = methods->data[i_4].Field0;
						meth = methods->data[i_4].Field1;
						T108_ = (tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*)0;
						T108_ = (*(*cl).c).instTypeBoundOp((*cl).c, meth, result, (*cl).info, ((tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ) 0), col);
						(void)(T108_);
						i_4 += ((NI) 1);
					} LA107: ;
				}
			}
			(*mm).flags &= ~(((NU64)1) << ((((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 8)) % (sizeof(NU64)*8)));
		}
		LA102_: ;
	}
	LA71_: ;
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*, replaceTypeVarsS_sLVA1gNd8WU8o9cEwKvBh9cA)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* s) {
	tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* result;
{	result = (tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w*)0;
	{
		if (!(s == NIM_NIL)) goto LA3_;
		result = NIM_NIL;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		NIM_BOOL T7_;
		T7_ = (NIM_BOOL)0;
		T7_ = !(((*cl).owner == NIM_NIL));
		if (!(T7_)) goto LA8_;
		T7_ = !(((*s).owner == (*cl).owner));
		LA8_: ;
		if (!T7_) goto LA9_;
		result = s;
		goto BeforeRet_;
	}
	LA9_: ;
	{
		NIM_BOOL T13_;
		T13_ = (NIM_BOOL)0;
		T13_ = ((*s).kind == ((tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw) 12));
		if (T13_) goto LA14_;
		T13_ = !(((*s).magic == ((tyEnum_TMagic_shZhZOdbVC5nnFvcXQAImg) 0)));
		LA14_: ;
		if (!T13_) goto LA15_;
		result = s;
		goto BeforeRet_;
	}
	LA15_: ;
	result = copySym_hicZXrzB9bwpjzwTWf8NTog(s, NIM_FALSE);
	(*result).flags |= ((NU64)1)<<((((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))%(sizeof(NU64)*8));
	asgnRefNoCycle((void**) (&(*result).owner), (*s).owner);
	asgnRefNoCycle((void**) (&(*result).typ), replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*s).typ));
	asgnRefNoCycle((void**) (&(*result).ast), replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ(cl, (*s).ast, ((NI) 0)));
	}BeforeRet_: ;
	return result;
}

static N_INLINE(NI, len_CdME9baJhvveuPEDZE9bXoxAsigmatch)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
	NI result;
	NI T1_;
	result = (NI)0;
	T1_ = ((*n)._Ukind.S6.sons ? (*n)._Ukind.S6.sons->Sup.len : 0);
	result = T1_;
	return result;
}

static N_INLINE(NI, safeLen_CdME9baJhvveuPEDZE9bXoxArenderer)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
	NI result;
	result = (NI)0;
	{
		if (!((*n).kind >= ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 0) && (*n).kind <= ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 23))) goto LA3_;
		result = ((NI) 0);
	}
	goto LA1_;
	LA3_: ;
	{
		result = len_CdME9baJhvveuPEDZE9bXoxAsigmatch(n);
	}
	LA1_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, prepareNode_gKp9aBprbf0cqtXoSYBnCkw)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
	tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* result;
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t;
	NIM_BOOL isCall;
{	result = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
	t = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*n).typ);
	{
		NIM_BOOL T3_;
		NIM_BOOL T4_;
		T3_ = (NIM_BOOL)0;
		T4_ = (NIM_BOOL)0;
		T4_ = !((t == NIM_NIL));
		if (!(T4_)) goto LA5_;
		T4_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60));
		LA5_: ;
		T3_ = T4_;
		if (!(T3_)) goto LA6_;
		T3_ = !(((*t).n == NIM_NIL));
		LA6_: ;
		if (!T3_) goto LA7_;
		{
			if (!(((*t).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 9))&63U)))!=0)) goto LA11_;
			result = prepareNode_gKp9aBprbf0cqtXoSYBnCkw(cl, (*t).n);
		}
		goto LA9_;
		LA11_: ;
		{
			result = (*t).n;
		}
		LA9_: ;
		goto BeforeRet_;
	}
	LA7_: ;
	result = copyNode_lz8T1F9c0YwEOpUnrAUYgjg(n);
	asgnRefNoCycle((void**) (&(*result).typ), t);
	{
		if (!((*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 3))) goto LA16_;
		asgnRefNoCycle((void**) (&(*result)._Ukind.S4.sym), replaceTypeVarsS_sLVA1gNd8WU8o9cEwKvBh9cA(cl, (*n)._Ukind.S4.sym));
	}
	LA16_: ;
	isCall = ((*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 27) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 29) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 30) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 31) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 26) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 28) || (*result).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 32));
	{
		NI i;
		NI colontmp_;
		NI i_2;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = safeLen_CdME9baJhvveuPEDZE9bXoxArenderer(n);
		i_2 = ((NI) 0);
		{
			while (1) {
				if (!(i_2 < colontmp_)) goto LA20;
				i = i_2;
				{
					NIM_BOOL T23_;
					T23_ = (NIM_BOOL)0;
					T23_ = isCall;
					if (!(T23_)) goto LA24_;
					T23_ = (i == ((NI) 0));
					LA24_: ;
					if (!T23_) goto LA25_;
					add_gCCf68XrWL79bKes6htzFjQ(result, (*n)._Ukind.S6.sons->data[i]);
				}
				goto LA21_;
				LA25_: ;
				{
					tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* T28_;
					T28_ = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
					T28_ = prepareNode_gKp9aBprbf0cqtXoSYBnCkw(cl, (*n)._Ukind.S6.sons->data[i]);
					add_gCCf68XrWL79bKes6htzFjQ(result, T28_);
				}
				LA21_: ;
				i_2 += ((NI) 1);
			} LA20: ;
		}
	}
	}BeforeRet_: ;
	return result;
}

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

static N_INLINE(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, skipIntLit_7SeREq19a8pkSCOuiHcpHnwsigmatch)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = !(((*t).n == NIM_NIL));
		if (!(T3_)) goto LA4_;
		T3_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 31) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 36));
		LA4_: ;
		if (!T3_) goto LA5_;
		result = copyType_UkDKseEIJgQZ1cGmoQSskA(t, (*t).owner, NIM_FALSE);
		asgnRefNoCycle((void**) (&(*result).n), NIM_NIL);
	}
	goto LA1_;
	LA5_: ;
	{
		result = t;
	}
	LA1_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(void, propagateFieldFlags_9apcPdGSC9bxzE64dwCRvbsA)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
{	{
		if (!(n == 0)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	switch ((*n).kind) {
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 3):
	{
		propagateToOwner_Zokyl22yTzwcKmRycgQbKg(t, (*(*n)._Ukind.S4.sym).typ);
	}
	break;
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 138):
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 139):
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 85):
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 88):
	{
		{
			tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* son;
			son = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
			{
				NI i;
				NI colontmp_;
				NI i_2;
				i = (NI)0;
				colontmp_ = (NI)0;
				colontmp_ = safeLen_CdME9baJhvveuPEDZE9bXoxArenderer(n);
				i_2 = ((NI) 0);
				{
					while (1) {
						if (!(i_2 < colontmp_)) goto LA10;
						i = i_2;
						son = (*n)._Ukind.S6.sons->data[i];
						propagateFieldFlags_9apcPdGSC9bxzE64dwCRvbsA(t, son);
						i_2 += ((NI) 1);
					} LA10: ;
				}
			}
		}
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet_: ;
}

N_LIB_PRIVATE N_NIMCALL(void, eraseVoidParams_SMFMWVGsCG21VhwFnWblRg)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
{	{
		NIM_BOOL T3_;
		T3_ = (NIM_BOOL)0;
		T3_ = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
		if (!(T3_)) goto LA4_;
		T3_ = ((*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 63));
		LA4_: ;
		if (!T3_) goto LA5_;
		asgnRefNoCycle((void**) (&(*t).sons->data[((NI) 0)]), NIM_NIL);
	}
	LA5_: ;
	{
		NI i;
		NI colontmp_;
		NI i_2;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
		i_2 = ((NI) 1);
		{
			while (1) {
				if (!(i_2 < colontmp_)) goto LA9;
				i = i_2;
				{
					NI pos;
					if (!((*(*t).sons->data[i]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 63))) goto LA12_;
					pos = i;
					{
						NI j;
						NI colontmp__2;
						NI colontmp__3;
						NI i_3;
						j = (NI)0;
						colontmp__2 = (NI)0;
						colontmp__3 = (NI)0;
						colontmp__2 = (NI)(i + ((NI) 1));
						colontmp__3 = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
						i_3 = colontmp__2;
						{
							while (1) {
								if (!(i_3 < colontmp__3)) goto LA16;
								j = i_3;
								{
									if (!!(((*(*t).sons->data[j]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 63)))) goto LA19_;
									asgnRefNoCycle((void**) (&(*t).sons->data[pos]), (*t).sons->data[j]);
									asgnRefNoCycle((void**) (&(*(*t).n)._Ukind.S6.sons->data[pos]), (*(*t).n)._Ukind.S6.sons->data[j]);
									pos += ((NI) 1);
								}
								LA19_: ;
								i_3 += ((NI) 1);
							} LA16: ;
						}
					}
					asgnRefNoCycle((void**) (&(*t).sons), (tySequence_Ef05srmQTDulnBdXR4Ja6Q*) setLengthSeqV2(&((*t).sons)->Sup, (&NTI_Ef05srmQTDulnBdXR4Ja6Q_), ((NI) (pos))));
					asgnRefNoCycle((void**) (&(*(*t).n)._Ukind.S6.sons), (tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ*) setLengthSeqV2(&((*(*t).n)._Ukind.S6.sons)->Sup, (&NTI_ehmV9bTklH2Gt9cXHV9c0HLeQ_), ((NI) (pos))));
					goto BeforeRet_;
				}
				LA12_: ;
				i_2 += ((NI) 1);
			} LA9: ;
		}
	}
	}BeforeRet_: ;
}

N_LIB_PRIVATE N_NIMCALL(void, skipIntLiteralParams_Bq8s6GYU4y5c8o6Mprs6mw)(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	{
		NI i;
		NI colontmp_;
		NI i_2;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(t);
		i_2 = ((NI) 0);
		{
			while (1) {
				if (!(i_2 < colontmp_)) goto LA3;
				i = i_2;
				{
					tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* p;
					tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* skipped;
					p = (*t).sons->data[i];
					{
						if (!(p == NIM_NIL)) goto LA7_;
						goto LA4;
					}
					LA7_: ;
					skipped = skipIntLit_7SeREq19a8pkSCOuiHcpHnwsigmatch(p);
					{
						if (!!((skipped == p))) goto LA11_;
						asgnRefNoCycle((void**) (&(*t).sons->data[i]), skipped);
						{
							if (!(((NI) 0) < i)) goto LA15_;
							asgnRefNoCycle((void**) (&(*(*(*(*t).n)._Ukind.S6.sons->data[i])._Ukind.S4.sym).typ), skipped);
						}
						LA15_: ;
					}
					LA11_: ;
				} LA4: ;
				i_2 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NIM_BOOL T19_;
		T19_ = (NIM_BOOL)0;
		T19_ = !(((*t).sons->data[((NI) 0)] == NIM_NIL));
		if (!(T19_)) goto LA20_;
		T19_ = ((*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60));
		LA20_: ;
		if (!T19_) goto LA21_;
		asgnRefNoCycle((void**) (&(*t).sons->data[((NI) 0)]), base_BFFuB9cFDZ89c6QWZqEFAtdA((*t).sons->data[((NI) 0)]));
	}
	LA21_: ;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, replaceTypeVarsTAux_cNsAY9aO2v1oTCPqZyHga1w_2)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
{	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	result = t;
	{
		if (!(t == NIM_NIL)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* lookup;
		if (!((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 12) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 51) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 54) || (*t).kind >= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 56) && (*t).kind <= ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60))) goto LA7_;
		lookup = lookup_NV2u9aw8arH6bTPO0CAzehA((*cl).typeMap, t);
		{
			if (!!((lookup == NIM_NIL))) goto LA11_;
			result = lookup;
			goto BeforeRet_;
		}
		LA11_: ;
	}
	LA7_: ;
	switch ((*t).kind) {
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 9):
	{
		result = handleGenericInvocation_cNsAY9aO2v1oTCPqZyHga1w_3(cl, t);
		{
			tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T16_;
			T16_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
			T16_ = lastSon_ab52xel9cFebv9am0xV04xXA(result);
			if (!((*T16_).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 52))) goto LA17_;
			(*result).kind = ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 53);
		}
		LA17_: ;
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 10):
	{
		NimStringDesc* T20_;
		NimStringDesc* T21_;
		T20_ = (NimStringDesc*)0;
		T21_ = (NimStringDesc*)0;
		T21_ = typeToString_QlvraUan7WbHowhAbvDvdA(t, ((tyEnum_TPreferedDesc_tnd4qt9c4xddV8oKV5zyusw) 0));
		T20_ = rawNewString((T21_ ? T21_->Sup.len : 0) + 22);
appendString(T20_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_5));
appendString(T20_, T21_);
appendString(T20_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_6));
		localError_NF6kBGchnhQYPbCedyefVA((*(*(*cl).c).graph).config, (*cl).info, T20_);
		result = errorType_TAFoHO9clTWAqtOQW5Fp9bfQ((*cl).c);
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 61):
	{
		tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n;
		{
			if (!(*cl).allowMetaTypes) goto LA25_;
			goto BeforeRet_;
		}
		LA25_: ;
		n = prepareNode_gKp9aBprbf0cqtXoSYBnCkw(cl, (*t).n);
		{
			if (!!(((*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 1)))) goto LA29_;
			n = (*(*cl).c).semConstExpr((*cl).c, n);
		}
		LA29_: ;
		{
			if (!((*(*n).typ).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 8))) goto LA33_;
			result = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg((*n).typ, 256);
		}
		goto LA31_;
		LA33_: ;
		{
			{
				if (!!(((*(*n).typ).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60)))) goto LA38_;
				result = newTypeS_n4b8NptRBFYYVGDg8PzeoQ(((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60), (*cl).c);
				if ((*result).sons) { nimGCunrefNoCycle((*result).sons); (*result).sons = NIM_NIL; }
				(*result).sons = (tySequence_Ef05srmQTDulnBdXR4Ja6Q*) newSeqRC1((&NTI_Ef05srmQTDulnBdXR4Ja6Q_), 1);
				asgnRefNoCycle((void**) (&(*result).sons->data[0]), (*n).typ);
				asgnRefNoCycle((void**) (&(*result).n), n);
			}
			goto LA36_;
			LA38_: ;
			{
				result = (*n).typ;
			}
			LA36_: ;
		}
		LA31_: ;
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 31):
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 36):
	{
		result = skipIntLit_7SeREq19a8pkSCOuiHcpHnwsigmatch(t);
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 8):
	{
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* lookup_2;
		lookup_2 = lookup_NV2u9aw8arH6bTPO0CAzehA((*cl).typeMap, t);
		{
			if (!!((lookup_2 == NIM_NIL))) goto LA45_;
			result = lookup_2;
			{
				NIM_BOOL T49_;
				T49_ = (NIM_BOOL)0;
				T49_ = (((*t).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 9))&63U)))!=0);
				if (T49_) goto LA50_;
				T49_ = (*cl).skipTypedesc;
				LA50_: ;
				if (!T49_) goto LA51_;
				result = base_BFFuB9cFDZ89c6QWZqEFAtdA(result);
			}
			LA51_: ;
		}
		goto LA43_;
		LA45_: ;
		{
			tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T56_;
			if (!!(((*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 0)))) goto LA54_;
			T56_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
			T56_ = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*t).sons->data[((NI) 0)]);
			result = makeTypeDesc_SFEZUqjOzhnpf13sBCUUHQ((*cl).c, T56_);
		}
		goto LA43_;
		LA54_: ;
		LA43_: ;
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 52):
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60):
	{
		result = t;
	}
	break;
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 11):
	case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 53):
	{
		tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T69_;
		RootObj* T70_;
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T74_;
		{
			tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T63_;
			RootObj* T64_;
			if (!(((NI) 100) < (*cl).recursionLimit)) goto LA61_;
			T63_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
			T63_ = &t->Sup;
			T64_ = (RootObj*)0;
			T64_ = idTableGet_6XGoeu1puMq6qoi2OW419bA((*cl).localCache, T63_);
			result = ((tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*) (T64_));
			{
				if (!!((result == NIM_NIL))) goto LA67_;
				goto BeforeRet_;
			}
			LA67_: ;
		}
		LA61_: ;
		(*cl).recursionLimit += ((NI) 1);
		result = instCopyType_2We2UBtd5z2KSfXRsPWlUQ(cl, t);
		T69_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
		T69_ = &t->Sup;
		T70_ = (RootObj*)0;
		T70_ = &result->Sup.Sup;
		idTablePut_Xhv7unnxpOqdw7OJsXRnRg((&(*cl).localCache), T69_, T70_);
		{
			NI i;
			NI colontmp_;
			NI i_2;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(result);
			i_2 = ((NI) 1);
			{
				while (1) {
					if (!(i_2 < colontmp_)) goto LA73;
					i = i_2;
					asgnRefNoCycle((void**) (&(*result).sons->data[i]), replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*result).sons->data[i]));
					i_2 += ((NI) 1);
				} LA73: ;
			}
		}
		T74_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
		T74_ = lastSon_ab52xel9cFebv9am0xV04xXA(result);
		propagateToOwner_Zokyl22yTzwcKmRycgQbKg(result, T74_);
	}
	break;
	default:
	{
		{
			NIM_BOOL T78_;
			tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T91_;
			RootObj* T92_;
			T78_ = (NIM_BOOL)0;
			T78_ = containsGenericType_YPjOkGV9axAnGR3UfLeWZ1g(t);
			if (!T78_) goto LA79_;
			{
				tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA* T85_;
				RootObj* T86_;
				if (!(((NI) 100) < (*cl).recursionLimit)) goto LA83_;
				T85_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
				T85_ = &t->Sup;
				T86_ = (RootObj*)0;
				T86_ = idTableGet_6XGoeu1puMq6qoi2OW419bA((*cl).localCache, T85_);
				result = ((tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*) (T86_));
				{
					if (!!((result == NIM_NIL))) goto LA89_;
					goto BeforeRet_;
				}
				LA89_: ;
			}
			LA83_: ;
			(*cl).recursionLimit += ((NI) 1);
			result = instCopyType_2We2UBtd5z2KSfXRsPWlUQ(cl, t);
			(*result).size = IL64(-1);
			T91_ = (tyObject_TIdObj_iIXPrEsiKHiioLj0HSkQhA*)0;
			T91_ = &t->Sup;
			T92_ = (RootObj*)0;
			T92_ = &result->Sup.Sup;
			idTablePut_Xhv7unnxpOqdw7OJsXRnRg((&(*cl).localCache), T91_, T92_);
			{
				NI i_3;
				NI colontmp__2;
				NI T94_;
				NI res;
				i_3 = (NI)0;
				colontmp__2 = (NI)0;
				T94_ = (NI)0;
				T94_ = sonsLen_SWFNCiWYB89bTUPh5KptkvA(result);
				colontmp__2 = (NI)(T94_ - ((NI) 1));
				res = ((NI) 0);
				{
					while (1) {
						if (!(res <= colontmp__2)) goto LA96;
						i_3 = res;
						{
							tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* r;
							if (!!(((*result).sons->data[i_3] == NIM_NIL))) goto LA99_;
							r = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*result).sons->data[i_3]);
							{
								tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* r2;
								if (!((*result).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 17))) goto LA103_;
								r2 = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(r, IL64(70368744177680));
								{
									if (!((*r2).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 21) || (*r2).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 22))) goto LA107_;
									r = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(r2, 6291456);
								}
								LA107_: ;
							}
							LA103_: ;
							asgnRefNoCycle((void**) (&(*result).sons->data[i_3]), r);
							{
								NIM_BOOL T111_;
								T111_ = (NIM_BOOL)0;
								T111_ = !(((*result).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 16)));
								if (T111_) goto LA112_;
								T111_ = !((i_3 == ((NI) 0)));
								LA112_: ;
								if (!T111_) goto LA113_;
								propagateToOwner_Zokyl22yTzwcKmRycgQbKg(result, r);
							}
							LA113_: ;
						}
						LA99_: ;
						res += ((NI) 1);
					} LA96: ;
				}
			}
			asgnRefNoCycle((void**) (&(*result).n), replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ(cl, (*result).n, ((*result).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 25))));
			switch ((*result).kind) {
			case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 16):
			{
				tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* idx;
				idx = (*result).sons->data[((NI) 0)];
				{
					NimStringDesc* T120_;
					if (!!(!(((*idx).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 60))))) goto LA118_;
					T120_ = (NimStringDesc*)0;
					T120_ = dollar__E5ya0OOlyISUCw4ENFn9bLA(TM_mrkrD9c2e31kE4GdQtpMdaQ_10);
					internalError_5hPl6LjCYJxMYxh9af9b9bXzw((*(*(*cl).c).graph).config, T120_);
				}
				LA118_: ;
			}
			break;
			case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 17):
			case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 18):
			{
				propagateFieldFlags_9apcPdGSC9bxzE64dwCRvbsA(result, (*result).n);
			}
			break;
			case ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 25):
			{
				eraseVoidParams_SMFMWVGsCG21VhwFnWblRg(result);
				skipIntLiteralParams_Bq8s6GYU4y5c8o6Mprs6mw(result);
			}
			break;
			default:
			{
			}
			break;
			}
		}
		LA79_: ;
	}
	break;
	}
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	result = replaceTypeVarsTAux_cNsAY9aO2v1oTCPqZyHga1w_2(cl, t);
	return result;
}

N_LIB_PRIVATE N_NIMCALL(NIM_BOOL, isTypeParam_u68mEkLdR18iAnbsLA6Rgg)(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
	NIM_BOOL result;
	NIM_BOOL T1_;
	NIM_BOOL T3_;
	NIM_BOOL T5_;
{	result = (NIM_BOOL)0;
	T1_ = (NIM_BOOL)0;
	T1_ = ((*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 3));
	if (!(T1_)) goto LA2_;
	T3_ = (NIM_BOOL)0;
	T3_ = ((*(*n)._Ukind.S4.sym).kind == ((tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw) 4));
	if (T3_) goto LA4_;
	T5_ = (NIM_BOOL)0;
	T5_ = ((*(*n)._Ukind.S4.sym).kind == ((tyEnum_TSymKind_cNCW9acsSznmEccl1fgQwkw) 7));
	if (!(T5_)) goto LA6_;
	T5_ = (((*(*n)._Ukind.S4.sym).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0);
	LA6_: ;
	T3_ = T5_;
	LA4_: ;
	T1_ = T3_;
	LA2_: ;
	result = T1_;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, reResolveCallsWithTypedescParams_sMLp8yxUilACnyKrAFoTOA)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n) {
	tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* result;
{	result = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		NIM_BOOL T3_;
		NIM_BOOL needsFixing;
		T3_ = (NIM_BOOL)0;
		T3_ = ((*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 27) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 29) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 30) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 31) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 26) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 28) || (*n).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 32));
		if (!(T3_)) goto LA4_;
		T3_ = (((*(*(*n)._Ukind.S6.sons->data[((NI) 0)])._Ukind.S4.sym).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0);
		LA4_: ;
		if (!T3_) goto LA5_;
		needsFixing = NIM_FALSE;
		{
			NI i;
			NI colontmp_;
			NI i_2;
			i = (NI)0;
			colontmp_ = (NI)0;
			colontmp_ = safeLen_CdME9baJhvveuPEDZE9bXoxArenderer(n);
			i_2 = ((NI) 1);
			{
				while (1) {
					if (!(i_2 < colontmp_)) goto LA9;
					i = i_2;
					{
						NIM_BOOL T12_;
						T12_ = (NIM_BOOL)0;
						T12_ = isTypeParam_u68mEkLdR18iAnbsLA6Rgg((*n)._Ukind.S6.sons->data[i]);
						if (!T12_) goto LA13_;
						needsFixing = NIM_TRUE;
					}
					LA13_: ;
					i_2 += ((NI) 1);
				} LA9: ;
			}
		}
		{
			if (!needsFixing) goto LA17_;
			asgnRefNoCycle((void**) (&(*n)._Ukind.S6.sons->data[((NI) 0)]), newSymNode_UWZXukHA5As9aCftRHbafBg((*(*(*n)._Ukind.S6.sons->data[((NI) 0)])._Ukind.S4.sym).owner));
			result = (*(*cl).c).semOverloadedCall((*cl).c, n, n, 12288, 0);
			goto BeforeRet_;
		}
		LA17_: ;
	}
	LA5_: ;
	{
		NI i_3;
		NI colontmp__2;
		NI i_4;
		i_3 = (NI)0;
		colontmp__2 = (NI)0;
		colontmp__2 = safeLen_CdME9baJhvveuPEDZE9bXoxArenderer(n);
		i_4 = ((NI) 0);
		{
			while (1) {
				if (!(i_4 < colontmp__2)) goto LA21;
				i_3 = i_4;
				asgnRefNoCycle((void**) (&(*n)._Ukind.S6.sons->data[i_3]), reResolveCallsWithTypedescParams_sMLp8yxUilACnyKrAFoTOA(cl, (*n)._Ukind.S6.sons->data[i_3]));
				i_4 += ((NI) 1);
			} LA21: ;
		}
	}
	result = n;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ)(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg* cl, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, NI start) {
	tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* result;
{	result = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
	{
		if (!(n == NIM_NIL)) goto LA3_;
		goto BeforeRet_;
	}
	LA3_: ;
	result = copyNode_lz8T1F9c0YwEOpUnrAUYgjg(n);
	{
		if (!!(((*n).typ == NIM_NIL))) goto LA7_;
		asgnRefNoCycle((void**) (&(*result).typ), replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w(cl, (*n).typ));
	}
	LA7_: ;
	switch ((*n).kind) {
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 0) ... ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 2):
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 4) ... ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 23):
	{
	}
	break;
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 3):
	{
		asgnRefNoCycle((void**) (&(*result)._Ukind.S4.sym), replaceTypeVarsS_sLVA1gNd8WU8o9cEwKvBh9cA(cl, (*n)._Ukind.S4.sym));
		{
			tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ* T15_;
			if (!((*(*(*result)._Ukind.S4.sym).typ).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 63))) goto LA13_;
			T15_ = (tySequence_ehmV9bTklH2Gt9cXHV9c0HLeQ*)0;
			T15_ = NIM_NIL;
			result = newNode_sa9bwmR1oPRYm27rlMD66CQ(((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 138), (*n).info, T15_, NIM_NIL);
		}
		LA13_: ;
	}
	break;
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 140):
	{
		tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* branch;
		branch = NIM_NIL;
		{
			NI i;
			NI colontmp_;
			NI T18_;
			NI res;
			i = (NI)0;
			colontmp_ = (NI)0;
			T18_ = (NI)0;
			T18_ = sonsLen_qPWPHw7WgJeEVYUdcaRIig(n);
			colontmp_ = (NI)(T18_ - ((NI) 1));
			res = ((NI) 0);
			{
				while (1) {
					tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* it;
					if (!(res <= colontmp_)) goto LA20;
					i = res;
					it = (*n)._Ukind.S6.sons->data[i];
					{
						if (!(it == NIM_NIL)) goto LA23_;
						illFormedAst_aOnJJ9cXkOooTyUuLmnc09bw(n, (*(*(*cl).c).graph).config);
					}
					LA23_: ;
					switch ((*it).kind) {
					case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 86):
					{
						tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* cond;
						tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* e;
						checkSonsLen_EezdXeDvu4rB7fR84AJZgw(it, ((NI) 2), (*(*(*cl).c).graph).config);
						cond = prepareNode_gKp9aBprbf0cqtXoSYBnCkw(cl, (*it)._Ukind.S6.sons->data[((NI) 0)]);
						e = (*(*cl).c).semConstExpr((*cl).c, cond);
						{
							if (!!(((*e).kind == ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 6)))) goto LA28_;
							internalError_yTu5SGHF0j0P9cQrqN7YylA((*(*(*cl).c).graph).config, (*e).info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_12));
						}
						LA28_: ;
						{
							NIM_BOOL T32_;
							T32_ = (NIM_BOOL)0;
							T32_ = !(((*e)._Ukind.S1.intVal == IL64(0)));
							if (!(T32_)) goto LA33_;
							T32_ = (branch == NIM_NIL);
							LA33_: ;
							if (!T32_) goto LA34_;
							branch = (*it)._Ukind.S6.sons->data[((NI) 1)];
						}
						LA34_: ;
					}
					break;
					case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 88):
					{
						checkSonsLen_EezdXeDvu4rB7fR84AJZgw(it, ((NI) 1), (*(*(*cl).c).graph).config);
						{
							if (!(branch == NIM_NIL)) goto LA39_;
							branch = (*it)._Ukind.S6.sons->data[((NI) 0)];
						}
						LA39_: ;
					}
					break;
					default:
					{
						illFormedAst_aOnJJ9cXkOooTyUuLmnc09bw(n, (*(*(*cl).c).graph).config);
					}
					break;
					}
					res += ((NI) 1);
				} LA20: ;
			}
		}
		{
			if (!!((branch == NIM_NIL))) goto LA44_;
			result = replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ(cl, branch, ((NI) 0));
		}
		goto LA42_;
		LA44_: ;
		{
			result = newNodeI_I7fH85CUcZMasoPRKxPsPg(((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 138), (*n).info);
		}
		LA42_: ;
	}
	break;
	case ((tyEnum_TNodeKind_G4E4Gxe7oI2Cm03rkiOzQw) 62):
	{
		tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n_2;
		n_2 = prepareNode_gKp9aBprbf0cqtXoSYBnCkw(cl, n);
		n_2 = reResolveCallsWithTypedescParams_sMLp8yxUilACnyKrAFoTOA(cl, n_2);
		{
			if (!(*cl).allowMetaTypes) goto LA50_;
			result = n_2;
		}
		goto LA48_;
		LA50_: ;
		{
			result = (*(*cl).c).semExpr((*cl).c, n_2, 0);
		}
		LA48_: ;
	}
	break;
	default:
	{
		NI length;
		length = sonsLen_qPWPHw7WgJeEVYUdcaRIig(n);
		{
			if (!(((NI) 0) < length)) goto LA56_;
			newSons_W9cZG9c5PyHYZPzxHXuunFyQ(result, length);
			{
				if (!(((NI) 0) < start)) goto LA60_;
				asgnRefNoCycle((void**) (&(*result)._Ukind.S6.sons->data[((NI) 0)]), (*n)._Ukind.S6.sons->data[((NI) 0)]);
			}
			LA60_: ;
			{
				NI i_2;
				NI colontmp__2;
				NI res_2;
				i_2 = (NI)0;
				colontmp__2 = (NI)0;
				colontmp__2 = (NI)(length - ((NI) 1));
				res_2 = start;
				{
					while (1) {
						if (!(res_2 <= colontmp__2)) goto LA64;
						i_2 = res_2;
						asgnRefNoCycle((void**) (&(*result)._Ukind.S6.sons->data[i_2]), replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ(cl, (*n)._Ukind.S6.sons->data[i_2], ((NI) 0)));
						res_2 += ((NI) 1);
					} LA64: ;
				}
			}
		}
		LA56_: ;
	}
	break;
	}
	}BeforeRet_: ;
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*, replaceTypesInBody_JQMwbj1fgdFwBCg7mhUBRQ)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* p, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* n, tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* owner, NIM_BOOL allowMetaTypes) {
	tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw* result;
	tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA typeMap;
	tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg cl;
	result = (tyObject_TNode_bROa11lyF5vxEN9aYNbHmhw*)0;
	nimZeroMem((void*)(&typeMap), sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA));
	initLayeredTypeMap_yTc1S4IWeD7MQCgbin2Tpg(pt, (&typeMap));
	nimZeroMem((void*)(&cl), sizeof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg));
	initTypeVars_tAmlO1OVow0h9bbM019arw9aA(p, (&typeMap), (*n).info, owner, (&cl));
	cl.allowMetaTypes = allowMetaTypes;
	pushInfoContext_jVPMMc4H29cyI52qg0Kp9aUg((*(*p).graph).config, (*n).info);
	result = replaceTypeVarsN_TMTYUYo5YIKojKgBmj9boOQ((&cl), n, ((NI) 0));
	popInfoContext_HFVjkUQz7LMV9aOS6uKLckQ((*(*p).graph).config);
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, generateTypeInstance_ab5BITmU2P8zKztV9cfNtsg)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* p, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA typeMap;
	tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg cl;
	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	nimZeroMem((void*)(&typeMap), sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA));
	initLayeredTypeMap_yTc1S4IWeD7MQCgbin2Tpg(pt, (&typeMap));
	nimZeroMem((void*)(&cl), sizeof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg));
	initTypeVars_tAmlO1OVow0h9bbM019arw9aA(p, (&typeMap), info, NIM_NIL, (&cl));
	pushInfoContext_jVPMMc4H29cyI52qg0Kp9aUg((*(*p).graph).config, info);
	result = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w((&cl), t);
	popInfoContext_HFVjkUQz7LMV9aOS6uKLckQ((*(*p).graph).config);
	return result;
}

N_LIB_PRIVATE N_NIMCALL(tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*, prepareMetatypeForSigmatch_ab5BITmU2P8zKztV9cfNtsg_2)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* p, tyObject_TIdTable_9aiv9bp2t5icFNINcg9c4xi1Q pt, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* result;
	tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA typeMap;
	tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg cl;
	result = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
	nimZeroMem((void*)(&typeMap), sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA));
	initLayeredTypeMap_yTc1S4IWeD7MQCgbin2Tpg(pt, (&typeMap));
	nimZeroMem((void*)(&cl), sizeof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg));
	initTypeVars_tAmlO1OVow0h9bbM019arw9aA(p, (&typeMap), info, NIM_NIL, (&cl));
	cl.allowMetaTypes = NIM_TRUE;
	pushInfoContext_jVPMMc4H29cyI52qg0Kp9aUg((*(*p).graph).config, info);
	result = replaceTypeVarsT_cNsAY9aO2v1oTCPqZyHga1w((&cl), t);
	popInfoContext_HFVjkUQz7LMV9aOS6uKLckQ((*(*p).graph).config);
	return result;
}

N_LIB_PRIVATE N_NIMCALL(void, instAllTypeBoundOp_yYm9aRx6XMWSHifMknPKl5Q)(tyObject_TContext_C9bB2okDBl3OKGUBiY5k5Ug* c, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info) {
	NI i;
	i = ((NI) 0);
	{
		while (1) {
			NI T3_;
			tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* newty;
			tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* oldty;
			tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* opr;
			tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* opr_2;
			tyObject_TSym_JpsEh5i1AcKChGYbg7aV4w* opr_3;
			T3_ = ((*c).typesWithOps ? (*c).typesWithOps->Sup.len : 0);
			if (!(i < T3_)) goto LA2;
			newty = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
			newty = (*c).typesWithOps->data[i].Field0;
			oldty = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
			oldty = (*c).typesWithOps->data[i].Field1;
			opr = (*newty).destructor;
			{
				NIM_BOOL T6_;
				T6_ = (NIM_BOOL)0;
				T6_ = !((opr == NIM_NIL));
				if (!(T6_)) goto LA7_;
				T6_ = !((((*opr).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0));
				LA7_: ;
				if (!T6_) goto LA8_;
				asgnRefNoCycle((void**) (&(*newty).destructor), (*c).instTypeBoundOp(c, opr, oldty, info, ((tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ) 0), ((NI) 1)));
			}
			LA8_: ;
			opr_2 = (*newty).sink;
			{
				NIM_BOOL T12_;
				T12_ = (NIM_BOOL)0;
				T12_ = !((opr_2 == NIM_NIL));
				if (!(T12_)) goto LA13_;
				T12_ = !((((*opr_2).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0));
				LA13_: ;
				if (!T12_) goto LA14_;
				asgnRefNoCycle((void**) (&(*newty).sink), (*c).instTypeBoundOp(c, opr_2, oldty, info, ((tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ) 0), ((NI) 1)));
			}
			LA14_: ;
			opr_3 = (*newty).assignment;
			{
				NIM_BOOL T18_;
				T18_ = (NIM_BOOL)0;
				T18_ = !((opr_3 == NIM_NIL));
				if (!(T18_)) goto LA19_;
				T18_ = !((((*opr_3).flags &((NU64)1<<((NU)(((tyEnum_TSymFlag_K9ay6LWMat9bUiT9bIbMxpDHw) 2))&63U)))!=0));
				LA19_: ;
				if (!T18_) goto LA20_;
				asgnRefNoCycle((void**) (&(*newty).assignment), (*c).instTypeBoundOp(c, opr_3, oldty, info, ((tyEnum_TTypeAttachedOp_jZY2AMF49b43fezf9aDwN9c9cQ) 0), ((NI) 1)));
			}
			LA20_: ;
			i += ((NI) 1);
		} LA2: ;
	}
	asgnRefNoCycle((void**) (&(*c).typesWithOps), (tySequence_YceFcaugL2PWNtVbyffD9bQ*) setLengthSeqV2(&((*c).typesWithOps)->Sup, (&NTI_YceFcaugL2PWNtVbyffD9bQ_), ((NI) 0)));
}

N_LIB_PRIVATE N_NIMCALL(void, checkConstructedType_09chTcGpP9cwUssGPOfkWIGw)(tyObject_ConfigRefcolonObjectType__LaK09ayL9alwKUad7rts0rTw* conf, tyObject_TLineInfo_WGx4rAexNXnczy1Avn646Q info, tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* typ) {
	tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* t;
	t = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(typ, 8192);
	{
		if (!((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 51) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 54) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 52) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 53) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 56) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 57) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 58) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 59))) goto LA3_;
	}
	goto LA1_;
	LA3_: ;
	{
		NIM_BOOL T6_;
		tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ* T8_;
		T6_ = (NIM_BOOL)0;
		T6_ = (((*t).flags &((NU64)1<<((NU)(((tyEnum_TTypeFlag_x2m5g1NpbmDig4wLT3Ylhw) 4))&63U)))!=0);
		if (!(T6_)) goto LA7_;
		T8_ = (tyObject_TType_v9ae2Dpu13OW2ZJ2U9bNMd9cQ*)0;
		T8_ = skipTypes_7vZ9a9bub9bucX5E73hsr9cjvg(t, IL64(36099165763184912));
		T6_ = !(((*T8_).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 17)));
		LA7_: ;
		if (!T6_) goto LA9_;
		localError_NF6kBGchnhQYPbCedyefVA(conf, info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_8));
	}
	goto LA1_;
	LA9_: ;
	{
		NIM_BOOL T12_;
		T12_ = (NIM_BOOL)0;
		T12_ = ((*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 23) || (*t).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 47));
		if (!(T12_)) goto LA13_;
		T12_ = ((*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 23) || (*(*t).sons->data[((NI) 0)]).kind == ((tyEnum_TTypeKind_9a3YiReNVD0IJHWFKgXRe9ag) 47));
		LA13_: ;
		if (!T12_) goto LA14_;
		localError_NF6kBGchnhQYPbCedyefVA(conf, info, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_9));
	}
	goto LA1_;
	LA14_: ;
	{
		NI64 T17_;
		NimStringDesc* T20_;
		NimStringDesc* T21_;
		T17_ = (NI64)0;
		T17_ = computeSize_vCG1GF2Iu043oALVyuJfOw_2(conf, t);
		if (!(T17_ == IL64(-2))) goto LA18_;
		T20_ = (NimStringDesc*)0;
		T21_ = (NimStringDesc*)0;
		T21_ = typeToString_QlvraUan7WbHowhAbvDvdA(t, ((tyEnum_TPreferedDesc_tnd4qt9c4xddV8oKV5zyusw) 0));
		T20_ = rawNewString((T21_ ? T21_->Sup.len : 0) + 28);
appendString(T20_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_13));
appendString(T20_, T21_);
appendString(T20_, ((NimStringDesc*) &TM_mrkrD9c2e31kE4GdQtpMdaQ_6));
		localError_NF6kBGchnhQYPbCedyefVA(conf, info, T20_);
	}
	goto LA1_;
	LA18_: ;
	LA1_: ;
}
N_LIB_PRIVATE N_NIMCALL(void, compiler_semtypinstInit000)(void) {
{
	TFrame FR_; FR_.len = 0;
}
}

N_LIB_PRIVATE N_NIMCALL(void, compiler_semtypinstDatInit000)(void) {
static TNimNode* TM_mrkrD9c2e31kE4GdQtpMdaQ_2[2];
static TNimNode* TM_mrkrD9c2e31kE4GdQtpMdaQ_3[9];
static TNimNode TM_mrkrD9c2e31kE4GdQtpMdaQ_0[13];
NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_.size = sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA);
NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_.kind = 18;
NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_.base = 0;
TM_mrkrD9c2e31kE4GdQtpMdaQ_2[0] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[1];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[1].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[1].offset = offsetof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA, topLayer);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[1].typ = (&NTI_9aiv9bp2t5icFNINcg9c4xi1Q_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[1].name = "topLayer";
TM_mrkrD9c2e31kE4GdQtpMdaQ_2[1] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[2];
NTI_AWHx031vx269auvjKCITW9cw_.size = sizeof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA*);
NTI_AWHx031vx269auvjKCITW9cw_.kind = 21;
NTI_AWHx031vx269auvjKCITW9cw_.base = (&NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_);
NTI_AWHx031vx269auvjKCITW9cw_.flags = 3;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[2].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[2].offset = offsetof(tyObject_LayeredIdTable_Dxk9cFa3Fer9bZpQ9b4aBAFkA, nextLayer);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[2].typ = (&NTI_AWHx031vx269auvjKCITW9cw_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[2].name = "nextLayer";
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[0].len = 2; TM_mrkrD9c2e31kE4GdQtpMdaQ_0[0].kind = 2; TM_mrkrD9c2e31kE4GdQtpMdaQ_0[0].sons = &TM_mrkrD9c2e31kE4GdQtpMdaQ_2[0];
NTI_Dxk9cFa3Fer9bZpQ9b4aBAFkA_.node = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[0];
NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_.size = sizeof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg);
NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_.kind = 18;
NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_.base = 0;
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[0] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[4];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[4].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[4].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, c);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[4].typ = (&NTI_EjEifkTC8tg9afiUW4StSSA_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[4].name = "c";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[1] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[5];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[5].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[5].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, typeMap);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[5].typ = (&NTI_AWHx031vx269auvjKCITW9cw_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[5].name = "typeMap";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[2] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[6];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[6].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[6].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, symMap);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[6].typ = (&NTI_9aiv9bp2t5icFNINcg9c4xi1Q_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[6].name = "symMap";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[3] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[7];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[7].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[7].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, localCache);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[7].typ = (&NTI_9aiv9bp2t5icFNINcg9c4xi1Q_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[7].name = "localCache";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[4] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[8];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[8].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[8].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, info);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[8].typ = (&NTI_WGx4rAexNXnczy1Avn646Q_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[8].name = "info";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[5] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[9];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[9].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[9].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, allowMetaTypes);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[9].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[9].name = "allowMetaTypes";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[6] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[10];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[10].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[10].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, skipTypedesc);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[10].typ = (&NTI_VaVACK0bpYmqIQ0mKcHfQQ_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[10].name = "skipTypedesc";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[7] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[11];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[11].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[11].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, owner);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[11].typ = (&NTI_K9bspPztfoWajecnwjyHuYQ_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[11].name = "owner";
TM_mrkrD9c2e31kE4GdQtpMdaQ_3[8] = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[12];
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[12].kind = 1;
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[12].offset = offsetof(tyObject_TReplTypeVars_gMP9b9b8d4Uze3mE5G9aP9afmg, recursionLimit);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[12].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA_);
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[12].name = "recursionLimit";
TM_mrkrD9c2e31kE4GdQtpMdaQ_0[3].len = 9; TM_mrkrD9c2e31kE4GdQtpMdaQ_0[3].kind = 2; TM_mrkrD9c2e31kE4GdQtpMdaQ_0[3].sons = &TM_mrkrD9c2e31kE4GdQtpMdaQ_3[0];
NTI_gMP9b9b8d4Uze3mE5G9aP9afmg_.node = &TM_mrkrD9c2e31kE4GdQtpMdaQ_0[3];
}

