diff --git a/src/builtins.ts b/src/builtins.ts
index d104a7a7..c3e3b7e7 100644
--- a/src/builtins.ts
+++ b/src/builtins.ts
@@ -5,7 +5,8 @@
 
  import {
   Compiler,
-  ContextualFlags
+  ContextualFlags,
+  RuntimeFeatures
 } from "./compiler";
 
 import {
@@ -141,6 +142,7 @@ export namespace BuiltinSymbols {
   export const call_direct = "~lib/builtins/call_direct";
   export const call_indirect = "~lib/builtins/call_indirect";
   export const instantiate = "~lib/builtins/instantiate";
+  export const idof = "~lib/builtins/idof";
 
   export const i8 = "~lib/builtins/i8";
   export const i16 = "~lib/builtins/i16";
@@ -464,11 +466,10 @@ export namespace BuiltinSymbols {
   export const v8x16_shuffle = "~lib/builtins/v8x16.shuffle";
 
   // internals
-  export const HEAP_BASE = "~lib/builtins/HEAP_BASE";
-  export const RTTI_BASE = "~lib/builtins/RTTI_BASE";
-  export const idof = "~lib/builtins/idof";
-  export const visit_globals = "~lib/builtins/__visit_globals";
-  export const visit_members = "~lib/builtins/__visit_members";
+  export const HEAP_BASE = "~lib/heap/HEAP_BASE";
+  export const RTTI_BASE = "~lib/rt/RTTI_BASE";
+  export const visit_globals = "~lib/rt/__visit_globals";
+  export const visit_members = "~lib/rt/__visit_members";
 
   // std/diagnostics.ts
   export const ERROR = "~lib/diagnostics/ERROR";
@@ -3557,7 +3558,7 @@ export function compileCall(
         return module.createUnreachable();
       }
       let arg0 = compiler.compileExpression(operands[0], Type.u32, ContextualFlags.IMPLICIT);
-      compiler.needsVisitGlobals = true;
+      compiler.runtimeFeatures |= RuntimeFeatures.visitGlobals;
       compiler.currentType = Type.void;
       return module.createCall(BuiltinSymbols.visit_globals, [ arg0 ], NativeType.None);
     }
@@ -3571,10 +3572,123 @@ export function compileCall(
       }
       let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT);
       let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT);
-      compiler.needsVisitMembers = true;
+      compiler.runtimeFeatures |= RuntimeFeatures.visitMembers;
       compiler.currentType = Type.void;
       return module.createCall(BuiltinSymbols.visit_members, [ arg0, arg1 ], NativeType.None);
     }
+    // The following simply intercept the respective runtime calls in order to force
+    // compilation of runtime functionality to the bottom of generated binaries.
+    case compiler.program.visitInstance.internalName: {
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 2, reportNode, compiler) // ref, cookie
+      ) {
+        compiler.currentType = Type.void;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT);
+      let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.visit;
+      compiler.currentType = Type.void;
+      return module.createCall(compiler.program.visitInstance.internalName, [ arg0, arg1 ], NativeType.None);
+    }
+    case compiler.program.retainInstance.internalName: {
+      let usizeType = compiler.options.usizeType;
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 1, reportNode, compiler) // ref
+      ) {
+        compiler.currentType = usizeType;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.retain;
+      compiler.currentType = usizeType;
+      return module.createCall(compiler.program.retainInstance.internalName, [ arg0 ], compiler.options.nativeSizeType);
+    }
+    case compiler.program.retainReleaseInstance.internalName: {
+      let usizeType = compiler.options.usizeType;
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 2, reportNode, compiler) // newRef, oldRef
+      ) {
+        compiler.currentType = usizeType;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT);
+      let arg1 = compiler.compileExpression(operands[1], usizeType, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.retainRelease;
+      compiler.currentType = usizeType;
+      return module.createCall(compiler.program.retainReleaseInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType);
+    }
+    case compiler.program.releaseInstance.internalName: {
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 1, reportNode, compiler) // ref
+      ) {
+        compiler.currentType = Type.void;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.release;
+      compiler.currentType = Type.void;
+      return module.createCall(compiler.program.releaseInstance.internalName, [ arg0 ], NativeType.None);
+    }
+    case compiler.program.allocInstance.internalName: {
+      let usizeType = compiler.options.usizeType;
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 2, reportNode, compiler) // size, id
+      ) {
+        compiler.currentType = usizeType;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT);
+      let arg1 = compiler.compileExpression(operands[1], Type.u32, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.alloc;
+      compiler.currentType = usizeType;
+      return module.createCall(compiler.program.allocInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType);
+    }
+    case compiler.program.reallocInstance.internalName: {
+      let usizeType = compiler.options.usizeType;
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 2, reportNode, compiler) // ref, size
+      ) {
+        compiler.currentType = usizeType;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], usizeType, ContextualFlags.IMPLICIT);
+      let arg1 = compiler.compileExpression(operands[1], usizeType, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.realloc;
+      compiler.currentType = usizeType;
+      return module.createCall(compiler.program.reallocInstance.internalName, [ arg0, arg1 ], compiler.options.nativeSizeType);
+    }
+    case compiler.program.freeInstance.internalName: {
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 1, reportNode, compiler) // ref
+      ) {
+        compiler.currentType = Type.void;
+        return module.createUnreachable();
+      }
+      let arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType, ContextualFlags.IMPLICIT);
+      compiler.runtimeFeatures |= RuntimeFeatures.free;
+      compiler.currentType = Type.void;
+      return module.createCall(compiler.program.freeInstance.internalName, [ arg0 ], NativeType.None);
+    }
+    case compiler.program.collectInstance.internalName: {
+      if (
+        checkTypeAbsent(typeArguments, reportNode, prototype) |
+        checkArgsRequired(operands, 0, reportNode, compiler)
+      ) {
+        compiler.currentType = Type.void;
+        return module.createUnreachable();
+      }
+      compiler.runtimeFeatures |= RuntimeFeatures.collect;
+      compiler.currentType = Type.void;
+      return module.createCall(compiler.program.collectInstance.internalName, null, NativeType.None);
+    }
   }
 
   // try to defer inline asm to a concrete built-in
diff --git a/src/compiler.ts b/src/compiler.ts
index b6eb370a..820c3399 100644
--- a/src/compiler.ts
+++ b/src/compiler.ts
@@ -250,6 +250,35 @@ export const enum ContextualFlags {
   STATIC_CAPABLE = 1 << 6
 }
 
+/** Runtime features to be activated by the compiler. */
+export const enum RuntimeFeatures {
+  NONE = 0,
+  /** Requires HEAP_BASE and heap setup. */
+  HEAP = 1 << 0,
+  /** Requires RTTI_BASE and RTTI setup. */
+  RTTI = 1 << 1,
+  /** Requires the alloc function. */
+  alloc = 1 << 2,
+  /** Requires the realloc function. */
+  realloc = 1 << 3,
+  /** Requires the free function. */
+  free = 1 << 4,
+  /** Requires the retain function. */
+  retain = 1 << 5,
+  /** Requires the retainRelease functino. */
+  retainRelease = 1 << 6,
+  /** Requires the release function. */
+  release = 1 << 7,
+  /** Requires the collect function. */
+  collect = 1 << 8,
+  /** Requires the visit function. */
+  visit = 1 << 9,
+  /** Requires the built-in globals visitor. */
+  visitGlobals = 1 << 10,
+  /** Requires the built-in members visitor. */
+  visitMembers = 1 << 11
+}
+
 /** Compiler interface. */
 export class Compiler extends DiagnosticEmitter {
 
@@ -283,22 +312,8 @@ export class Compiler extends DiagnosticEmitter {
   argcVar: GlobalRef = 0;
   /** Argument count helper setter. */
   argcSet: FunctionRef = 0;
-  /** Whether HEAP_BASE is required. */
-  needsHeap: bool = false;
-  /** Indicates whether the __visit_globals function must be generated. */
-  needsVisitGlobals: bool = false;
-  /** Indicated whether the __visit_members function must be generated. */
-  needsVisitMembers: bool = false;
-  /** Whether RTTI is required. */
-  needsRTTI: bool = false;
-  /** Whether the alloc function is required. */
-  needsAlloc: bool = false;
-  /** Whether the retain function is required. */
-  needsRetain: bool = false;
-  /** Whether the retainRelease function is required. */
-  needsRetainRelease: bool = false;
-  /** Whether the release function is required. */
-  needsRelease: bool = false;
+  /** Requires runtime features. */
+  runtimeFeatures: RuntimeFeatures = RuntimeFeatures.NONE;
   /** Expressions known to have skipped an autorelease. Usually function returns. */
   skippedAutoreleases: Set<ExpressionRef> = new Set();
 
@@ -347,7 +362,7 @@ export class Compiler extends DiagnosticEmitter {
     this.currentFlow = startFunctionInstance.flow;
     this.currentBody = startFunctionBody;
 
-    // add a mutable heap base dummy
+    // add a mutable heap and rtti base dummies
     if (options.isWasm64) {
       module.addGlobal(BuiltinSymbols.HEAP_BASE, NativeType.I64, true, module.createI64(0));
       module.addGlobal(BuiltinSymbols.RTTI_BASE, NativeType.I64, true, module.createI64(0));
@@ -383,26 +398,28 @@ export class Compiler extends DiagnosticEmitter {
       if (!explicitStartFunction) module.setStart(funcRef);
     }
 
-    // compile gc features if utilized. has two uses: first, whenever the compiler
-    // uses these, all it has to do is set a flag to true. second, when inspecting
-    // generated WATs, it's quite useful that these functions come last.
-    if (this.needsAlloc) this.compileFunction(program.allocInstance);
-    if (this.needsRetain) this.compileFunction(program.retainInstance);
-    if (this.needsRetainRelease) this.compileFunction(program.retainReleaseInstance);
-    if (this.needsRelease) this.compileFunction(program.releaseInstance);
-    if (this.needsVisitGlobals) compileVisitGlobals(this);
-    if (this.needsVisitMembers) compileVisitMembers(this); // called by release
+    // compile runtime implementation (after actual code). note that these may modify features and order is important.
+    if (this.runtimeFeatures & RuntimeFeatures.visit) this.compileFunction(program.visitInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.retain) this.compileFunction(program.retainInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.retainRelease) this.compileFunction(program.retainReleaseInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.release) this.compileFunction(program.releaseInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.collect) this.compileFunction(program.collectInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.visitGlobals) compileVisitGlobals(this);
+    if (this.runtimeFeatures & RuntimeFeatures.visitMembers) compileVisitMembers(this); // called by release
+    if (this.runtimeFeatures & RuntimeFeatures.realloc) this.compileFunction(program.reallocInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.alloc) this.compileFunction(program.allocInstance);
+    if (this.runtimeFeatures & RuntimeFeatures.free) this.compileFunction(program.freeInstance);
 
     // compile runtime type information
     module.removeGlobal(BuiltinSymbols.RTTI_BASE);
-    if (this.needsRTTI) compileRTTI(this);
+    if (this.runtimeFeatures & RuntimeFeatures.RTTI) compileRTTI(this);
 
     // update the heap base pointer
     var memoryOffset = this.memoryOffset;
     memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);
     this.memoryOffset = memoryOffset;
     module.removeGlobal(BuiltinSymbols.HEAP_BASE);
-    if (this.needsHeap) {
+    if (this.runtimeFeatures & RuntimeFeatures.HEAP) {
       if (options.isWasm64) {
         module.addGlobal(
           BuiltinSymbols.HEAP_BASE,
@@ -833,8 +850,8 @@ export class Compiler extends DiagnosticEmitter {
 
     // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly
     if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) {
-      if (global.internalName == BuiltinSymbols.HEAP_BASE) this.needsHeap = true;
-      else if (global.internalName == BuiltinSymbols.RTTI_BASE) this.needsRTTI = true;
+      if (global.internalName == BuiltinSymbols.HEAP_BASE) this.runtimeFeatures |= RuntimeFeatures.HEAP;
+      else if (global.internalName == BuiltinSymbols.RTTI_BASE) this.runtimeFeatures |= RuntimeFeatures.RTTI;
       return true;
     }
 
@@ -2333,6 +2350,7 @@ export class Compiler extends DiagnosticEmitter {
       }
 
       // Switch back to the parent flow
+      if (!innerFlow.isAny(FlowFlags.ANY_TERMINATING)) this.performAutoreleases(innerFlow, stmts);
       innerFlow.unset(
         FlowFlags.BREAKS |
         FlowFlags.CONDITIONALLY_BREAKS
@@ -6524,19 +6542,19 @@ export class Compiler extends DiagnosticEmitter {
 
   /** Makes retain call, retaining the expression's value. */
   makeRetain(expr: ExpressionRef): ExpressionRef {
-    this.needsRetain = true;
+    this.runtimeFeatures |= RuntimeFeatures.retain;
     return this.module.createCall(this.program.retainInstance.internalName, [ expr ], this.options.nativeSizeType);
   }
 
   /** Makes a retainRelease call, retaining the new expression's value and releasing the old expression's value. */
   makeRetainRelease(exprNew: ExpressionRef, exprOld: ExpressionRef): ExpressionRef {
-    this.needsRetainRelease = true;
+    this.runtimeFeatures |= RuntimeFeatures.retainRelease;
     return this.module.createCall(this.program.retainReleaseInstance.internalName, [ exprNew, exprOld ], this.options.nativeSizeType);
   }
 
   /** Makes a release call, releasing the expression's value. Changes the current type to void.*/
   makeRelease(expr: ExpressionRef): ExpressionRef {
-    this.needsRelease = true;
+    this.runtimeFeatures |= RuntimeFeatures.release;
     return this.module.createCall(this.program.releaseInstance.internalName, [ expr ], NativeType.None);
   }
 
@@ -8846,7 +8864,7 @@ export class Compiler extends DiagnosticEmitter {
     var module = this.module;
     var options = this.options;
     this.currentType = classInstance.type;
-    this.needsAlloc = true;
+    this.runtimeFeatures |= RuntimeFeatures.alloc;
     return module.createCall(program.allocInstance.internalName, [
       options.isWasm64
         ? module.createI64(classInstance.currentMemoryOffset)
diff --git a/src/diagnostics.ts b/src/diagnostics.ts
index 9368bf94..2eff86a3 100644
--- a/src/diagnostics.ts
+++ b/src/diagnostics.ts
@@ -280,8 +280,8 @@ export abstract class DiagnosticEmitter {
     var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);
     if (relatedRange) message.relatedRange = relatedRange;
     this.diagnostics.push(message);
-    // console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary
-    // console.log(<string>new Error("stack").stack);
+    console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary
+    console.log(<string>new Error("stack").stack);
   }
 
   /** Emits an informatory diagnostic message. */
diff --git a/src/program.ts b/src/program.ts
index 6e30e719..e2594355 100644
--- a/src/program.ts
+++ b/src/program.ts
@@ -1042,13 +1042,13 @@ export class Program extends DiagnosticEmitter {
         let flag = decoratorKindToFlag(kind);
         if (flag) {
           if (flag == DecoratorFlags.BUILTIN) {
-            if (decorator.range.source.isLibrary) {
-              flags |= flag;
-            } else {
+            if (!(acceptedFlags & flag) && !decorator.range.source.isLibrary) {
               this.error(
                 DiagnosticCode.Decorator_0_is_not_valid_here,
                 decorator.range, decorator.name.range.toString()
               );
+            } else {
+              flags |= flag;
             }
           } else if (!(acceptedFlags & flag)) {
             this.error(
@@ -1562,7 +1562,7 @@ export class Program extends DiagnosticEmitter {
     parent: Element
   ): void {
     var name = declaration.name.text;
-    var validDecorators = DecoratorFlags.UNSAFE;
+    var validDecorators = DecoratorFlags.UNSAFE | DecoratorFlags.BUILTIN;
     if (declaration.is(CommonFlags.AMBIENT)) {
       validDecorators |= DecoratorFlags.EXTERNAL;
     } else {
diff --git a/std/assembly/builtins.ts b/std/assembly/builtins.ts
index e1fcea82..8cc28782 100644
--- a/std/assembly/builtins.ts
+++ b/std/assembly/builtins.ts
@@ -152,6 +152,10 @@ export declare function alignof<T>(): usize; // | u32 / u64
 @builtin
 export declare function offsetof<T>(fieldName?: string): usize; // | u32 / u64
 
+// @ts-ignore: decorator
+@builtin
+export declare function idof<T>(): u32;
+
 // @ts-ignore: decorator
 @builtin
 export declare function select<T>(ifTrue: T, ifFalse: T, condition: bool): T;
@@ -1708,18 +1712,6 @@ export namespace v8x16 {
   ): v128;
 }
 
-// @ts-ignore: decorator
-@builtin
-export declare function ERROR(message?: string): void;
-
-// @ts-ignore: decorator
-@builtin
-export declare function WARNING(message?: string): void;
-
-// @ts-ignore: decorator
-@builtin
-export declare function INFO(message?: string): void;
-
 // @ts-ignore: decorator
 @external("env", "abort")
 declare function abort(
@@ -1740,23 +1732,3 @@ declare function trace(
   a3?: f64,
   a4?: f64
 ): void;
-
-// @ts-ignore: decorator
-@builtin
-export declare const HEAP_BASE: usize;
-
-// @ts-ignore: decorator
-@builtin
-export declare const RTTI_BASE: usize;
-
-// @ts-ignore: decorator
-@builtin
-export declare function idof<T>(): u32;
-
-// @ts-ignore: decorator
-@builtin @unsafe
-export declare function __visit_globals(cookie: u32): void;
-
-// @ts-ignore: decorator
-@builtin @unsafe
-export declare function __visit_members(ref: usize, cookie: u32): void;
diff --git a/std/assembly/diagnostics.ts b/std/assembly/diagnostics.ts
new file mode 100644
index 00000000..065364db
--- /dev/null
+++ b/std/assembly/diagnostics.ts
@@ -0,0 +1,11 @@
+// @ts-ignore: decorator
+@builtin
+export declare function ERROR(message?: string): void;
+
+// @ts-ignore: decorator
+@builtin
+export declare function WARNING(message?: string): void;
+
+// @ts-ignore: decorator
+@builtin
+export declare function INFO(message?: string): void;
diff --git a/std/assembly/heap.ts b/std/assembly/heap.ts
new file mode 100644
index 00000000..8fc375ce
--- /dev/null
+++ b/std/assembly/heap.ts
@@ -0,0 +1,3 @@
+// @ts-ignore: decorator
+@builtin
+export declare const HEAP_BASE: usize;
diff --git a/std/assembly/rt.ts b/std/assembly/rt.ts
new file mode 100644
index 00000000..533f8ddd
--- /dev/null
+++ b/std/assembly/rt.ts
@@ -0,0 +1,84 @@
+import { idof } from "./builtins";
+import { RTTIData, RTTIFlags } from "./common/rtti";
+import { E_INDEXOUTOFRANGE } from "./util/error";
+import { BLOCK, BLOCK_OVERHEAD } from "./rt/common";
+import { ArrayBufferView } from "./arraybuffer";
+
+// @ts-ignore: decorator
+@builtin
+export declare const RTTI_BASE: usize;
+
+// @ts-ignore: decorator
+@builtin @unsafe
+export declare function __visit_globals(cookie: u32): void;
+
+// @ts-ignore: decorator
+@builtin @unsafe
+export declare function __visit_members(ref: usize, cookie: u32): void;
+
+// @ts-ignore: decorator
+@unsafe
+export function __typeinfo(id: u32): RTTIFlags {
+  var ptr = RTTI_BASE;
+  if (!id || id > load<u32>(ptr)) throw new Error(E_INDEXOUTOFRANGE);
+  return changetype<RTTIData>(ptr + id * offsetof<RTTIData>()).flags;
+}
+
+// @ts-ignore: decorator
+@unsafe
+export function __instanceof(ref: usize, superId: u32): bool { // keyword
+  var id = changetype<BLOCK>(ref - BLOCK_OVERHEAD).rtId;
+  var ptr = RTTI_BASE;
+  if (id && id <= load<u32>(ptr)) {
+    do if (id == superId) return true;
+    while (id = changetype<RTTIData>(ptr + id * offsetof<RTTIData>()).base);
+  }
+  return false;
+}
+
+// @ts-ignore: decorator
+@unsafe
+export function __allocArray(length: i32, alignLog2: usize, id: u32, data: usize = 0): usize {
+  var array = __alloc(offsetof<i32[]>(), id);
+  var bufferSize = <usize>length << alignLog2;
+  var buffer = __alloc(bufferSize, idof<ArrayBuffer>());
+  store<usize>(array, __retain(buffer), offsetof<ArrayBufferView>("data"));
+  changetype<ArrayBufferView>(array).dataStart = buffer;
+  changetype<ArrayBufferView>(array).dataLength = bufferSize;
+  store<i32>(changetype<usize>(array), length, offsetof<i32[]>("length_"));
+  if (data) memory.copy(buffer, data, bufferSize);
+  return array;
+}
+
+// These are provided by the respective implementation, included as another entry file by asc:
+
+// @builtin @unsafe
+// export declare function __alloc(size: usize, id: u32): usize;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __realloc(ref: usize, size: usize): usize;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __free(ref: usize): void;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __retain(ref: usize): usize;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __retainRelease(ref: usize, oldRef: usize): usize;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __release(ref: usize): void;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __collect(): void;
+
+// // @ts-ignore: decorator
+// @builtin @unsafe
+// export declare function __visit(ref: usize, cookie: u32): void;
diff --git a/std/assembly/rt/README.md b/std/assembly/rt/README.md
index c6fa2949..7fa13138 100644
--- a/std/assembly/rt/README.md
+++ b/std/assembly/rt/README.md
@@ -17,10 +17,10 @@ Interface
   Frees a dynamically allocated chunk of memory by its address.
 
 * **__retain**(ref: `usize`): `usize`<br />
-  Retains a reference to an instance of a reference type. The instance doesn't become collected as long as there's at least one retained reference. Returns the retained reference.
+  Retains a reference to an object. The object doesn't become collected as long as there's at least one retained reference. Returns the retained reference.
 
 * **__release**(ref: `usize`): `void`<br />
-  Releases a reference to an instance of a reference type. The instance is considered for collection once all references to it have been released.
+  Releases a reference to an object. The object is considered for collection once all references to it have been released.
 
 * **__collect**(): `void`<br />
   Forces a full garbage collection cycle. By default this means that reference cycles are resolved and possibly collected.
@@ -28,7 +28,7 @@ Interface
 ### Internals
 
 * **__retainRelease**(newRef: `usize`, oldRef: `usize`): `usize`<br />
-  Retains a reference to an instance of a reference type while releasing the reference it replaces. Returns the retained reference.
+  Retains a reference to an object type while releasing the reference it replaces. Returns the retained reference.
 
 * **__visit**(ref: `usize`, cookie: `u32`): `void`<br />
   Concrete visitor implementation called during traversal. Cookie can be used to indicate one of multiple operations.
@@ -36,13 +36,13 @@ Interface
 ### Built-ins
 
 * **__typeinfo**(id: `u32`): `RTTIFlags`<br />
-  Obtains the runtime type information for objects with the specified runtime id. Runtime type information is a set of flags indicating whether a reference type is managed, an array or similar, and what the relevant alignments when creating an instance are etc.
+  Obtains the runtime type information for objects with the specified runtime id. Runtime type information is a set of flags indicating whether a reference type is managed, an array or similar, and what the relevant alignments when creating an instance externally are etc.
 
 * **__visit_globals**(cookie: `u32`): `void`<br />
   Calls `__visit` on each global that is of a reference type. Not used anymore (originally provided to support tracing GCs) but still here for possible future use.
 
 * **__visit_members**(ref: `usize`, cookie: `u32`): `void`<br />
-  Calls `__visit` on each member of the instance pointed to by `ref` that is of a reference type.
+  Calls `__visit` on each member of the object pointed to by `ref`.
 
 Full/half
 ---------
@@ -57,7 +57,7 @@ The [stub](./index-stub.ts) runtime, though fully functional, provides minimal d
 Integration notes
 -----------------
 
-The underlying reference counting implementation works very similar to other implementations. When an object is stored in a local, global or field, its reference becomes retained (reference count is incremented by 1), respectively when it becomes deleted, it is released (reference count is decremented by 1). Once the reference count reaches zero, the object is considered for collection. Now, if an object is inherently acyclic (most objects are), it is free'd right away, while otherwise it is added to a cycle pool and considered for cycle collection on the next `__collect`.
+The underlying reference counting implementation works very similar to other implementations. When an object is stored in a local, global or field, its reference becomes retained (reference count is incremented by 1), respectively when it becomes deleted, it is released (reference count is decremented by 1). Once the reference count reaches zero, the object is considered for collection and the reference count of all contained objects (fields, array elements etc.) is decremented by 1. Now, if an object is inherently acyclic (most objects are), it is free'd right away, while otherwise it is added to a cycle pool and considered for cycle collection on the next `__collect`.
 
 Differences to other implementations include:
 
@@ -68,20 +68,19 @@ Differences to other implementations include:
 
 Even though the rules are simple, working with the runtime internals within standard library code can be tricky and requires knowledge of where the compiler will insert runtime calls automatically. For instance, when `changetype`ing a pointer to a reference type or vice-versa, the typechange is performed with no side effects. Means: No retains or releases are inserted and the user has to take care of the implications.
 
-GOOD: In case of doubt, the following pattern is universal:
+**GOOD:** In case of doubt, the following pattern is universal:
 
 ```ts
 var ref = changetype<Ref>(__alloc(SIZE, idof<Ref>())); // retains the object in `ref`
+// here, the __retain is inserted by the assignment to ref, not by changetype or __alloc
 ...
 return ref; // knows `ref` is already retained and simply returns it
 ```
 
-BAD: One common pattern one shouldn't use is:
+**BAD:** A pattern one shouldn't use is:
 
 ```ts
 someFunc(changetype<Ref>(__alloc(SIZE, idof<Ref>()))); // might free the object before the call returns
 ```
 
-You know the drill.
-
-BONUS: Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states (either in-flight if immediately retained/returned or not if the expression or the target doesn't support it). Don't fight the compiler there.
+**BONUS:** Beware of runtime calls in conditional expressions like a ternary IF, logical AND or OR. Each arm can be in either of two states (either in-flight if immediately retained/returned or not if the expression or the target doesn't support it). Don't fight the compiler there.
diff --git a/std/assembly/rt/common.ts b/std/assembly/rt/common.ts
index 1d1270e0..0c046c77 100644
--- a/std/assembly/rt/common.ts
+++ b/std/assembly/rt/common.ts
@@ -41,48 +41,3 @@
 
 // @ts-ignore: decorator
 @inline export const BLOCK_MAXSIZE: usize = (1 << 30) - BLOCK_OVERHEAD;
-
-/////////////////////////////////// Type information interface ////////////////////////////////////
-
-import { RTTI_BASE } from "builtins";
-import { RTTIData, RTTIFlags } from "common/rtti";
-import { E_INDEXOUTOFRANGE } from "../util/error";
-
-// @ts-ignore: decorator
-@unsafe @global
-export function __typeinfo(id: u32): RTTIFlags {
-  var ptr = RTTI_BASE;
-  if (!id || id > load<u32>(ptr)) throw new Error(E_INDEXOUTOFRANGE);
-  return changetype<RTTIData>(ptr + id * offsetof<RTTIData>()).flags;
-}
-
-// @ts-ignore: decorator
-@unsafe @global
-export function __instanceof(ref: usize, superId: u32): bool { // keyword
-  var id = changetype<BLOCK>(ref - BLOCK_OVERHEAD).rtId;
-  var ptr = RTTI_BASE;
-  if (id && id <= load<u32>(ptr)) {
-    do if (id == superId) return true;
-    while (id = changetype<RTTIData>(ptr + id * offsetof<RTTIData>()).base);
-  }
-  return false;
-}
-
-///////////////////////////////////////////// Helpers /////////////////////////////////////////////
-
-import { idof } from "builtins";
-import { ArrayBufferView } from "arraybuffer";
-
-// @ts-ignore: decorator
-@unsafe @global
-export function __allocArray(length: i32, alignLog2: usize, id: u32, data: usize = 0): usize {
-  var array = __alloc(offsetof<i32[]>(), id);
-  var bufferSize = <usize>length << alignLog2;
-  var buffer = __alloc(bufferSize, idof<ArrayBuffer>());
-  store<usize>(array, __retain(buffer), offsetof<ArrayBufferView>("data"));
-  changetype<ArrayBufferView>(array).dataStart = buffer;
-  changetype<ArrayBufferView>(array).dataLength = bufferSize;
-  store<i32>(changetype<usize>(array), length, offsetof<i32[]>("length_"));
-  if (data) memory.copy(buffer, data, bufferSize);
-  return array;
-}
diff --git a/std/assembly/rt/index-full.ts b/std/assembly/rt/index-full.ts
index f4af0c78..16acb279 100644
--- a/std/assembly/rt/index-full.ts
+++ b/std/assembly/rt/index-full.ts
@@ -1,3 +1,3 @@
 export { __alloc, __realloc, __free } from "rt/tlsf";
-export { __retain, __release, __collect } from "rt/purerc";
-export { __instanceof, __typeinfo } from "rt/common";
+export { __retain, __release, __collect } from "rt/pure";
+export { __instanceof, __typeinfo } from "rt";
diff --git a/std/assembly/rt/index-stub.ts b/std/assembly/rt/index-stub.ts
index 6822a518..01fffcb8 100644
--- a/std/assembly/rt/index-stub.ts
+++ b/std/assembly/rt/index-stub.ts
@@ -1,2 +1,2 @@
 export { __alloc, __realloc, __free, __retain, __release, __collect } from "rt/stub";
-export { __instanceof, __typeinfo } from "rt/common";
+export { __instanceof, __typeinfo } from "rt";
diff --git a/std/assembly/rt/purerc.ts b/std/assembly/rt/pure.ts
similarity index 98%
rename from std/assembly/rt/purerc.ts
rename to std/assembly/rt/pure.ts
index 21767db1..6083ef3d 100644
--- a/std/assembly/rt/purerc.ts
+++ b/std/assembly/rt/pure.ts
@@ -61,7 +61,7 @@ import { RTTIFlags } from "common/rtti";
 @inline const VISIT_COLLECTWHITE = 5;
 
 // @ts-ignore: decorator
-@global
+@global @unsafe @builtin
 function __visit(ref: usize, cookie: i32): void {
   if (ref < HEAP_BASE) return;
   var s = changetype<Block>(ref - BLOCK_OVERHEAD);
@@ -243,20 +243,20 @@ function collectWhite(s: Block): void {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __retain(ref: usize): usize {
   if (ref > HEAP_BASE) increment(changetype<Block>(ref - BLOCK_OVERHEAD));
   return ref;
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __release(ref: usize): void {
   if (ref > HEAP_BASE) decrement(changetype<Block>(ref - BLOCK_OVERHEAD));
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __retainRelease(ref: usize, oldRef: usize): usize {
   if (ref != oldRef) {
     let heapBase = HEAP_BASE;
diff --git a/std/assembly/rt/stub.ts b/std/assembly/rt/stub.ts
index 54d49087..3dfc6023 100644
--- a/std/assembly/rt/stub.ts
+++ b/std/assembly/rt/stub.ts
@@ -9,7 +9,7 @@ var startOffset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK;
 var offset: usize = startOffset;
 
 // @ts-ignore: decorator
-@unsafe @global
+@unsafe @global @builtin
 export function __alloc(size: usize, id: u32): usize {
   if (size > BLOCK_MAXSIZE) unreachable();
   var ptr = offset + BLOCK_OVERHEAD;
@@ -30,7 +30,7 @@ export function __alloc(size: usize, id: u32): usize {
 }
 
 // @ts-ignore: decorator
-@unsafe @global
+@unsafe @global @builtin
 export function __realloc(ref: usize, size: usize): usize {
   var block = changetype<BLOCK>(ref - BLOCK_OVERHEAD);
   var oldSize = <usize>block.rtSize;
@@ -45,7 +45,7 @@ export function __realloc(ref: usize, size: usize): usize {
 }
 
 // @ts-ignore: decorator
-@unsafe @global
+@unsafe @global @builtin
 export function __free(ref: usize): void {
 }
 
@@ -56,28 +56,28 @@ export function __free(ref: usize): void {
 // }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __retain(ref: usize): usize {
   return ref;
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __release(ref: usize): void {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
-function __visit(ref: usize, cookie: u32): void {
+@global @unsafe @builtin
+export function __visit(ref: usize, cookie: u32): void {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
-function __retainRelease(ref: usize, oldRef: usize): usize {
+@global @unsafe @builtin
+export function __retainRelease(ref: usize, oldRef: usize): usize {
   return ref;
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __collect(): void {
 }
diff --git a/std/assembly/rt/tlsf.ts b/std/assembly/rt/tlsf.ts
index 165136f1..faab486b 100644
--- a/std/assembly/rt/tlsf.ts
+++ b/std/assembly/rt/tlsf.ts
@@ -534,7 +534,7 @@ export function freeBlock(root: Root, block: Block): void {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __alloc(size: usize, id: u32): usize {
   var root = ROOT;
   if (!root) {
@@ -547,7 +547,7 @@ export function __alloc(size: usize, id: u32): usize {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __realloc(ref: usize, size: usize): usize {
   if (DEBUG) assert(ROOT); // must be initialized
   assert(ref != 0 && !(ref & AL_MASK)); // must exist and be aligned
@@ -555,7 +555,7 @@ export function __realloc(ref: usize, size: usize): usize {
 }
 
 // @ts-ignore: decorator
-@global @unsafe
+@global @unsafe @builtin
 export function __free(ref: usize): void {
   if (DEBUG) assert(ROOT); // must be initialized
   assert(ref != 0 && !(ref & AL_MASK)); // must exist and be aligned
diff --git a/tests/.gitignore b/tests/.gitignore
index d873de2f..2b6e30ed 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,2 +1,3 @@
 *.wasm
 *.wasm.map
+temp.*
diff --git a/tests/compiler.js b/tests/compiler.js
index 229e524a..b478ac36 100644
--- a/tests/compiler.js
+++ b/tests/compiler.js
@@ -152,6 +152,8 @@ tests.forEach(filename => {
     Array.prototype.push.apply(cmd, asc_flags);
   if (args.createBinary)
     cmd.push("--binaryFile", basename + ".untouched.wasm");
+  else
+    cmd.push("--binaryFile", "temp.wasm");
   asc.main(cmd, {
     stdout: stdout,
     stderr: stderr
@@ -212,7 +214,7 @@ tests.forEach(filename => {
       "--validate",
       "--measure",
       "--binaryFile", // -> stdout
-      // "-O3"
+      "-O3"
     ];
     if (asc_flags)
       Array.prototype.push.apply(cmd, asc_flags);
@@ -229,127 +231,18 @@ tests.forEach(filename => {
         failedTests.push(basename);
         return 1;
       }
-
-      // Instantiate
-      try {
-        let memory = new WebAssembly.Memory({ initial: 10 });
-        let exports = {};
-
-        function getString(ptr) {
-          const RUNTIME_HEADER_SIZE = 16;
-          if (!ptr) return "null";
-          var U32 = new Uint32Array(exports.memory ? exports.memory.buffer : memory.buffer);
-          var U16 = new Uint16Array(exports.memory ? exports.memory.buffer : memory.buffer);
-          var len16 = U32[(ptr - RUNTIME_HEADER_SIZE + 12) >>> 2] >>> 1;
-          var ptr16 = ptr >>> 1;
-          return String.fromCharCode.apply(String, U16.subarray(ptr16, ptr16 + len16));
-        }
-
-        var binaryBuffer = stdout.toBuffer();
-        if (args.createBinary)
-          fs.writeFileSync(path.join(basedir, basename + ".optimized.wasm"), binaryBuffer);
-        let rtrace = new Map();
-        let rtraceEnabled = false;
-        let rtraceRetains = 0;
-        let rtraceReleases = 0;
-        let rtraceFrees = 0;
-        let rtraceUsesAfterFree = 0;
-        let runTime = asc.measure(() => {
-          exports = new WebAssembly.Instance(new WebAssembly.Module(binaryBuffer), {
-            env: {
-              memory,
-              abort: function(msg, file, line, column) {
-                console.log(colorsUtil.red("  abort: " + getString(msg) + " at " + getString(file) + ":" + line + ":" + column));
-              },
-              trace: function(msg, n) {
-                console.log("  trace: " + getString(msg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", "));
-              },
-              externalFunction: function() { },
-              externalConstant: 1
-            },
-            math: {
-              mod: function(a, b) { return a % b; }
-            },
-            Math,
-            Date,
-
-            // tests/declare
-            declare: {
-              externalFunction: function() { },
-              externalConstant: 1,
-              "my.externalFunction": function() { },
-              "my.externalConstant": 2
-            },
-
-            // tests/external
-            external: {
-              foo: function() {},
-              "foo.bar": function() {},
-              bar: function() {}
-            },
-            foo: {
-              baz: function() {},
-              "var": 3
-            },
-
-            // runtime tracing
-            rtrace: {
-              retain: function(s) {
-                ++rtraceRetains;
-                let rc = rtrace.get(s) | 0;
-                rtrace.set(s, ++rc);
-                // console.log("  retain(" + s + ", RC=" + rc + ")");
-                rtraceEnabled = true;
-              },
-              release: function(s) {
-                ++rtraceReleases;
-                let rc = rtrace.get(s) | 0;
-                if (--rc <= 0) {
-                  rtrace.delete(s);
-                  if (rc < 0) {
-                    ++rtraceUsesAfterFree;
-                    console.log("  USEAFTERFREE(" + s + ", RC=" + rc + ")");
-                  }
-                } else rtrace.set(s, rc);
-                // console.log("  release(" + s + ", RC=" + rc + ")");
-                rtraceEnabled = true;
-              },
-              free: function(s) {
-                ++rtraceFrees;
-                let rc = rtrace.get(s) | 0;
-                // if (rc != 0) console.log("  free(" + s + ", RC=" + rc + ")");
-                rtrace.delete(s);
-                rtraceEnabled = true;
-              }
-            }
-          }).exports;
-          if (exports.main) {
-            console.log(colorsUtil.white("  [main]"));
-            var code = exports.main();
-            console.log(colorsUtil.white("  [exit " + code + "]\n"));
-          }
-          if (rtraceEnabled) {
-            console.log("- " + "rtrace: " + rtraceRetains + " retains, " + rtraceReleases + " releases, " + rtraceFrees + " explicit frees");
-            if (rtrace.size || rtraceUsesAfterFree) {
-              let msg = "memory leak detected: " + rtrace.size + " leaking, " + rtraceUsesAfterFree + " uses after free";
-              console.log("  " + colorsUtil.red("ERROR: ") + msg);
-              failed = true;
-              failedMessages.set(basename, msg);
-            }
-            console.log();
-          }
-        });
-        console.log("- " + colorsUtil.green("instantiate OK") + " (" + asc.formatTime(runTime) + ")");
-        console.log("\n  " + Object.keys(exports).map(key => {
-          return "[" + (typeof exports[key]).substring(0, 3) + "] " + key + " = " + exports[key]
-        }).join("\n  "));
-      } catch (e) {
-        console.log("- " + colorsUtil.red("instantiate ERROR: ") + e.stack);
+      let untouchedBuffer = fs.readFileSync(path.join(basedir, "temp.wasm"));
+      let optimizedBuffer = stdout.toBuffer();
+      if (!testInstantiate(basename, untouchedBuffer, "untouched")) {
         failed = true;
-        failedMessages.set(basename, e.message);
+        failedTests.push(basename);
+      } else {
+        console.log();
+        if (!testInstantiate(basename, optimizedBuffer, "optimized")) {
+          failed = true;
+          failedTests.push(basename);
+        }
       }
-
-      if (failed) failedTests.push(basename);
       console.log();
     });
     if (failed) return 1;
@@ -377,3 +270,127 @@ if (failedTests.length) {
 if (!process.exitCode) {
   console.log("[ " + colorsUtil.white("OK") + " ]");
 }
+
+function testInstantiate(basename, binaryBuffer, name) {
+  var failed = false;
+  try {
+    let memory = new WebAssembly.Memory({ initial: 10 });
+    let exports = {};
+
+    function getString(ptr) {
+      const RUNTIME_HEADER_SIZE = 16;
+      if (!ptr) return "null";
+      var U32 = new Uint32Array(exports.memory ? exports.memory.buffer : memory.buffer);
+      var U16 = new Uint16Array(exports.memory ? exports.memory.buffer : memory.buffer);
+      var len16 = U32[(ptr - RUNTIME_HEADER_SIZE + 12) >>> 2] >>> 1;
+      var ptr16 = ptr >>> 1;
+      return String.fromCharCode.apply(String, U16.subarray(ptr16, ptr16 + len16));
+    }
+
+    let rtrace = new Map();
+    let rtraceEnabled = false;
+    let rtraceRetains = 0;
+    let rtraceReleases = 0;
+    let rtraceFrees = 0;
+    let rtraceUsesAfterFree = 0;
+
+    let runTime = asc.measure(() => {
+      exports = new WebAssembly.Instance(new WebAssembly.Module(binaryBuffer), {
+        env: {
+          memory,
+          abort: function(msg, file, line, column) {
+            console.log(colorsUtil.red("  abort: " + getString(msg) + " at " + getString(file) + ":" + line + ":" + column));
+          },
+          trace: function(msg, n) {
+            console.log("  trace: " + getString(msg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", "));
+          },
+          externalFunction: function() { },
+          externalConstant: 1
+        },
+        math: {
+          mod: function(a, b) { return a % b; }
+        },
+        Math,
+        Date,
+
+        // tests/declare
+        declare: {
+          externalFunction: function() { },
+          externalConstant: 1,
+          "my.externalFunction": function() { },
+          "my.externalConstant": 2
+        },
+
+        // tests/external
+        external: {
+          foo: function() {},
+          "foo.bar": function() {},
+          bar: function() {}
+        },
+        foo: {
+          baz: function() {},
+          "var": 3
+        },
+
+        // runtime tracing
+        rtrace: {
+          retain: function(s) {
+            ++rtraceRetains;
+            let rc = rtrace.get(s) | 0;
+            rtrace.set(s, ++rc);
+            // console.log("  retain(" + s + ", RC=" + rc + ")");
+            rtraceEnabled = true;
+          },
+          release: function(s) {
+            ++rtraceReleases;
+            let rc = rtrace.get(s) | 0;
+            if (--rc <= 0) {
+              rtrace.delete(s);
+              if (rc < 0) {
+                ++rtraceUsesAfterFree;
+                console.log("  USEAFTERFREE(" + s + ", RC=" + rc + ")");
+              }
+            } else rtrace.set(s, rc);
+            // console.log("  release(" + s + ", RC=" + rc + ")");
+            rtraceEnabled = true;
+          },
+          free: function(s) {
+            ++rtraceFrees;
+            let rc = rtrace.get(s) | 0;
+            // if (rc != 0) console.log("  free(" + s + ", RC=" + rc + ")");
+            rtrace.delete(s);
+            rtraceEnabled = true;
+          }
+        }
+      }).exports;
+      if (exports.main) {
+        console.log(colorsUtil.white("  [main]"));
+        var code = exports.main();
+        console.log(colorsUtil.white("  [exit " + code + "]\n"));
+      }
+    });
+    if (rtraceEnabled) {
+      if (rtrace.size || rtraceUsesAfterFree) {
+        let msg = "memory leak detected: " + rtrace.size + " leaking, " + rtraceUsesAfterFree + " uses after free";
+        console.log("- " + colorsUtil.red("rtrace " + name + " ERROR: ") + msg);
+        failed = true;
+        failedMessages.set(basename, msg);
+      }
+    }
+    if (!failed) {
+      console.log("- " + colorsUtil.green("instantiate " + name + " OK") + " (" + asc.formatTime(runTime) + ")");
+      if (rtraceEnabled) {
+        console.log("\n  " + rtraceRetains + " retains\n  " + rtraceReleases + " releases\n  " + rtraceFrees + " explicit frees");
+      }
+      console.log("\n  " + Object.keys(exports).map(key => {
+        return "[" + (typeof exports[key]).substring(0, 3) + "] " + key + " = " + exports[key]
+      }).join("\n  "));
+      return true;
+    }
+  } catch (e) {
+    console.log("- " + colorsUtil.red("instantiate " + name + " ERROR: ") + e.stack);
+    failed = true;
+    failedMessages.set(basename, e.message);
+  }
+  return false;
+}
diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat
index 71f240b0..d2cd3a8e 100644
--- a/tests/compiler/do.optimized.wat
+++ b/tests/compiler/do.optimized.wat
@@ -3,9 +3,7 @@
  (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00o\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00o\00.\00t\00s")
  (global $do/n (mut i32) (i32.const 10))
  (global $do/m (mut i32) (i32.const 0))
  (global $do/o (mut i32) (i32.const 0))
@@ -13,26 +11,19 @@
  (start $start)
  (func $start:do (; 1 ;) (type $FUNCSIG$v)
   (local $0 i32)
-  block $break|0
-   loop $continue|0
-    block
-     global.get $do/n
-     i32.const 1
-     i32.sub
-     global.set $do/n
-     global.get $do/m
-     i32.const 1
-     i32.add
-     global.set $do/m
-    end
-    global.get $do/n
-    br_if $continue|0
-   end
+  loop $continue|0
+   global.get $do/n
+   i32.const 1
+   i32.sub
+   global.set $do/n
+   global.get $do/m
+   i32.const 1
+   i32.add
+   global.set $do/m
+   global.get $do/n
+   br_if $continue|0
   end
   global.get $do/n
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -43,8 +34,7 @@
   end
   global.get $do/m
   i32.const 10
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -55,24 +45,18 @@
   end
   i32.const 10
   global.set $do/n
-  block $break|1
-   loop $continue|1
-    nop
-    block (result i32)
-     global.get $do/n
-     local.tee $0
-     i32.const 1
-     i32.sub
-     global.set $do/n
-     local.get $0
-    end
-    br_if $continue|1
-   end
+  loop $continue|1
+   global.get $do/n
+   local.tee $0
+   i32.const 1
+   i32.sub
+   global.set $do/n
+   local.get $0
+   br_if $continue|1
   end
   global.get $do/n
   i32.const -1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -85,66 +69,51 @@
   global.set $do/n
   i32.const 0
   global.set $do/m
-  block $break|2
-   loop $continue|2
-    block
-     global.get $do/n
-     i32.const 1
-     i32.sub
-     global.set $do/n
-     global.get $do/m
-     i32.const 1
-     i32.add
-     global.set $do/m
-     block $break|3
-      loop $continue|3
-       block
-        global.get $do/n
-        i32.const 1
-        i32.sub
-        global.set $do/n
-        global.get $do/o
-        i32.const 1
-        i32.add
-        global.set $do/o
-       end
-       global.get $do/n
-       br_if $continue|3
-      end
-     end
-     global.get $do/n
-     i32.const 0
-     i32.eq
-     i32.eqz
-     if
-      i32.const 0
-      i32.const 24
-      i32.const 24
-      i32.const 2
-      call $~lib/builtins/abort
-      unreachable
-     end
-     global.get $do/o
-     i32.const 9
-     i32.eq
-     i32.eqz
-     if
-      i32.const 0
-      i32.const 24
-      i32.const 25
-      i32.const 2
-      call $~lib/builtins/abort
-      unreachable
-     end
-    end
+  loop $continue|2
+   global.get $do/n
+   i32.const 1
+   i32.sub
+   global.set $do/n
+   global.get $do/m
+   i32.const 1
+   i32.add
+   global.set $do/m
+   loop $continue|3
     global.get $do/n
-    br_if $continue|2
+    i32.const 1
+    i32.sub
+    global.set $do/n
+    global.get $do/o
+    i32.const 1
+    i32.add
+    global.set $do/o
+    global.get $do/n
+    br_if $continue|3
    end
+   global.get $do/n
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 24
+    i32.const 2
+    call $~lib/builtins/abort
+    unreachable
+   end
+   global.get $do/o
+   i32.const 9
+   i32.ne
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 25
+    i32.const 2
+    call $~lib/builtins/abort
+    unreachable
+   end
+   global.get $do/n
+   br_if $continue|2
   end
   global.get $do/n
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -155,8 +124,7 @@
   end
   global.get $do/m
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -167,8 +135,7 @@
   end
   global.get $do/o
   i32.const 9
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -182,5 +149,6 @@
   call $start:do
  )
  (func $null (; 3 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/empty.optimized.wat b/tests/compiler/empty.optimized.wat
index 29ee81b8..bb456a11 100644
--- a/tests/compiler/empty.optimized.wat
+++ b/tests/compiler/empty.optimized.wat
@@ -1,9 +1,8 @@
 (module
  (type $FUNCSIG$v (func))
  (memory $0 0)
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
  (export "memory" (memory $0))
  (func $null (; 0 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/global-init.optimized.wat b/tests/compiler/rc/global-init.optimized.wat
index b6d82717..022f6a92 100644
--- a/tests/compiler/rc/global-init.optimized.wat
+++ b/tests/compiler/rc/global-init.optimized.wat
@@ -1,156 +1,69 @@
 (module
- (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$v (func))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
- (data (i32.const 24) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 80) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 128) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 184) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 240) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 296) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 12) "\01\00\00\00\10")
+ (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 120) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 272) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (global $rc/global-init/a (mut i32) (i32.const 0))
  (global $rc/global-init/b (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 296))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 432))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $start)
- (func $rc/global-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32)
+ (func $start (; 3 ;) (type $FUNCSIG$v)
   i32.const 24
-  call $~lib/rt/purerc/__retain
- )
- (func $start:rc/global-init (; 5 ;) (type $FUNCSIG$v)
-  call $rc/global-init/getRef
   global.set $rc/global-init/a
-  call $rc/global-init/getRef
+  i32.const 24
   global.set $rc/global-init/b
-  i32.const 0
   global.get $rc/global-init/a
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $rc/global-init/a
-  i32.const 0
   global.get $rc/global-init/b
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $rc/global-init/b
  )
- (func $start (; 6 ;) (type $FUNCSIG$v)
-  call $start:rc/global-init
- )
- (func $~lib/rt/purerc/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
   local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $3
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -159,50 +72,43 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $5
+   local.set $2
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $3
+   local.get $2
    i32.clz
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
+   local.set $2
+   local.get $3
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $4
   end
-  local.get $4
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $5
+   local.get $2
    i32.const 16
    i32.lt_u
   else   
@@ -211,118 +117,83 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
   i32.load offset=20
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
   if
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $4
    i32.store offset=20
   end
-  local.get $7
+  local.get $4
   if
-   local.get $7
-   local.get $6
+   local.get $4
+   local.get $5
    i32.store offset=16
   end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
   local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
+  i32.eq
+  if
+   local.get $3
    i32.const 4
    i32.shl
-   local.get $8
+   local.get $2
    i32.add
    i32.const 2
    i32.shl
+   local.get $0
    i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.0
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
+   local.get $4
+   i32.store offset=96
+   local.get $4
    i32.eqz
    if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
     i32.eqz
     if
      local.get $0
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -332,24 +203,18 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -357,56 +222,42 @@
   end
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
   i32.load
-  local.set $5
-  local.get $5
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
   i32.const 1
   i32.and
   if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
    local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.tee $2
    i32.const 1073741808
    i32.lt_u
    if
@@ -414,110 +265,91 @@
     local.get $4
     call $~lib/rt/tlsf/removeBlock
     local.get $1
-    local.get $2
+    local.get $3
     i32.const 3
     i32.and
-    local.get $3
+    local.get $2
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
     i32.load
     local.set $5
    end
   end
-  local.get $2
+  local.get $3
   i32.const 2
   i32.and
   if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
+   local.get $1
+   i32.const 4
+   i32.sub
    i32.load
-   local.set $6
-   local.get $6
+   local.tee $2
+   i32.load
+   local.tee $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
-    i32.const 96
+    i32.const 88
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
     unreachable
    end
    local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.add
-   local.set $7
-   local.get $7
+   local.tee $7
    i32.const 1073741808
    i32.lt_u
-   if
+   if (result i32)
     local.get $0
-    local.get $3
+    local.get $2
     call $~lib/rt/tlsf/removeBlock
-    local.get $3
+    local.get $2
     local.get $6
     i32.const 3
     i32.and
     local.get $7
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    local.get $3
-    local.set $1
+    local.get $2
+   else    
+    local.get $1
    end
+   local.set $1
   end
   local.get $4
   local.get $5
   i32.const 2
   i32.or
   i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
+  local.get $3
+  i32.const -4
   i32.and
-  local.set $8
-  local.get $8
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $8
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -526,23 +358,22 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $4
   local.get $1
   i32.const 16
   i32.add
-  local.get $8
+  local.get $2
   i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -553,44 +384,37 @@
   i32.sub
   local.get $1
   i32.store
-  local.get $8
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $10
+   local.set $4
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $8
+   local.get $2
    i32.clz
    i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
+   local.tee $2
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
+   local.set $4
+   local.get $2
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $9
   end
-  local.get $9
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $10
+   local.get $4
    i32.const 16
    i32.lt_u
   else   
@@ -599,116 +423,81 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
   local.get $1
   i32.const 0
   i32.store offset=16
   local.get $1
-  local.get $11
+  local.get $2
   i32.store offset=20
-  local.get $11
+  local.get $2
   if
-   local.get $11
+   local.get $2
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.1
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $9
+  local.get $3
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.1
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
  )
- (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -725,1057 +514,248 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 272
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
-   i32.const 144
-   i32.const 200
-   i32.const 55
+   i32.const 136
+   i32.const 192
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/tlsf/addMemory (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 14 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 256
-   i32.const 96
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 96
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
   i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
+  i32.shl
+  i32.const 272
   i32.add
+  i32.load
  )
- (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
    local.get $2
    local.set $3
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $1
    i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
    i32.lt_u
    if
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
       if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
        local.get $3
        i32.const 1
        i32.sub
        local.set $3
-       br $continue|2
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
       end
      end
     end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
    else    
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
+     loop $continue|3
+      local.get $0
       local.get $3
+      i32.add
+      i32.const 7
+      i32.and
       if
-       local.get $5
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
        local.get $3
        i32.const 1
        i32.sub
        local.tee $3
        i32.add
-       local.get $4
+       local.get $1
        local.get $3
        i32.add
        i32.load8_u
        i32.store8
-       br $continue|5
+       br $continue|3
       end
      end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
     end
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 22 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 9 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
-  i32.const 64
-  i32.const 2
+  i32.sub
+  local.tee $1
+  i32.const 1
   i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
   i32.gt_u
   select
-  local.set $4
-  local.get $4
-  i32.const 0
+  local.tee $3
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
+  local.tee $0
+  local.get $2
   local.get $1
   call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1784,26 +764,23 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 11 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $2
   i32.const 268435455
   i32.and
-  local.set $2
+  local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 40
@@ -1812,7 +789,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $1
   i32.const 1
   i32.eq
   if
@@ -1820,29 +797,23 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
+   call $~lib/rt/__visit_members
+   local.get $2
    i32.const -2147483648
    i32.and
-   i32.eqz
    if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
     global.get $~lib/rt/tlsf/ROOT
     local.get $0
     call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
    end
   else   
-   local.get $2
+   local.get $1
    i32.const 0
-   i32.gt_u
-   i32.eqz
+   i32.le_u
    if
     i32.const 0
     i32.const 40
@@ -1853,78 +824,58 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
-   i32.eqz
    if
     local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
+    local.get $1
     i32.const 1
     i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
     i32.or
     i32.store offset=4
+   else    
+    local.get $0
     local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
     i32.const -2147483648
     i32.and
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
    end
   end
  )
- (func $~lib/rt/purerc/__retainRelease (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/rt/pure/__retainRelease (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  local.get $1
-  i32.ne
   if
-   global.get $~lib/builtins/HEAP_BASE
-   local.set $2
    local.get $0
-   local.get $2
+   i32.const 408
    i32.gt_u
    if
     local.get $0
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/increment
-   end
-   local.get $1
-   local.get $2
-   i32.gt_u
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/decrement
+    call $~lib/rt/pure/decrement
    end
   end
-  local.get $0
+  i32.const 0
  )
- (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1932,9 +883,7 @@
   if
    local.get $0
    local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
+   i32.const -1879048193
    i32.and
    i32.const 268435456
    i32.or
@@ -1943,32 +892,27 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1981,13 +925,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -1996,16 +938,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2023,17 +964,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/pure/__visit (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 408
   i32.lt_u
   if
    return
@@ -2041,205 +980,674 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 40
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 40
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 40
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 40
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 40
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 88
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 40
-    i32.const 96
-    i32.const 24
+    i32.const 88
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 20 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 416
+  i32.const 0
+  i32.store
+  i32.const 1984
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 416
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 416
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 416
+  i32.const 2000
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 416
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 32 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 232
+   i32.const 88
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 88
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $1
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 27 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat
index b6d82717..67b31436 100644
--- a/tests/compiler/rc/global-init.untouched.wat
+++ b/tests/compiler/rc/global-init.untouched.wat
@@ -6,35 +6,35 @@
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
+ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
  (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
- (data (i32.const 24) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 80) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 128) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 184) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 240) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 296) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 120) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 272) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $rc/global-init/a (mut i32) (i32.const 0))
  (global $rc/global-init/b (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 296))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 432))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 272))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 408))
  (export "memory" (memory $0))
  (start $start)
  (func $rc/global-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32)
   i32.const 24
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
  (func $start:rc/global-init (; 5 ;) (type $FUNCSIG$v)
   call $rc/global-init/getRef
@@ -43,17 +43,17 @@
   global.set $rc/global-init/b
   i32.const 0
   global.get $rc/global-init/a
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $rc/global-init/a
   i32.const 0
   global.get $rc/global-init/b
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $rc/global-init/b
  )
  (func $start (; 6 ;) (type $FUNCSIG$v)
   call $start:rc/global-init
  )
- (func $~lib/rt/purerc/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -86,7 +86,7 @@
   i32.add
   i32.store offset=4
   local.get $0
-  call $~lib/rt/purerc/onIncrement
+  call $~lib/rt/pure/onIncrement
   local.get $0
   i32.load
   i32.const 1
@@ -102,15 +102,15 @@
    unreachable
   end
  )
- (func $~lib/rt/purerc/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/increment
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
@@ -134,7 +134,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -159,7 +159,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -211,7 +211,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -349,7 +349,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -364,7 +364,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -463,7 +463,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 96
+    i32.const 88
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -526,7 +526,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -542,7 +542,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -599,7 +599,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -708,7 +708,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 96
+   i32.const 88
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -725,9 +725,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -740,9 +740,9 @@
    i32.gt_u
   end
   if
-   i32.const 144
-   i32.const 200
-   i32.const 55
+   i32.const 136
+   i32.const 192
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -754,768 +754,7 @@
   i32.add
   i32.load
  )
- (func $~lib/rt/tlsf/addMemory (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 14 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 256
-   i32.const 96
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 96
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 96
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 96
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1721,16 +960,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 22 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1756,26 +995,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1784,9 +1023,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1797,7 +1036,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1820,7 +1059,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -1853,7 +1092,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -1873,7 +1112,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -1890,13 +1129,13 @@
    end
   end
  )
- (func $~lib/rt/purerc/__retainRelease (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/pure/__retainRelease (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
   i32.ne
   if
-   global.get $~lib/builtins/HEAP_BASE
+   global.get $~lib/heap/HEAP_BASE
    local.set $2
    local.get $0
    local.get $2
@@ -1905,7 +1144,7 @@
     local.get $0
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/increment
+    call $~lib/rt/pure/increment
    end
    local.get $1
    local.get $2
@@ -1914,12 +1153,12 @@
     local.get $1
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/decrement
+    call $~lib/rt/pure/decrement
    end
   end
   local.get $0
  )
- (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1943,10 +1182,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -1961,9 +1200,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1981,7 +1220,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -1996,11 +1235,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2023,17 +1262,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2075,7 +1314,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2104,7 +1343,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2112,7 +1351,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2156,7 +1395,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2165,7 +1404,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2183,7 +1422,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2226,7 +1465,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2240,6 +1479,767 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 25 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 232
+   i32.const 88
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 88
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
  (func $null (; 32 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat
index 14fe8e42..9f86cf3f 100644
--- a/tests/compiler/rc/local-init.optimized.wat
+++ b/tests/compiler/rc/local-init.optimized.wat
@@ -1,1442 +1,58 @@
 (module
- (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
- (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 72) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 128) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 184) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 296) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 12) "\01\00\00\00\10")
+ (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 120) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 272) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 296))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 440))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $start)
- (func $rc/local-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32)
+ (func $start (; 4 ;) (type $FUNCSIG$v)
   i32.const 24
-  call $~lib/rt/purerc/__retain
- )
- (func $rc/local-init/Ref#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 17
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
-   local.set $0
-  end
-  local.get $0
- )
- (func $start:rc/local-init (; 6 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  block
-   i32.const 24
-   call $~lib/rt/purerc/__retain
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   call $rc/local-init/getRef
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   i32.const 0
-   call $rc/local-init/Ref#constructor
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
- )
- (func $start (; 7 ;) (type $FUNCSIG$v)
-  call $start:rc/local-init
- )
- (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
-  local.get $3
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.const 4
-   i32.shr_u
-   local.set $5
-  else   
-   i32.const 31
-   local.get $3
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $4
-  end
-  local.get $4
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $5
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
-  i32.load offset=20
-  local.set $7
-  local.get $6
-  if
-   local.get $6
-   local.get $7
-   i32.store offset=20
-  end
-  local.get $7
-  if
-   local.get $7
-   local.get $6
-   i32.store offset=16
-  end
-  local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
-   i32.const 4
-   i32.shl
-   local.get $8
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
-   i32.eqz
-   if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $4
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
-  i32.load
-  local.set $5
-  local.get $5
-  i32.const 1
-  i32.and
-  if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $3
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $2
-    i32.const 3
-    i32.and
-    local.get $3
-    i32.or
-    local.tee $2
-    i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $2
-  i32.const 2
-  i32.and
-  if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
-   i32.load
-   local.set $6
-   local.get $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $7
-   local.get $7
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $3
-    call $~lib/rt/tlsf/removeBlock
-    local.get $3
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $2
-    i32.store
-    local.get $3
-    local.set $1
-   end
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $8
-  local.get $8
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $8
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $8
-  i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $8
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
-   i32.const 4
-   i32.shr_u
-   local.set $10
-  else   
-   i32.const 31
-   local.get $8
-   i32.clz
-   i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $9
-  end
-  local.get $9
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $10
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
-  local.get $1
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
+  i32.const 24
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
   i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $11
-  i32.store offset=20
-  local.get $11
-  if
-   local.get $11
-   local.get $1
-   i32.store offset=16
-  end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
-  i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
+  i32.const 17
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
  )
- (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 88
-   i32.const 40
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 40
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/purerc/increment (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/increment (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
+  local.tee $1
+  i32.const -268435456
   i32.and
   local.get $1
   i32.const 1
   i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
+  i32.const -268435456
   i32.and
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 144
+   i32.const 40
    i32.const 103
    i32.const 2
    call $~lib/builtins/abort
@@ -1448,47 +64,493 @@
   i32.add
   i32.store offset=4
   local.get $0
-  call $~lib/rt/purerc/onIncrement
+  call $~lib/rt/pure/onIncrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 144
+   i32.const 40
    i32.const 106
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
  )
- (func $~lib/rt/purerc/__retain (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/pure/__retain (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 416
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/increment
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
- (func $~lib/rt/tlsf/freeBlock (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $2
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $3
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $2
+   local.get $3
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=20
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  if
+   local.get $5
+   local.get $4
+   i32.store offset=20
+  end
+  local.get $4
+  if
+   local.get $4
+   local.get $5
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.get $1
+  i32.eq
+  if
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   local.get $4
+   i32.store offset=96
+   local.get $4
+   i32.eqz
+   if
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $3
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $2
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $3
+    i32.const 3
+    i32.and
+    local.get $2
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $3
+  i32.const 2
+  i32.and
+  if
+   local.get $1
+   i32.const 4
+   i32.sub
+   i32.load
+   local.tee $2
+   i32.load
+   local.tee $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $7
+   i32.const 1073741808
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    local.get $2
+    call $~lib/rt/tlsf/removeBlock
+    local.get $2
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $2
+   else    
+    local.get $1
+   end
+   local.set $1
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  i32.add
+  i32.ne
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $4
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $4
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $4
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $2
+  i32.store offset=20
+  local.get $2
+  if
+   local.get $2
+   local.get $1
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $3
+  i32.shl
+  i32.or
+  i32.store
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/freeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.tee $2
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 88
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -1505,296 +567,249 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 272
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
-   i32.const 200
-   i32.const 256
-   i32.const 55
+   i32.const 136
+   i32.const 192
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
+  i32.const 3
+  i32.shl
+  i32.const 272
   i32.add
   i32.load
  )
- (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
    local.get $2
    local.set $3
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $1
    i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
    i32.lt_u
    if
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
       if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
        local.get $3
        i32.const 1
        i32.sub
        local.set $3
-       br $continue|2
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
       end
      end
     end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
    else    
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
+     loop $continue|3
+      local.get $0
       local.get $3
+      i32.add
+      i32.const 7
+      i32.and
       if
-       local.get $5
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
        local.get $3
        i32.const 1
        i32.sub
        local.tee $3
        i32.add
-       local.get $4
+       local.get $1
        local.get $3
        i32.add
        i32.load8_u
        i32.store8
-       br $continue|5
+       br $continue|3
       end
      end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
     end
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
-  i32.const 64
-  i32.const 2
+  i32.sub
+  local.tee $1
+  i32.const 1
   i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
   i32.gt_u
   select
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
+  local.tee $0
+  local.get $2
   local.get $1
   call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1803,35 +818,32 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $2
   i32.const 268435455
   i32.and
-  local.set $2
+  local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 144
+   i32.const 40
    i32.const 114
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $1
   i32.const 1
   i32.eq
   if
@@ -1839,32 +851,26 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
+   call $~lib/rt/__visit_members
+   local.get $2
    i32.const -2147483648
    i32.and
-   i32.eqz
    if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
     global.get $~lib/rt/tlsf/ROOT
     local.get $0
     call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
    end
   else   
-   local.get $2
+   local.get $1
    i32.const 0
-   i32.gt_u
-   i32.eqz
+   i32.le_u
    if
     i32.const 0
-    i32.const 144
+    i32.const 40
     i32.const 123
     i32.const 15
     call $~lib/builtins/abort
@@ -1872,60 +878,54 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
-   i32.eqz
    if
     local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
+    local.get $1
     i32.const 1
     i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
     i32.or
     i32.store offset=4
+   else    
+    local.get $0
     local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
     i32.const -2147483648
     i32.and
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 416
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1933,9 +933,7 @@
   if
    local.get $0
    local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
+   i32.const -1879048193
    i32.and
    i32.const 268435456
    i32.or
@@ -1944,32 +942,27 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1982,13 +975,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -1997,16 +988,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2024,17 +1014,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/pure/__visit (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 416
   i32.lt_u
   if
    return
@@ -2042,205 +1030,673 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 144
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 40
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 144
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 40
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 40
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 88
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 144
-    i32.const 96
-    i32.const 24
+    i32.const 88
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 23 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 416
+  i32.const 0
+  i32.store
+  i32.const 1984
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 416
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 416
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 416
+  i32.const 2000
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 416
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 33 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 232
+   i32.const 88
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 88
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 26 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 27 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 30 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat
index 14fe8e42..770a8cb1 100644
--- a/tests/compiler/rc/local-init.untouched.wat
+++ b/tests/compiler/rc/local-init.untouched.wat
@@ -2,37 +2,37 @@
  (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
+ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
  (data (i32.const 8) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
- (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 72) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 128) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 184) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 296) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 24) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 72) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 120) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 176) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 272) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 296))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 440))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 272))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 416))
  (export "memory" (memory $0))
  (start $start)
  (func $rc/local-init/getRef (; 4 ;) (type $FUNCSIG$i) (result i32)
   i32.const 24
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
  (func $rc/local-init/Ref#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
@@ -41,7 +41,7 @@
    i32.const 0
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -50,29 +50,90 @@
   (local $0 i32)
   block
    i32.const 24
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    call $rc/local-init/getRef
    local.set $0
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 0
    call $rc/local-init/Ref#constructor
    local.set $0
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
  )
  (func $start (; 7 ;) (type $FUNCSIG$v)
   call $start:rc/local-init
  )
- (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 40
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 40
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -92,7 +153,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -117,7 +178,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -169,7 +230,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -214,7 +275,7 @@
   end
   i32.eq
   if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
+   block $~lib/rt/tlsf/SETHEAD|inlined.0
     local.get $0
     local.set $11
     local.get $4
@@ -251,7 +312,7 @@
      i32.load offset=4
     end
     local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
+    block $~lib/rt/tlsf/SETSL|inlined.0
      local.get $0
      local.set $11
      local.get $4
@@ -290,7 +351,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -307,7 +368,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -322,7 +383,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -421,7 +482,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 40
+    i32.const 88
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -484,7 +545,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -500,7 +561,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -557,7 +618,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 40
+   i32.const 88
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -594,7 +655,7 @@
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
+  block $~lib/rt/tlsf/SETHEAD|inlined.1
    local.get $0
    local.set $12
    local.get $9
@@ -623,7 +684,7 @@
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
+  block $~lib/rt/tlsf/SETSL|inlined.1
    local.get $0
    local.set $3
    local.get $9
@@ -654,841 +715,19 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
   local.get $1
+  i32.load
+  local.set $2
   local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
+  i32.const 1
+  i32.and
+  i32.eqz
   i32.eqz
   if
    i32.const 0
-   i32.const 40
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
    i32.const 88
-   i32.const 40
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 40
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 40
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/purerc/increment (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 144
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 144
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/tlsf/freeBlock (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 40
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -1505,9 +744,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -1520,9 +759,9 @@
    i32.gt_u
   end
   if
-   i32.const 200
-   i32.const 256
-   i32.const 55
+   i32.const 136
+   i32.const 192
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -1534,7 +773,7 @@
   i32.add
   i32.load
  )
- (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1740,16 +979,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1775,26 +1014,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1803,9 +1042,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1816,7 +1055,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1825,7 +1064,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 144
+   i32.const 40
    i32.const 114
    i32.const 13
    call $~lib/builtins/abort
@@ -1839,7 +1078,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -1864,7 +1103,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 144
+    i32.const 40
     i32.const 123
     i32.const 15
     call $~lib/builtins/abort
@@ -1872,7 +1111,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -1892,7 +1131,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -1909,18 +1148,18 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1944,10 +1183,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -1962,9 +1201,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1982,7 +1221,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -1997,11 +1236,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2024,17 +1263,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2076,7 +1315,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2092,7 +1331,7 @@
         i32.eqz
         if
          i32.const 0
-         i32.const 144
+         i32.const 40
          i32.const 74
          i32.const 17
          call $~lib/builtins/abort
@@ -2105,7 +1344,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2113,7 +1352,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2139,7 +1378,7 @@
       i32.eqz
       if
        i32.const 0
-       i32.const 144
+       i32.const 40
        i32.const 85
        i32.const 6
        call $~lib/builtins/abort
@@ -2157,7 +1396,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2166,7 +1405,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2176,7 +1415,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 144
+    i32.const 40
     i32.const 96
     i32.const 24
     call $~lib/builtins/abort
@@ -2184,7 +1423,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2227,7 +1466,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2241,6 +1480,767 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 232
+   i32.const 88
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 88
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 88
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 88
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
  (func $null (; 33 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat
index 233e54d6..1219008f 100644
--- a/tests/compiler/rc/logical-and-mismatch.optimized.wat
+++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat
@@ -1,37 +1,139 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$i (func (result i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $start)
  (func $rc/logical-and-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32)
   i32.const 0
   i32.const 17
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $start:rc/logical-and-mismatch (; 5 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  call $rc/logical-and-mismatch/Ref#constructor
+  global.set $rc/logical-and-mismatch/gloRef
+  call $rc/logical-and-mismatch/Ref#constructor
+  local.tee $0
+  if (result i32)
+   local.get $0
+   call $~lib/rt/pure/__release
+   global.get $rc/logical-and-mismatch/gloRef
+   call $~lib/rt/pure/__retain
+  else   
+   local.get $0
+  end
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-and-mismatch/gloRef
+  local.tee $0
+  if (result i32)
+   call $rc/logical-and-mismatch/Ref#constructor
+  else   
+   local.get $0
+   call $~lib/rt/pure/__retain
+  end
+  call $~lib/rt/pure/__release
+  call $rc/logical-and-mismatch/Ref#constructor
+  local.tee $0
+  if (result i32)
+   local.get $0
+   call $~lib/rt/pure/__release
+   call $rc/logical-and-mismatch/Ref#constructor
+  else   
+   local.get $0
+  end
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-and-mismatch/gloRef
+  local.tee $0
+  if (result i32)
+   global.get $rc/logical-and-mismatch/gloRef
+  else   
+   local.get $0
+  end
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-and-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 6 ;) (type $FUNCSIG$v)
+  call $start:rc/logical-and-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 400
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -44,7 +146,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -66,7 +168,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -111,7 +213,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -197,7 +299,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -208,7 +310,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -222,7 +324,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -295,7 +397,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -352,7 +454,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -367,7 +469,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -417,7 +519,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -482,7 +584,7 @@
   i32.or
   i32.store offset=4
  )
- (func $~lib/rt/tlsf/freeBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
@@ -491,7 +593,7 @@
   i32.and
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -508,20 +610,20 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   if (result i32)
    local.get $0
-   i32.const 280
+   i32.const 256
    i32.load
    i32.gt_u
   else   
    i32.const 1
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -529,552 +631,11 @@
   local.get $0
   i32.const 3
   i32.shl
-  i32.const 280
-  i32.add
-  i32.load
- )
- (func $~lib/rt/tlsf/addMemory (; 9 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  local.get $2
-  i32.le_u
-  select
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=1568
-  local.tee $3
-  if
-   local.get $1
-   local.get $3
-   i32.const 16
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $3
-   i32.eq
-   if
-    local.get $3
-    i32.load
-    local.set $4
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.tee $2
-  i32.const 48
-  i32.lt_u
-  if
-   return
-  end
-  local.get $1
-  local.get $4
-  i32.const 2
-  i32.and
-  local.get $2
-  i32.const 32
-  i32.sub
-  i32.const 1
-  i32.or
-  i32.or
-  i32.store
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $2
-  i32.add
-  i32.const 16
-  i32.sub
-  local.tee $2
-  i32.const 2
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=1568
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
- )
- (func $~lib/rt/tlsf/initializeRoot (; 10 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  i32.const 1
-  current_memory
-  local.tee $0
-  i32.gt_s
-  if (result i32)
-   i32.const 1
-   local.get $0
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  i32.const 432
-  i32.const 0
-  i32.store
-  i32.const 2000
-  i32.const 0
-  i32.store
-  i32.const 0
-  local.set $0
-  loop $repeat|0
-   block $break|0
-    local.get $0
-    i32.const 23
-    i32.ge_u
-    br_if $break|0
-    local.get $0
-    i32.const 2
-    i32.shl
-    i32.const 432
-    i32.add
-    i32.const 0
-    i32.store offset=4
-    i32.const 0
-    local.set $1
-    loop $repeat|1
-     block $break|1
-      local.get $1
-      i32.const 16
-      i32.ge_u
-      br_if $break|1
-      local.get $0
-      i32.const 4
-      i32.shl
-      local.get $1
-      i32.add
-      i32.const 2
-      i32.shl
-      i32.const 432
-      i32.add
-      i32.const 0
-      i32.store offset=96
-      local.get $1
-      i32.const 1
-      i32.add
-      local.set $1
-      br $repeat|1
-     end
-    end
-    local.get $0
-    i32.const 1
-    i32.add
-    local.set $0
-    br $repeat|0
-   end
-  end
-  i32.const 432
-  i32.const 2016
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  i32.const 432
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const -16
-  i32.and
-  local.tee $0
-  i32.const 16
-  local.get $0
-  i32.const 16
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $1
   i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $1
-   i32.const 0
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    local.get $1
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
-   i32.const 31
-   local.get $1
-   i32.clz
-   i32.sub
-   local.tee $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $1
-   local.get $2
-   i32.const 7
-   i32.sub
-  end
-  local.tee $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 2
-  i32.shl
-  local.get $0
   i32.add
-  i32.load offset=4
-  i32.const -1
-  local.get $1
-  i32.shl
-  i32.and
-  local.tee $1
-  if (result i32)
-   local.get $1
-   i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   local.get $0
-   i32.add
-   i32.load offset=96
-  else   
-   local.get $0
-   i32.load
-   i32.const -1
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.tee $1
-   if (result i32)
-    local.get $1
-    i32.ctz
-    local.tee $1
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=4
-    local.tee $2
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $2
-    i32.ctz
-    local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=96
-   else    
-    i32.const 0
-   end
-  end
- )
- (func $~lib/rt/tlsf/growMemory (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  current_memory
-  local.tee $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const -65536
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.tee $1
-  local.get $2
-  local.get $1
-  i32.gt_s
-  select
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $1
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
- )
- (func $~lib/rt/tlsf/prepareBlock (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $1
   i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const -4
-  i32.and
-  local.get $2
-  i32.sub
-  local.tee $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $3
-   i32.const 2
-   i32.and
-   local.get $2
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.tee $1
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $1
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const -2
-   i32.and
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   i32.load
-   i32.const -3
-   i32.and
-   i32.store
-  end
  )
- (func $~lib/rt/tlsf/allocateBlock (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.tee $3
-  call $~lib/rt/tlsf/searchBlock
-  local.tee $2
-  i32.eqz
-  if
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/searchBlock
-   local.tee $2
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  i32.load
-  i32.const -4
-  i32.and
-  local.get $3
-  i32.lt_u
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 0
-  i32.store offset=4
-  local.get $2
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $2
-  local.get $3
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $2
- )
- (func $~lib/rt/tlsf/__alloc (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.tee $2
-  if (result i32)
-   local.get $2
-  else   
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-  end
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $0
-  local.get $1
-  i32.store offset=8
-  local.get $0
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   block $~lib/util/memory/memmove|inlined.0
@@ -1247,13 +808,13 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 18 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  global.get $~lib/rt/purerc/CUR
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
   i32.sub
   local.tee $1
@@ -1273,25 +834,25 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $0
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $0
   local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.tee $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1300,9 +861,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1312,7 +873,7 @@
   i32.and
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1333,7 +894,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $2
    i32.const -2147483648
    i32.and
@@ -1360,7 +921,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    if
@@ -1387,125 +948,23 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  i32.const 424
+  i32.const 400
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/logical-and-mismatch (; 22 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  call $rc/logical-and-mismatch/Ref#constructor
-  global.set $rc/logical-and-mismatch/gloRef
-  call $rc/logical-and-mismatch/Ref#constructor
-  local.tee $0
-  if (result i32)
-   local.get $0
-   call $~lib/rt/purerc/__release
-   global.get $rc/logical-and-mismatch/gloRef
-   call $~lib/rt/purerc/__retain
-  else   
-   local.get $0
-  end
-  call $~lib/rt/purerc/__release
-  global.get $rc/logical-and-mismatch/gloRef
-  local.tee $0
-  if (result i32)
-   call $rc/logical-and-mismatch/Ref#constructor
-  else   
-   local.get $0
-   call $~lib/rt/purerc/__retain
-  end
-  call $~lib/rt/purerc/__release
-  call $rc/logical-and-mismatch/Ref#constructor
-  local.tee $0
-  if (result i32)
-   local.get $0
-   call $~lib/rt/purerc/__release
-   call $rc/logical-and-mismatch/Ref#constructor
-  else   
-   local.get $0
-  end
-  call $~lib/rt/purerc/__release
-  global.get $rc/logical-and-mismatch/gloRef
-  local.tee $0
-  if (result i32)
-   global.get $rc/logical-and-mismatch/gloRef
-  else   
-   local.get $0
-  end
-  call $~lib/rt/purerc/__retain
-  call $~lib/rt/purerc/__release
-  global.get $rc/logical-and-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 23 ;) (type $FUNCSIG$v)
-  call $start:rc/logical-and-mismatch
- )
- (func $~lib/rt/purerc/increment (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $1
-  i32.const -268435456
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const -268435456
-  i32.and
-  i32.ne
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 424
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1526,10 +985,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -1540,9 +999,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1559,7 +1018,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -1572,11 +1031,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1598,15 +1057,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  i32.const 424
+  i32.const 400
   i32.lt_u
   if
    return
@@ -1638,7 +1097,7 @@
          br $case5|0
         end
         local.get $0
-        call $~lib/rt/purerc/decrement
+        call $~lib/rt/pure/decrement
         br $break|0
        end
        local.get $0
@@ -1662,11 +1121,11 @@
        i32.sub
        i32.store offset=4
        local.get $0
-       call $~lib/rt/purerc/markGray
+       call $~lib/rt/pure/markGray
        br $break|0
       end
       local.get $0
-      call $~lib/rt/purerc/scan
+      call $~lib/rt/pure/scan
       br $break|0
      end
      local.get $0
@@ -1698,12 +1157,12 @@
      i32.and
      if
       local.get $0
-      call $~lib/rt/purerc/scanBlack
+      call $~lib/rt/pure/scanBlack
      end
      br $break|0
     end
     local.get $0
-    call $~lib/rt/purerc/collectWhite
+    call $~lib/rt/pure/collectWhite
     br $break|0
    end
    i32.const 0
@@ -1714,7 +1173,7 @@
    unreachable
   end
  )
- (func $~lib/builtins/__visit_members (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   block $switch$1$case$16
    block $switch$1$case$3
     block $switch$1$default
@@ -1736,9 +1195,550 @@
   if
    local.get $0
    local.get $1
-   call $~lib/rt/purerc/__visit
+   call $~lib/rt/pure/__visit
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
+  end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 25 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  i32.const 400
+  i32.const 0
+  i32.store
+  i32.const 1968
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 400
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 400
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 400
+  i32.const 1984
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 400
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
  (func $null (; 32 ;) (type $FUNCSIG$v)
   nop
  )
diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat
index 32b27886..334110a2 100644
--- a/tests/compiler/rc/logical-and-mismatch.untouched.wat
+++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat
@@ -1,33 +1,33 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 256))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 400))
  (export "memory" (memory $0))
  (start $start)
  (func $rc/logical-and-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
@@ -37,7 +37,7 @@
    i32.const 0
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -46,7 +46,134 @@
   i32.const 0
   call $rc/logical-and-mismatch/Ref#constructor
  )
- (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $start:rc/logical-and-mismatch (; 6 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  i32.const 0
+  call $rc/logical-and-mismatch/Ref#constructor
+  global.set $rc/logical-and-mismatch/gloRef
+  block
+   call $rc/logical-and-mismatch/getRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+    call $~lib/rt/pure/__release
+    global.get $rc/logical-and-mismatch/gloRef
+    call $~lib/rt/pure/__retain
+   else    
+    local.get $0
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   global.get $rc/logical-and-mismatch/gloRef
+   local.tee $0
+   if (result i32)
+    call $rc/logical-and-mismatch/getRef
+   else    
+    local.get $0
+    call $~lib/rt/pure/__retain
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   call $rc/logical-and-mismatch/getRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+    call $~lib/rt/pure/__release
+    call $rc/logical-and-mismatch/getRef
+   else    
+    local.get $0
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   global.get $rc/logical-and-mismatch/gloRef
+   local.tee $0
+   if (result i32)
+    global.get $rc/logical-and-mismatch/gloRef
+   else    
+    local.get $0
+   end
+   call $~lib/rt/pure/__retain
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  global.get $rc/logical-and-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 7 ;) (type $FUNCSIG$v)
+  call $start:rc/logical-and-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -66,7 +193,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -91,7 +218,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -143,7 +270,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -264,7 +391,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -281,7 +408,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -296,7 +423,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -395,7 +522,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -458,7 +585,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -474,7 +601,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -531,7 +658,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -628,7 +755,7 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
@@ -640,7 +767,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -657,9 +784,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -672,9 +799,9 @@
    i32.gt_u
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -686,768 +813,7 @@
   i32.add
   i32.load
  )
- (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1653,16 +1019,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1688,26 +1054,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1716,9 +1082,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1729,7 +1095,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1752,7 +1118,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -1785,7 +1151,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -1805,7 +1171,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -1822,145 +1188,18 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/logical-and-mismatch (; 23 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  i32.const 0
-  call $rc/logical-and-mismatch/Ref#constructor
-  global.set $rc/logical-and-mismatch/gloRef
-  block
-   call $rc/logical-and-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-    call $~lib/rt/purerc/__release
-    global.get $rc/logical-and-mismatch/gloRef
-    call $~lib/rt/purerc/__retain
-   else    
-    local.get $0
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-and-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    call $rc/logical-and-mismatch/getRef
-   else    
-    local.get $0
-    call $~lib/rt/purerc/__retain
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   call $rc/logical-and-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-    call $~lib/rt/purerc/__release
-    call $rc/logical-and-mismatch/getRef
-   else    
-    local.get $0
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-and-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    global.get $rc/logical-and-mismatch/gloRef
-   else    
-    local.get $0
-   end
-   call $~lib/rt/purerc/__retain
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  global.get $rc/logical-and-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 24 ;) (type $FUNCSIG$v)
-  call $start:rc/logical-and-mismatch
- )
- (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1984,10 +1223,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -2002,9 +1241,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2022,7 +1261,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -2037,11 +1276,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2064,17 +1303,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2116,7 +1355,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2145,7 +1384,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2153,7 +1392,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2197,7 +1436,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2206,7 +1445,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2224,7 +1463,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2267,7 +1506,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2281,6 +1520,767 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
  (func $null (; 33 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat
index 8ecc6704..b3740784 100644
--- a/tests/compiler/rc/logical-or-mismatch.optimized.wat
+++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat
@@ -1,88 +1,165 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
+ (type $FUNCSIG$i (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $start)
- (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32)
+  i32.const 0
+  i32.const 17
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+ )
+ (func $start:rc/logical-or-mismatch (; 5 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  call $rc/logical-or-mismatch/Ref#constructor
+  global.set $rc/logical-or-mismatch/gloRef
+  call $rc/logical-or-mismatch/Ref#constructor
+  local.tee $0
+  if (result i32)
+   local.get $0
+  else   
+   local.get $0
+   call $~lib/rt/pure/__release
+   global.get $rc/logical-or-mismatch/gloRef
+   call $~lib/rt/pure/__retain
+  end
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-or-mismatch/gloRef
+  local.tee $0
+  if (result i32)
+   local.get $0
+   call $~lib/rt/pure/__retain
+  else   
+   call $rc/logical-or-mismatch/Ref#constructor
+  end
+  call $~lib/rt/pure/__release
+  call $rc/logical-or-mismatch/Ref#constructor
+  local.tee $0
+  if (result i32)
+   local.get $0
+  else   
+   local.get $0
+   call $~lib/rt/pure/__release
+   call $rc/logical-or-mismatch/Ref#constructor
+  end
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-or-mismatch/gloRef
+  local.tee $0
+  if (result i32)
+   local.get $0
+  else   
+   global.get $rc/logical-or-mismatch/gloRef
+  end
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
+  global.get $rc/logical-or-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 6 ;) (type $FUNCSIG$v)
+  call $start:rc/logical-or-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
   local.get $0
-  i32.eqz
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
   if
    i32.const 0
-   i32.const 17
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
-   local.set $0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 400
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
- (func $rc/logical-or-mismatch/getRef (; 5 ;) (type $FUNCSIG$i) (result i32)
-  i32.const 0
-  call $rc/logical-or-mismatch/Ref#constructor
- )
- (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
   local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $3
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -91,50 +168,43 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $5
+   local.set $2
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $3
+   local.get $2
    i32.clz
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
+   local.set $2
+   local.get $3
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $4
   end
-  local.get $4
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $5
+   local.get $2
    i32.const 16
    i32.lt_u
   else   
@@ -143,118 +213,83 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
   i32.load offset=20
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
   if
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $4
    i32.store offset=20
   end
-  local.get $7
+  local.get $4
   if
-   local.get $7
-   local.get $6
+   local.get $4
+   local.get $5
    i32.store offset=16
   end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
   local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
+  i32.eq
+  if
+   local.get $3
    i32.const 4
    i32.shl
-   local.get $8
+   local.get $2
    i32.add
    i32.const 2
    i32.shl
+   local.get $0
    i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.0
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
+   local.get $4
+   i32.store offset=96
+   local.get $4
    i32.eqz
    if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
     i32.eqz
     if
      local.get $0
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -264,24 +299,18 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -289,56 +318,42 @@
   end
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
   i32.load
-  local.set $5
-  local.get $5
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
   i32.const 1
   i32.and
   if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
    local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.tee $2
    i32.const 1073741808
    i32.lt_u
    if
@@ -346,110 +361,91 @@
     local.get $4
     call $~lib/rt/tlsf/removeBlock
     local.get $1
-    local.get $2
+    local.get $3
     i32.const 3
     i32.and
-    local.get $3
+    local.get $2
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
     i32.load
     local.set $5
    end
   end
-  local.get $2
+  local.get $3
   i32.const 2
   i32.and
   if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
+   local.get $1
+   i32.const 4
+   i32.sub
    i32.load
-   local.set $6
-   local.get $6
+   local.tee $2
+   i32.load
+   local.tee $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
     unreachable
    end
    local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.add
-   local.set $7
-   local.get $7
+   local.tee $7
    i32.const 1073741808
    i32.lt_u
-   if
+   if (result i32)
     local.get $0
-    local.get $3
+    local.get $2
     call $~lib/rt/tlsf/removeBlock
-    local.get $3
+    local.get $2
     local.get $6
     i32.const 3
     i32.and
     local.get $7
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    local.get $3
-    local.set $1
+    local.get $2
+   else    
+    local.get $1
    end
+   local.set $1
   end
   local.get $4
   local.get $5
   i32.const 2
   i32.or
   i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
+  local.get $3
+  i32.const -4
   i32.and
-  local.set $8
-  local.get $8
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $8
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -458,23 +454,22 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $4
   local.get $1
   i32.const 16
   i32.add
-  local.get $8
+  local.get $2
   i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -485,44 +480,37 @@
   i32.sub
   local.get $1
   i32.store
-  local.get $8
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $10
+   local.set $4
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $8
+   local.get $2
    i32.clz
    i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
+   local.tee $2
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
+   local.set $4
+   local.get $2
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $9
   end
-  local.get $9
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $10
+   local.get $4
    i32.const 16
    i32.lt_u
   else   
@@ -531,116 +519,81 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
   local.get $1
   i32.const 0
   i32.store offset=16
   local.get $1
-  local.get $11
+  local.get $2
   i32.store offset=20
-  local.get $11
+  local.get $2
   if
-   local.get $11
+   local.get $2
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.1
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $9
+  local.get $3
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.1
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
  )
- (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -657,1057 +610,249 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 256
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
+  i32.const 3
   i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
   i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
   i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
+  i32.load
  )
- (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
    local.get $2
    local.set $3
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $1
    i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
    i32.lt_u
    if
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
       if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
        local.get $3
        i32.const 1
        i32.sub
        local.set $3
-       br $continue|2
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
       end
      end
     end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
    else    
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
+     loop $continue|3
+      local.get $0
       local.get $3
+      i32.add
+      i32.const 7
+      i32.and
       if
-       local.get $5
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
        local.get $3
        i32.const 1
        i32.sub
        local.tee $3
        i32.add
-       local.get $4
+       local.get $1
        local.get $3
        i32.add
        i32.load8_u
        i32.store8
-       br $continue|5
+       br $continue|3
       end
      end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
     end
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 14 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
-  i32.const 64
-  i32.const 2
+  i32.sub
+  local.tee $1
+  i32.const 1
   i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
   i32.gt_u
   select
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
+  local.tee $0
+  local.get $2
   local.get $1
   call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1716,26 +861,23 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $2
   i32.const 268435455
   i32.and
-  local.set $2
+  local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -1744,7 +886,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $1
   i32.const 1
   i32.eq
   if
@@ -1752,29 +894,23 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
+   call $~lib/rt/__visit_members
+   local.get $2
    i32.const -2147483648
    i32.and
-   i32.eqz
    if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
     global.get $~lib/rt/tlsf/ROOT
     local.get $0
     call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
    end
   else   
-   local.get $2
+   local.get $1
    i32.const 0
-   i32.gt_u
-   i32.eqz
+   i32.le_u
    if
     i32.const 0
     i32.const 24
@@ -1785,187 +921,54 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
-   i32.eqz
    if
     local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
+    local.get $1
     i32.const 1
     i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
     i32.or
     i32.store offset=4
+   else    
+    local.get $0
     local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
     i32.const -2147483648
     i32.and
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 400
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/logical-or-mismatch (; 23 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  i32.const 0
-  call $rc/logical-or-mismatch/Ref#constructor
-  global.set $rc/logical-or-mismatch/gloRef
-  block
-   call $rc/logical-or-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    local.get $0
-    call $~lib/rt/purerc/__release
-    global.get $rc/logical-or-mismatch/gloRef
-    call $~lib/rt/purerc/__retain
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-or-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-    call $~lib/rt/purerc/__retain
-   else    
-    call $rc/logical-or-mismatch/getRef
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   call $rc/logical-or-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    local.get $0
-    call $~lib/rt/purerc/__release
-    call $rc/logical-or-mismatch/getRef
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-or-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    global.get $rc/logical-or-mismatch/gloRef
-   end
-   call $~lib/rt/purerc/__retain
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  global.get $rc/logical-or-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 24 ;) (type $FUNCSIG$v)
-  call $start:rc/logical-or-mismatch
- )
- (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1973,9 +976,7 @@
   if
    local.get $0
    local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
+   i32.const -1879048193
    i32.and
    i32.const 268435456
    i32.or
@@ -1984,32 +985,27 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -2022,13 +1018,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -2037,16 +1031,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2064,17 +1057,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/pure/__visit (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 400
   i32.lt_u
   if
    return
@@ -2082,205 +1073,673 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 24
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 24
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 24
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 24
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 24
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 24
-    i32.const 96
-    i32.const 24
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 25 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 400
+  i32.const 0
+  i32.store
+  i32.const 1968
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 400
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 400
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 400
+  i32.const 1984
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 400
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 33 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 28 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 32 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat
index 8ecc6704..63b18acf 100644
--- a/tests/compiler/rc/logical-or-mismatch.untouched.wat
+++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat
@@ -1,33 +1,33 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 256))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 400))
  (export "memory" (memory $0))
  (start $start)
  (func $rc/logical-or-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
@@ -37,7 +37,7 @@
    i32.const 0
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -46,7 +46,134 @@
   i32.const 0
   call $rc/logical-or-mismatch/Ref#constructor
  )
- (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $start:rc/logical-or-mismatch (; 6 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  i32.const 0
+  call $rc/logical-or-mismatch/Ref#constructor
+  global.set $rc/logical-or-mismatch/gloRef
+  block
+   call $rc/logical-or-mismatch/getRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+   else    
+    local.get $0
+    call $~lib/rt/pure/__release
+    global.get $rc/logical-or-mismatch/gloRef
+    call $~lib/rt/pure/__retain
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   global.get $rc/logical-or-mismatch/gloRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+    call $~lib/rt/pure/__retain
+   else    
+    call $rc/logical-or-mismatch/getRef
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   call $rc/logical-or-mismatch/getRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+   else    
+    local.get $0
+    call $~lib/rt/pure/__release
+    call $rc/logical-or-mismatch/getRef
+   end
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  block
+   global.get $rc/logical-or-mismatch/gloRef
+   local.tee $0
+   if (result i32)
+    local.get $0
+   else    
+    global.get $rc/logical-or-mismatch/gloRef
+   end
+   call $~lib/rt/pure/__retain
+   local.set $0
+   local.get $0
+   call $~lib/rt/pure/__release
+  end
+  global.get $rc/logical-or-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 7 ;) (type $FUNCSIG$v)
+  call $start:rc/logical-or-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 8 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -66,7 +193,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -91,7 +218,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -143,7 +270,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -264,7 +391,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -281,7 +408,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -296,7 +423,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -395,7 +522,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -458,7 +585,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -474,7 +601,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -531,7 +658,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -628,7 +755,7 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
@@ -640,7 +767,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -657,9 +784,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -672,9 +799,9 @@
    i32.gt_u
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -686,768 +813,7 @@
   i32.add
   i32.load
  )
- (func $~lib/rt/tlsf/addMemory (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1653,16 +1019,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1688,26 +1054,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1716,9 +1082,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1729,7 +1095,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1752,7 +1118,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -1785,7 +1151,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -1805,7 +1171,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -1822,145 +1188,18 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/logical-or-mismatch (; 23 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  i32.const 0
-  call $rc/logical-or-mismatch/Ref#constructor
-  global.set $rc/logical-or-mismatch/gloRef
-  block
-   call $rc/logical-or-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    local.get $0
-    call $~lib/rt/purerc/__release
-    global.get $rc/logical-or-mismatch/gloRef
-    call $~lib/rt/purerc/__retain
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-or-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-    call $~lib/rt/purerc/__retain
-   else    
-    call $rc/logical-or-mismatch/getRef
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   call $rc/logical-or-mismatch/getRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    local.get $0
-    call $~lib/rt/purerc/__release
-    call $rc/logical-or-mismatch/getRef
-   end
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  block
-   global.get $rc/logical-or-mismatch/gloRef
-   local.tee $0
-   if (result i32)
-    local.get $0
-   else    
-    global.get $rc/logical-or-mismatch/gloRef
-   end
-   call $~lib/rt/purerc/__retain
-   local.set $0
-   local.get $0
-   call $~lib/rt/purerc/__release
-  end
-  global.get $rc/logical-or-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 24 ;) (type $FUNCSIG$v)
-  call $start:rc/logical-or-mismatch
- )
- (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1984,10 +1223,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -2002,9 +1241,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2022,7 +1261,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -2037,11 +1276,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2064,17 +1303,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2116,7 +1355,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2145,7 +1384,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2153,7 +1392,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2197,7 +1436,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2206,7 +1445,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2224,7 +1463,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2267,7 +1506,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2281,6 +1520,767 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
  (func $null (; 33 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat
index 64a47d9c..97cbe08e 100644
--- a/tests/compiler/rc/rereturn.optimized.wat
+++ b/tests/compiler/rc/rereturn.optimized.wat
@@ -1,77 +1,63 @@
 (module
- (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
- (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 56) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 168) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 56) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
- (export "__realloc" (func $~lib/rt/tlsf/__realloc))
- (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
+ (export "__retain" (func $~lib/rt/pure/__retain))
+ (export "__release" (func $~lib/rt/pure/__release))
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
  (start $start)
- (func $rc/rereturn/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
   local.get $0
-  i32.eqz
+  i32.load offset=4
+  local.tee $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.ne
   if
-   i32.const 0
-   i32.const 17
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
-   local.set $0
+   local.get $0
+   local.get $1
+   i32.const -1879048193
+   i32.and
+   i32.const 268435456
+   i32.or
+   i32.store offset=4
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 2
+   call $~lib/rt/__visit_members
   end
-  local.get $0
  )
- (func $rc/rereturn/getRef (; 2 ;) (type $FUNCSIG$i) (result i32)
-  i32.const 0
-  call $rc/rereturn/Ref#constructor
- )
- (func $rc/rereturn/rereturnRef (; 3 ;) (type $FUNCSIG$i) (result i32)
-  call $rc/rereturn/getRef
- )
- (func $start:rc/rereturn (; 4 ;) (type $FUNCSIG$v)
-  call $rc/rereturn/rereturnRef
-  call $~lib/rt/purerc/__release
- )
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
@@ -83,17 +69,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
   local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $3
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -108,44 +91,37 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $5
+   local.set $2
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $3
+   local.get $2
    i32.clz
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
+   local.set $2
+   local.get $3
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $4
   end
-  local.get $4
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $5
+   local.get $2
    i32.const 16
    i32.lt_u
   else   
@@ -161,111 +137,76 @@
    unreachable
   end
   local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
   i32.load offset=20
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
   if
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $4
    i32.store offset=20
   end
-  local.get $7
+  local.get $4
   if
-   local.get $7
-   local.get $6
+   local.get $4
+   local.get $5
    i32.store offset=16
   end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
   local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
+  i32.eq
+  if
+   local.get $3
    i32.const 4
    i32.shl
-   local.get $8
+   local.get $2
    i32.add
    i32.const 2
    i32.shl
+   local.get $0
    i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
+   local.get $4
+   i32.store offset=96
+   local.get $4
    i32.eqz
    if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
     i32.eqz
     if
      local.get $0
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -275,19 +216,13 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.eqz
   if
@@ -300,8 +235,7 @@
   end
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
@@ -313,43 +247,30 @@
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
   i32.load
-  local.set $5
-  local.get $5
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
   i32.const 1
   i32.and
   if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
    local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.tee $2
    i32.const 1073741808
    i32.lt_u
    if
@@ -357,50 +278,37 @@
     local.get $4
     call $~lib/rt/tlsf/removeBlock
     local.get $1
-    local.get $2
+    local.get $3
     i32.const 3
     i32.and
-    local.get $3
+    local.get $2
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
     i32.load
     local.set $5
    end
   end
-  local.get $2
+  local.get $3
   i32.const 2
   i32.and
   if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
+   local.get $1
+   i32.const 4
+   i32.sub
    i32.load
-   local.set $6
-   local.get $6
+   local.tee $2
+   i32.load
+   local.tee $6
    i32.const 1
    i32.and
    i32.eqz
@@ -413,54 +321,48 @@
     unreachable
    end
    local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.add
-   local.set $7
-   local.get $7
+   local.tee $7
    i32.const 1073741808
    i32.lt_u
-   if
+   if (result i32)
     local.get $0
-    local.get $3
+    local.get $2
     call $~lib/rt/tlsf/removeBlock
-    local.get $3
+    local.get $2
     local.get $6
     i32.const 3
     i32.and
     local.get $7
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    local.get $3
-    local.set $1
+    local.get $2
+   else    
+    local.get $1
    end
+   local.set $1
   end
   local.get $4
   local.get $5
   i32.const 2
   i32.or
   i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
+  local.get $3
+  i32.const -4
   i32.and
-  local.set $8
-  local.get $8
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $8
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -475,14 +377,13 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $4
   local.get $1
   i32.const 16
   i32.add
-  local.get $8
+  local.get $2
   i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -496,44 +397,37 @@
   i32.sub
   local.get $1
   i32.store
-  local.get $8
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $10
+   local.set $4
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $8
+   local.get $2
    i32.clz
    i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
+   local.tee $2
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
+   local.set $4
+   local.get $2
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $9
   end
-  local.get $9
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $10
+   local.get $4
    i32.const 16
    i32.lt_u
   else   
@@ -548,1247 +442,72 @@
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
   local.get $1
   i32.const 0
   i32.store offset=16
   local.get $1
-  local.get $11
+  local.get $2
   i32.store offset=20
-  local.get $11
+  local.get $2
   if
-   local.get $11
+   local.get $2
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
+  local.get $3
+  i32.const 4
   i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
   local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
+  i32.add
   i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
+  i32.shl
+  local.get $0
+  i32.add
   local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
   i32.const 1
+  local.get $3
+  i32.shl
   i32.or
-  local.get $5
+  i32.store
+  local.get $3
   i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
+  i32.shl
+  local.get $0
   i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
+  local.get $3
   i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
   i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
   local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 72
-   i32.const 24
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
   i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 24
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
-      if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       br $continue|2
-      end
-     end
-    end
-   else    
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
-      local.get $3
-      if
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $continue|5
-      end
-     end
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/reallocateBlock (; 16 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
   i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
   i32.const 1
+  local.get $4
+  i32.shl
   i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $8
+  i32.store offset=4
  )
- (func $~lib/rt/tlsf/__realloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -1806,359 +525,24 @@
   local.get $1
   call $~lib/rt/tlsf/insertBlock
  )
- (func $~lib/rt/tlsf/__free (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/increment (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__typeinfo (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 184
-   i32.const 240
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
-  local.tee $2
-  i32.const 64
-  i32.const 2
-  i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
-  i32.gt_u
-  select
-  local.set $4
-  local.get $4
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.and
-  local.set $2
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-   if
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
-   end
-  else   
-   local.get $2
-   i32.const 0
-   i32.gt_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   i32.eqz
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-    local.get $1
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-   end
-  end
- )
- (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.ne
-  if
-   local.get $0
-   local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 268435456
-   i32.or
-   i32.store offset=4
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 2
-   call $~lib/builtins/__visit_members
-  end
- )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -2171,13 +555,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -2186,16 +568,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2213,49 +594,42 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__collect (; 31 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $5
+  local.tee $2
+  local.set $3
+  global.get $~lib/rt/pure/CUR
   local.set $0
-  local.get $0
-  local.set $1
-  block $break|0
-   block
-    local.get $1
-    local.set $2
-    global.get $~lib/rt/purerc/CUR
-    local.set $3
-   end
-   loop $repeat|0
-    local.get $2
+  loop $repeat|0
+   block $break|0
     local.get $3
-    i32.lt_u
-    i32.eqz
+    local.get $0
+    i32.ge_u
     br_if $break|0
-    local.get $2
+    local.get $3
     i32.load
-    local.set $4
-    local.get $4
+    local.tee $4
     i32.load offset=4
-    local.set $5
-    local.get $5
+    local.tee $1
     i32.const 1879048192
     i32.and
     i32.const 805306368
     i32.eq
     if (result i32)
-     local.get $5
+     local.get $1
      i32.const 268435455
      i32.and
      i32.const 0
@@ -2265,122 +639,100 @@
     end
     if
      local.get $4
-     call $~lib/rt/purerc/markGray
-     local.get $1
+     call $~lib/rt/pure/markGray
+     local.get $2
      local.get $4
      i32.store
-     local.get $1
+     local.get $2
      i32.const 4
      i32.add
-     local.set $1
+     local.set $2
     else     
-     local.get $5
+     i32.const 0
+     local.get $1
+     i32.const 268435455
+     i32.and
+     i32.eqz
+     local.get $1
      i32.const 1879048192
      i32.and
-     i32.const 0
-     i32.eq
-     if (result i32)
-      local.get $5
-      i32.const 268435455
-      i32.and
-      i32.eqz
-     else      
-      i32.const 0
-     end
+     select
      if
       global.get $~lib/rt/tlsf/ROOT
       local.get $4
       call $~lib/rt/tlsf/freeBlock
      else      
       local.get $4
-      local.get $5
-      i32.const -2147483648
-      i32.const -1
-      i32.xor
+      local.get $1
+      i32.const 2147483647
       i32.and
       i32.store offset=4
      end
     end
-    local.get $2
+    local.get $3
     i32.const 4
     i32.add
-    local.set $2
+    local.set $3
     br $repeat|0
-    unreachable
    end
-   unreachable
   end
-  local.get $1
-  global.set $~lib/rt/purerc/CUR
-  block $break|1
-   local.get $0
-   local.set $5
-   loop $repeat|1
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
+  local.get $2
+  global.set $~lib/rt/pure/CUR
+  local.get $5
+  local.set $0
+  loop $repeat|1
+   block $break|1
+    local.get $0
+    local.get $2
+    i32.ge_u
     br_if $break|1
-    local.get $5
+    local.get $0
     i32.load
-    call $~lib/rt/purerc/scan
-    local.get $5
+    call $~lib/rt/pure/scan
+    local.get $0
     i32.const 4
     i32.add
-    local.set $5
+    local.set $0
     br $repeat|1
-    unreachable
    end
-   unreachable
   end
-  block $break|2
-   local.get $0
-   local.set $5
-   loop $repeat|2
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
+  local.get $5
+  local.set $0
+  loop $repeat|2
+   block $break|2
+    local.get $0
+    local.get $2
+    i32.ge_u
     br_if $break|2
-    local.get $5
+    local.get $0
     i32.load
-    local.set $4
-    local.get $4
-    local.get $4
+    local.tee $1
+    local.get $1
     i32.load offset=4
-    i32.const -2147483648
-    i32.const -1
-    i32.xor
+    i32.const 2147483647
     i32.and
     i32.store offset=4
-    local.get $4
-    call $~lib/rt/purerc/collectWhite
-    local.get $5
+    local.get $1
+    call $~lib/rt/pure/collectWhite
+    local.get $0
     i32.const 4
     i32.add
-    local.set $5
+    local.set $0
     br $repeat|2
-    unreachable
    end
-   unreachable
   end
-  local.get $0
-  global.set $~lib/rt/purerc/CUR
+  local.get $5
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/common/__instanceof (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=8
-  local.set $2
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $3
-  local.get $2
+  local.tee $0
   if (result i32)
-   local.get $2
-   local.get $3
+   local.get $0
+   i32.const 256
    i32.load
    i32.le_u
   else   
@@ -2388,33 +740,438 @@
   end
   if
    loop $continue|0
-    local.get $2
+    local.get $0
     local.get $1
     i32.eq
     if
      i32.const 1
      return
     end
-    local.get $3
-    local.get $2
-    i32.const 8
-    i32.mul
+    local.get $0
+    i32.const 3
+    i32.shl
+    i32.const 256
     i32.add
     i32.load offset=4
-    local.tee $2
+    local.tee $0
     br_if $continue|0
    end
   end
   i32.const 0
  )
- (func $start (; 33 ;) (type $FUNCSIG$v)
-  call $start:rc/rereturn
+ (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  if (result i32)
+   local.get $0
+   i32.const 256
+   i32.load
+   i32.gt_u
+  else   
+   i32.const 1
+  end
+  if
+   i32.const 72
+   i32.const 128
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 3
+  i32.shl
+  i32.const 256
+  i32.add
+  i32.load
  )
- (func $~lib/rt/purerc/__visit (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $start (; 11 ;) (type $FUNCSIG$v)
+  i32.const 0
+  i32.const 17
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/rt/pure/increment (; 12 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 400
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  block $~lib/util/memory/memmove|inlined.0
+   local.get $2
+   local.set $3
+   local.get $0
+   local.get $1
+   i32.eq
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
+   i32.lt_u
+   if
+    local.get $1
+    i32.const 7
+    i32.and
+    local.get $0
+    i32.const 7
+    i32.and
+    i32.eq
+    if
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
+      if
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $3
+       i32.const 1
+       i32.sub
+       local.set $3
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
+      end
+     end
+    end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
+   else    
+    local.get $1
+    i32.const 7
+    i32.and
+    local.get $0
+    i32.const 7
+    i32.and
+    i32.eq
+    if
+     loop $continue|3
+      local.get $0
+      local.get $3
+      i32.add
+      i32.const 7
+      i32.and
+      if
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
+       local.get $3
+       i32.const 1
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i32.load8_u
+       i32.store8
+       br $continue|3
+      end
+     end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/growRoots (; 15 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $2
+  i32.sub
+  local.tee $1
+  i32.const 1
+  i32.shl
+  local.tee $0
+  i32.const 256
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 256
+  i32.gt_u
+  select
+  local.tee $3
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.tee $0
+  local.get $2
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  i32.const 268435455
+  i32.and
+  local.set $1
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $2
+   i32.const -2147483648
+   i32.and
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   end
+  else   
+   local.get $1
+   i32.const 0
+   i32.le_u
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   if
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
+    i32.or
+    i32.store offset=4
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/__release (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  i32.const 400
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/rt/pure/__visit (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.const 400
   i32.lt_u
   if
    return
@@ -2422,205 +1179,673 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 128
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 168
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 128
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 168
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 168
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 24
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 128
-    i32.const 96
     i32.const 24
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 35 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 22 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 400
+  i32.const 0
+  i32.store
+  i32.const 1968
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 400
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 400
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 400
+  i32.const 1984
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 400
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 36 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 24
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 24
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 29 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat
index 64a47d9c..4d670391 100644
--- a/tests/compiler/rc/rereturn.untouched.wat
+++ b/tests/compiler/rc/rereturn.untouched.wat
@@ -2,37 +2,35 @@
  (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
- (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
+ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 56) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 168) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 56) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 256))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 400))
  (export "memory" (memory $0))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
- (export "__realloc" (func $~lib/rt/tlsf/__realloc))
- (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
+ (export "__retain" (func $~lib/rt/pure/__retain))
+ (export "__release" (func $~lib/rt/pure/__release))
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
  (start $start)
  (func $rc/rereturn/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
@@ -41,7 +39,7 @@
    i32.const 0
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -55,9 +53,36 @@
  )
  (func $start:rc/rereturn (; 4 ;) (type $FUNCSIG$v)
   call $rc/rereturn/rereturnRef
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/markGray (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.ne
+  if
+   local.get $0
+   local.get $1
+   i32.const 1879048192
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 268435456
+   i32.or
+   i32.store offset=4
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 2
+   call $~lib/rt/__visit_members
+  end
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -199,7 +224,7 @@
   end
   i32.eq
   if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
+   block $~lib/rt/tlsf/SETHEAD|inlined.0
     local.get $0
     local.set $11
     local.get $4
@@ -236,7 +261,7 @@
      i32.load offset=4
     end
     local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
+    block $~lib/rt/tlsf/SETSL|inlined.0
      local.get $0
      local.set $11
      local.get $4
@@ -275,7 +300,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -579,7 +604,7 @@
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
+  block $~lib/rt/tlsf/SETHEAD|inlined.1
    local.get $0
    local.set $12
    local.get $9
@@ -608,7 +633,7 @@
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
+  block $~lib/rt/tlsf/SETSL|inlined.1
    local.get $0
    local.set $3
    local.get $9
@@ -639,768 +664,396 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
   local.get $1
+  i32.load
+  local.set $2
   local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
+  i32.const 1
+  i32.and
+  i32.eqz
   i32.eqz
   if
    i32.const 0
    i32.const 24
-   i32.const 384
-   i32.const 4
+   i32.const 530
+   i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
+  local.get $1
   local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
   i32.const 1
   i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
   i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
   local.get $0
-  local.get $8
+  local.get $1
   call $~lib/rt/tlsf/insertBlock
-  i32.const 1
  )
- (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/scanBlack (; 9 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  local.get $0
+  i32.load offset=4
+  i32.const 1879048192
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 0
+  i32.or
+  i32.store offset=4
+  local.get $0
+  i32.const 16
+  i32.add
+  i32.const 4
+  call $~lib/rt/__visit_members
+ )
+ (func $~lib/rt/pure/scan (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.eq
+  if
+   local.get $1
+   i32.const 268435455
+   i32.and
+   i32.const 0
+   i32.gt_u
+   if
+    local.get $0
+    call $~lib/rt/pure/scanBlack
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1879048192
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.const 536870912
+    i32.or
+    i32.store offset=4
+    local.get $0
+    i32.const 16
+    i32.add
+    i32.const 3
+    call $~lib/rt/__visit_members
+   end
+  end
+ )
+ (func $~lib/rt/pure/collectWhite (; 11 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 536870912
+  i32.eq
+  if (result i32)
+   local.get $1
+   i32.const -2147483648
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 5
+   call $~lib/rt/__visit_members
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/__collect (; 12 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  current_memory
+  local.get $0
   local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
   block $break|0
-   i32.const 0
-   local.set $4
+   block
+    local.get $1
+    local.set $2
+    global.get $~lib/rt/pure/CUR
+    local.set $3
+   end
    loop $repeat|0
-    local.get $4
-    i32.const 23
+    local.get $2
+    local.get $3
     i32.lt_u
     i32.eqz
     br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
+    local.get $2
+    i32.load
     local.set $4
+    local.get $4
+    i32.load offset=4
+    local.set $5
+    local.get $5
+    i32.const 1879048192
+    i32.and
+    i32.const 805306368
+    i32.eq
+    if (result i32)
+     local.get $5
+     i32.const 268435455
+     i32.and
+     i32.const 0
+     i32.gt_u
+    else     
+     i32.const 0
+    end
+    if
+     local.get $4
+     call $~lib/rt/pure/markGray
+     local.get $1
+     local.get $4
+     i32.store
+     local.get $1
+     i32.const 4
+     i32.add
+     local.set $1
+    else     
+     local.get $5
+     i32.const 1879048192
+     i32.and
+     i32.const 0
+     i32.eq
+     if (result i32)
+      local.get $5
+      i32.const 268435455
+      i32.and
+      i32.eqz
+     else      
+      i32.const 0
+     end
+     if
+      global.get $~lib/rt/tlsf/ROOT
+      local.get $4
+      call $~lib/rt/tlsf/freeBlock
+     else      
+      local.get $4
+      local.get $5
+      i32.const -2147483648
+      i32.const -1
+      i32.xor
+      i32.and
+      i32.store offset=4
+     end
+    end
+    local.get $2
+    i32.const 4
+    i32.add
+    local.set $2
     br $repeat|0
     unreachable
    end
    unreachable
   end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 72
-   i32.const 24
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
   local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+  global.set $~lib/rt/pure/CUR
+  block $break|1
    local.get $0
    local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
+   loop $repeat|1
+    local.get $5
+    local.get $1
+    i32.lt_u
     i32.eqz
-    if
-     i32.const 0
-     i32.const 24
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
+    br_if $break|1
+    local.get $5
+    i32.load
+    call $~lib/rt/pure/scan
     local.get $5
     i32.const 4
-    i32.shl
-    local.get $4
     i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.set $5
+    br $repeat|1
+    unreachable
    end
-   local.set $7
+   unreachable
   end
-  local.get $7
+  block $break|2
+   local.get $0
+   local.set $5
+   loop $repeat|2
+    local.get $5
+    local.get $1
+    i32.lt_u
+    i32.eqz
+    br_if $break|2
+    local.get $5
+    i32.load
+    local.set $4
+    local.get $4
+    local.get $4
+    i32.load offset=4
+    i32.const -2147483648
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.store offset=4
+    local.get $4
+    call $~lib/rt/pure/collectWhite
+    local.get $5
+    i32.const 4
+    i32.add
+    local.set $5
+    br $repeat|2
+    unreachable
+   end
+   unreachable
+  end
+  local.get $0
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__instanceof (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=8
   local.set $2
+  global.get $~lib/rt/RTTI_BASE
+  local.set $3
+  local.get $2
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.load
+   i32.le_u
+  else   
+   i32.const 0
+  end
+  if
+   loop $continue|0
+    local.get $2
+    local.get $1
+    i32.eq
+    if
+     i32.const 1
+     return
+    end
+    local.get $3
+    local.get $2
+    i32.const 8
+    i32.mul
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    br_if $continue|0
+   end
+  end
+  i32.const 0
+ )
+ (func $~lib/rt/__typeinfo (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  global.get $~lib/rt/RTTI_BASE
+  local.set $1
+  local.get $0
+  i32.eqz
+  if (result i32)
+   i32.const 1
+  else   
+   local.get $0
+   local.get $1
+   i32.load
+   i32.gt_u
+  end
+  if
+   i32.const 72
+   i32.const 128
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $1
-  i32.const 65535
+  local.get $0
+  i32.const 8
+  i32.mul
   i32.add
-  i32.const 65535
+  i32.load
+ )
+ (func $start (; 15 ;) (type $FUNCSIG$v)
+  call $start:rc/rereturn
+ )
+ (func $~lib/rt/pure/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
   i32.const -1
   i32.xor
   i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
   i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
+  i32.const 1
   i32.and
   i32.eqz
   i32.eqz
   if
    i32.const 0
-   i32.const 24
-   i32.const 363
+   i32.const 168
+   i32.const 106
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
+ )
+ (func $~lib/rt/pure/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
   if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
+   local.get $0
    i32.const 16
    i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
+   call $~lib/rt/pure/increment
   end
+  local.get $0
  )
- (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1606,341 +1259,16 @@
    end
   end
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 16 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $8
- )
- (func $~lib/rt/tlsf/__realloc (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/tlsf/freeBlock (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
- )
- (func $~lib/rt/tlsf/__free (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/increment (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__typeinfo (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 184
-   i32.const 240
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 23 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 19 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1966,26 +1294,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1994,9 +1322,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -2014,7 +1342,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 128
+   i32.const 168
    i32.const 114
    i32.const 13
    call $~lib/builtins/abort
@@ -2028,7 +1356,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -2053,7 +1381,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 128
+    i32.const 168
     i32.const 123
     i32.const 15
     call $~lib/builtins/abort
@@ -2061,7 +1389,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -2081,7 +1409,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -2098,323 +1426,22 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $~lib/rt/purerc/markGray (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.ne
-  if
-   local.get $0
-   local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 268435456
-   i32.or
-   i32.store offset=4
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 2
-   call $~lib/builtins/__visit_members
-  end
- )
- (func $~lib/rt/purerc/scanBlack (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  local.get $0
-  i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 0
-  i32.or
-  i32.store offset=4
-  local.get $0
-  i32.const 16
-  i32.add
-  i32.const 4
-  call $~lib/builtins/__visit_members
- )
- (func $~lib/rt/purerc/scan (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.eq
-  if
-   local.get $1
-   i32.const 268435455
-   i32.and
-   i32.const 0
-   i32.gt_u
-   if
-    local.get $0
-    call $~lib/rt/purerc/scanBlack
-   else    
-    local.get $0
-    local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.const 536870912
-    i32.or
-    i32.store offset=4
-    local.get $0
-    i32.const 16
-    i32.add
-    i32.const 3
-    call $~lib/builtins/__visit_members
-   end
-  end
- )
- (func $~lib/rt/purerc/collectWhite (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 536870912
-  i32.eq
-  if (result i32)
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 5
-   call $~lib/builtins/__visit_members
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/__collect (; 31 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  local.get $0
-  local.set $1
-  block $break|0
-   block
-    local.get $1
-    local.set $2
-    global.get $~lib/rt/purerc/CUR
-    local.set $3
-   end
-   loop $repeat|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    local.get $2
-    i32.load
-    local.set $4
-    local.get $4
-    i32.load offset=4
-    local.set $5
-    local.get $5
-    i32.const 1879048192
-    i32.and
-    i32.const 805306368
-    i32.eq
-    if (result i32)
-     local.get $5
-     i32.const 268435455
-     i32.and
-     i32.const 0
-     i32.gt_u
-    else     
-     i32.const 0
-    end
-    if
-     local.get $4
-     call $~lib/rt/purerc/markGray
-     local.get $1
-     local.get $4
-     i32.store
-     local.get $1
-     i32.const 4
-     i32.add
-     local.set $1
-    else     
-     local.get $5
-     i32.const 1879048192
-     i32.and
-     i32.const 0
-     i32.eq
-     if (result i32)
-      local.get $5
-      i32.const 268435455
-      i32.and
-      i32.eqz
-     else      
-      i32.const 0
-     end
-     if
-      global.get $~lib/rt/tlsf/ROOT
-      local.get $4
-      call $~lib/rt/tlsf/freeBlock
-     else      
-      local.get $4
-      local.get $5
-      i32.const -2147483648
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.store offset=4
-     end
-    end
-    local.get $2
-    i32.const 4
-    i32.add
-    local.set $2
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $1
-  global.set $~lib/rt/purerc/CUR
-  block $break|1
-   local.get $0
-   local.set $5
-   loop $repeat|1
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
-    br_if $break|1
-    local.get $5
-    i32.load
-    call $~lib/rt/purerc/scan
-    local.get $5
-    i32.const 4
-    i32.add
-    local.set $5
-    br $repeat|1
-    unreachable
-   end
-   unreachable
-  end
-  block $break|2
-   local.get $0
-   local.set $5
-   loop $repeat|2
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
-    br_if $break|2
-    local.get $5
-    i32.load
-    local.set $4
-    local.get $4
-    local.get $4
-    i32.load offset=4
-    i32.const -2147483648
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.store offset=4
-    local.get $4
-    call $~lib/rt/purerc/collectWhite
-    local.get $5
-    i32.const 4
-    i32.add
-    local.set $5
-    br $repeat|2
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/common/__instanceof (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/pure/__visit (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=8
-  local.set $2
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $3
-  local.get $2
-  if (result i32)
-   local.get $2
-   local.get $3
-   i32.load
-   i32.le_u
-  else   
-   i32.const 0
-  end
-  if
-   loop $continue|0
-    local.get $2
-    local.get $1
-    i32.eq
-    if
-     i32.const 1
-     return
-    end
-    local.get $3
-    local.get $2
-    i32.const 8
-    i32.mul
-    i32.add
-    i32.load offset=4
-    local.tee $2
-    br_if $continue|0
-   end
-  end
-  i32.const 0
- )
- (func $start (; 33 ;) (type $FUNCSIG$v)
-  call $start:rc/rereturn
- )
- (func $~lib/rt/purerc/__visit (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2456,7 +1483,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2472,7 +1499,7 @@
         i32.eqz
         if
          i32.const 0
-         i32.const 128
+         i32.const 168
          i32.const 74
          i32.const 17
          call $~lib/builtins/abort
@@ -2485,7 +1512,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2493,7 +1520,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2519,7 +1546,7 @@
       i32.eqz
       if
        i32.const 0
-       i32.const 128
+       i32.const 168
        i32.const 85
        i32.const 6
        call $~lib/builtins/abort
@@ -2537,7 +1564,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2546,7 +1573,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2556,7 +1583,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 128
+    i32.const 168
     i32.const 96
     i32.const 24
     call $~lib/builtins/abort
@@ -2564,7 +1591,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 35 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2607,7 +1634,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2621,6 +1648,767 @@
    unreachable
   end
  )
- (func $null (; 36 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/addMemory (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 26 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 24
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 24
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 33 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat
index cab17a7b..64fdc911 100644
--- a/tests/compiler/rc/ternary-mismatch.optimized.wat
+++ b/tests/compiler/rc/ternary-mismatch.optimized.wat
@@ -1,108 +1,157 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
+ (type $FUNCSIG$i (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (global $rc/ternary-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (export "test1" (func $rc/ternary-mismatch/test1))
  (export "test2" (func $rc/ternary-mismatch/test2))
  (start $start)
- (func $rc/ternary-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $rc/ternary-mismatch/Ref#constructor (; 4 ;) (type $FUNCSIG$i) (result i32)
+  i32.const 0
+  i32.const 17
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+ )
+ (func $rc/ternary-mismatch/test1 (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
+  if (result i32)
+   call $rc/ternary-mismatch/Ref#constructor
+  else   
+   global.get $rc/ternary-mismatch/gloRef
+   call $~lib/rt/pure/__retain
+  end
+ )
+ (func $rc/ternary-mismatch/test2 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  if (result i32)
+   global.get $rc/ternary-mismatch/gloRef
+   call $~lib/rt/pure/__retain
+  else   
+   call $rc/ternary-mismatch/Ref#constructor
+  end
+ )
+ (func $start:rc/ternary-mismatch (; 7 ;) (type $FUNCSIG$v)
+  call $rc/ternary-mismatch/Ref#constructor
+  global.set $rc/ternary-mismatch/gloRef
+  i32.const 1
+  call $rc/ternary-mismatch/test1
+  call $~lib/rt/pure/__release
+  i32.const 0
+  call $rc/ternary-mismatch/test1
+  call $~lib/rt/pure/__release
+  i32.const 1
+  call $rc/ternary-mismatch/test2
+  call $~lib/rt/pure/__release
+  i32.const 0
+  call $rc/ternary-mismatch/test2
+  call $~lib/rt/pure/__release
+  global.get $rc/ternary-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 8 ;) (type $FUNCSIG$v)
+  call $start:rc/ternary-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 9 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
   if
    i32.const 0
-   i32.const 17
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
-   local.set $0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 400
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
- (func $rc/ternary-mismatch/getRef (; 5 ;) (type $FUNCSIG$i) (result i32)
-  i32.const 0
-  call $rc/ternary-mismatch/Ref#constructor
- )
- (func $rc/ternary-mismatch/test1 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  if (result i32)
-   call $rc/ternary-mismatch/getRef
-  else   
-   global.get $rc/ternary-mismatch/gloRef
-   call $~lib/rt/purerc/__retain
-  end
- )
- (func $rc/ternary-mismatch/test2 (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  if (result i32)
-   global.get $rc/ternary-mismatch/gloRef
-   call $~lib/rt/purerc/__retain
-  else   
-   call $rc/ternary-mismatch/getRef
-  end
- )
- (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
   local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $3
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -111,50 +160,43 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $5
+   local.set $2
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $3
+   local.get $2
    i32.clz
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
+   local.set $2
+   local.get $3
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $4
   end
-  local.get $4
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $5
+   local.get $2
    i32.const 16
    i32.lt_u
   else   
@@ -163,118 +205,83 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
   i32.load offset=20
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
   if
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $4
    i32.store offset=20
   end
-  local.get $7
+  local.get $4
   if
-   local.get $7
-   local.get $6
+   local.get $4
+   local.get $5
    i32.store offset=16
   end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
   local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
+  i32.eq
+  if
+   local.get $3
    i32.const 4
    i32.shl
-   local.get $8
+   local.get $2
    i32.add
    i32.const 2
    i32.shl
+   local.get $0
    i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.0
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
+   local.get $4
+   i32.store offset=96
+   local.get $4
    i32.eqz
    if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
     i32.eqz
     if
      local.get $0
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -284,24 +291,18 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -309,56 +310,42 @@
   end
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
   i32.load
-  local.set $5
-  local.get $5
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
   i32.const 1
   i32.and
   if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
    local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.tee $2
    i32.const 1073741808
    i32.lt_u
    if
@@ -366,110 +353,91 @@
     local.get $4
     call $~lib/rt/tlsf/removeBlock
     local.get $1
-    local.get $2
+    local.get $3
     i32.const 3
     i32.and
-    local.get $3
+    local.get $2
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
     i32.load
     local.set $5
    end
   end
-  local.get $2
+  local.get $3
   i32.const 2
   i32.and
   if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
+   local.get $1
+   i32.const 4
+   i32.sub
    i32.load
-   local.set $6
-   local.get $6
+   local.tee $2
+   i32.load
+   local.tee $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
     unreachable
    end
    local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.add
-   local.set $7
-   local.get $7
+   local.tee $7
    i32.const 1073741808
    i32.lt_u
-   if
+   if (result i32)
     local.get $0
-    local.get $3
+    local.get $2
     call $~lib/rt/tlsf/removeBlock
-    local.get $3
+    local.get $2
     local.get $6
     i32.const 3
     i32.and
     local.get $7
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    local.get $3
-    local.set $1
+    local.get $2
+   else    
+    local.get $1
    end
+   local.set $1
   end
   local.get $4
   local.get $5
   i32.const 2
   i32.or
   i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
+  local.get $3
+  i32.const -4
   i32.and
-  local.set $8
-  local.get $8
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $8
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -478,23 +446,22 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $4
   local.get $1
   i32.const 16
   i32.add
-  local.get $8
+  local.get $2
   i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -505,44 +472,37 @@
   i32.sub
   local.get $1
   i32.store
-  local.get $8
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $10
+   local.set $4
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $8
+   local.get $2
    i32.clz
    i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
+   local.tee $2
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
+   local.set $4
+   local.get $2
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $9
   end
-  local.get $9
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $10
+   local.get $4
    i32.const 16
    i32.lt_u
   else   
@@ -551,116 +511,81 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
   local.get $1
   i32.const 0
   i32.store offset=16
   local.get $1
-  local.get $11
+  local.get $2
   i32.store offset=20
-  local.get $11
+  local.get $2
   if
-   local.get $11
+   local.get $2
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.1
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $9
+  local.get $3
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.1
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
  )
- (func $~lib/rt/tlsf/freeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -677,1057 +602,249 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 256
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/tlsf/addMemory (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 13 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
+  i32.const 3
   i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
   i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
   i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
+  i32.load
  )
- (func $~lib/rt/tlsf/prepareBlock (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
    local.get $2
    local.set $3
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $1
    i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
    i32.lt_u
    if
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
       if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
        local.get $3
        i32.const 1
        i32.sub
        local.set $3
-       br $continue|2
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
       end
      end
     end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
    else    
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
+     loop $continue|3
+      local.get $0
       local.get $3
+      i32.add
+      i32.const 7
+      i32.and
       if
-       local.get $5
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
        local.get $3
        i32.const 1
        i32.sub
        local.tee $3
        i32.add
-       local.get $4
+       local.get $1
        local.get $3
        i32.add
        i32.load8_u
        i32.store8
-       br $continue|5
+       br $continue|3
       end
      end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
     end
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 21 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 16 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
-  i32.const 64
-  i32.const 2
+  i32.sub
+  local.tee $1
+  i32.const 1
   i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
   i32.gt_u
   select
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
+  local.tee $0
+  local.get $2
   local.get $1
   call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1736,26 +853,23 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $2
   i32.const 268435455
   i32.and
-  local.set $2
+  local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -1764,7 +878,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $1
   i32.const 1
   i32.eq
   if
@@ -1772,29 +886,23 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
+   call $~lib/rt/__visit_members
+   local.get $2
    i32.const -2147483648
    i32.and
-   i32.eqz
    if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
     global.get $~lib/rt/tlsf/ROOT
     local.get $0
     call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
    end
   else   
-   local.get $2
+   local.get $1
    i32.const 0
-   i32.gt_u
-   i32.eqz
+   i32.le_u
    if
     i32.const 0
     i32.const 24
@@ -1805,143 +913,54 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
-   i32.eqz
    if
     local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
+    local.get $1
     i32.const 1
     i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
     i32.or
     i32.store offset=4
+   else    
+    local.get $0
     local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
     i32.const -2147483648
     i32.and
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 400
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/ternary-mismatch (; 25 ;) (type $FUNCSIG$v)
-  i32.const 0
-  call $rc/ternary-mismatch/Ref#constructor
-  global.set $rc/ternary-mismatch/gloRef
-  i32.const 1
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/purerc/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/purerc/__release
-  i32.const 1
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/purerc/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/purerc/__release
-  global.get $rc/ternary-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 26 ;) (type $FUNCSIG$v)
-  call $start:rc/ternary-mismatch
- )
- (func $~lib/rt/purerc/increment (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1949,9 +968,7 @@
   if
    local.get $0
    local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
+   i32.const -1879048193
    i32.and
    i32.const 268435456
    i32.or
@@ -1960,32 +977,27 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 31 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -1998,13 +1010,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -2013,16 +1023,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 32 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2040,17 +1049,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/pure/__visit (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 400
   i32.lt_u
   if
    return
@@ -2058,205 +1065,673 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 24
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 24
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 24
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 24
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 24
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 24
-    i32.const 96
-    i32.const 24
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 27 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 400
+  i32.const 0
+  i32.store
+  i32.const 1968
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 400
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 400
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 400
+  i32.const 1984
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 400
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 35 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 34 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat
index cab17a7b..eedc8d9f 100644
--- a/tests/compiler/rc/ternary-mismatch.untouched.wat
+++ b/tests/compiler/rc/ternary-mismatch.untouched.wat
@@ -1,33 +1,33 @@
 (module
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$v (func))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 64) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 112) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 168) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 224) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 280) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 56) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 160) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\11\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $rc/ternary-mismatch/gloRef (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 424))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 256))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 400))
  (export "memory" (memory $0))
  (export "test1" (func $rc/ternary-mismatch/test1))
  (export "test2" (func $rc/ternary-mismatch/test2))
@@ -39,7 +39,7 @@
    i32.const 0
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -54,19 +54,102 @@
    call $rc/ternary-mismatch/getRef
   else   
    global.get $rc/ternary-mismatch/gloRef
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
   end
  )
  (func $rc/ternary-mismatch/test2 (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   if (result i32)
    global.get $rc/ternary-mismatch/gloRef
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
   else   
    call $rc/ternary-mismatch/getRef
   end
  )
- (func $~lib/rt/tlsf/removeBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $start:rc/ternary-mismatch (; 8 ;) (type $FUNCSIG$v)
+  i32.const 0
+  call $rc/ternary-mismatch/Ref#constructor
+  global.set $rc/ternary-mismatch/gloRef
+  i32.const 1
+  call $rc/ternary-mismatch/test1
+  call $~lib/rt/pure/__release
+  i32.const 0
+  call $rc/ternary-mismatch/test1
+  call $~lib/rt/pure/__release
+  i32.const 1
+  call $rc/ternary-mismatch/test2
+  call $~lib/rt/pure/__release
+  i32.const 0
+  call $rc/ternary-mismatch/test2
+  call $~lib/rt/pure/__release
+  global.get $rc/ternary-mismatch/gloRef
+  call $~lib/rt/pure/__release
+ )
+ (func $start (; 9 ;) (type $FUNCSIG$v)
+  call $start:rc/ternary-mismatch
+ )
+ (func $~lib/rt/pure/increment (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -86,7 +169,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 275
    i32.const 13
    call $~lib/builtins/abort
@@ -111,7 +194,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 277
    i32.const 13
    call $~lib/builtins/abort
@@ -163,7 +246,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 290
    i32.const 13
    call $~lib/builtins/abort
@@ -284,7 +367,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 9 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -301,7 +384,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 203
    i32.const 13
    call $~lib/builtins/abort
@@ -316,7 +399,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 205
    i32.const 13
    call $~lib/builtins/abort
@@ -415,7 +498,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 80
+    i32.const 72
     i32.const 226
     i32.const 15
     call $~lib/builtins/abort
@@ -478,7 +561,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 241
    i32.const 13
    call $~lib/builtins/abort
@@ -494,7 +577,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 242
    i32.const 13
    call $~lib/builtins/abort
@@ -551,7 +634,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 258
    i32.const 13
    call $~lib/builtins/abort
@@ -648,7 +731,7 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
@@ -660,7 +743,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 80
+   i32.const 72
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -677,9 +760,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -692,9 +775,9 @@
    i32.gt_u
   end
   if
-   i32.const 128
-   i32.const 184
-   i32.const 55
+   i32.const 120
+   i32.const 176
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -706,768 +789,7 @@
   i32.add
   i32.load
  )
- (func $~lib/rt/tlsf/addMemory (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 13 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.2
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.2
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 240
-   i32.const 80
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 80
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 80
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 80
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1673,16 +995,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 21 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 17 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1708,26 +1030,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1736,9 +1058,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1749,7 +1071,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -1772,7 +1094,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -1805,7 +1127,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -1825,7 +1147,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -1842,101 +1164,18 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $start:rc/ternary-mismatch (; 25 ;) (type $FUNCSIG$v)
-  i32.const 0
-  call $rc/ternary-mismatch/Ref#constructor
-  global.set $rc/ternary-mismatch/gloRef
-  i32.const 1
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/purerc/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/purerc/__release
-  i32.const 1
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/purerc/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/purerc/__release
-  global.get $rc/ternary-mismatch/gloRef
-  call $~lib/rt/purerc/__release
- )
- (func $start (; 26 ;) (type $FUNCSIG$v)
-  call $start:rc/ternary-mismatch
- )
- (func $~lib/rt/purerc/increment (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/purerc/markGray (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1960,10 +1199,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -1978,9 +1217,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 31 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -1998,7 +1237,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -2013,11 +1252,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 32 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -2040,17 +1279,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2092,7 +1331,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2121,7 +1360,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2129,7 +1368,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2173,7 +1412,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2182,7 +1421,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2200,7 +1439,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 26 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2243,7 +1482,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2257,6 +1496,767 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/addMemory (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 28 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 72
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 72
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 32 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 72
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 72
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
  (func $null (; 35 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/retain-release.optimized.wat b/tests/compiler/retain-release.optimized.wat
index 82aea40b..fb250b52 100644
--- a/tests/compiler/retain-release.optimized.wat
+++ b/tests/compiler/retain-release.optimized.wat
@@ -7,472 +7,135 @@
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00e\00r\00r\00o\00r\00")
- (data (i32.const 40) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00r\00e\00t\00a\00i\00n\00-\00r\00e\00l\00e\00a\00s\00e\00.\00t\00s\00")
+ (data (i32.const 8) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00e\00r\00r\00o\00r")
+ (data (i32.const 40) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00r\00e\00t\00a\00i\00n\00-\00r\00e\00l\00e\00a\00s\00e\00.\00t\00s")
  (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (elem (i32.const 0) $retain-release/receiveRef)
  (global $retain-release/REF (mut i32) (i32.const 0))
  (global $retain-release/glo (mut i32) (i32.const 0))
  (global $retain-release/TARGET (mut i32) (i32.const 0))
  (global $~lib/argc (mut i32) (i32.const 0))
- (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0))
  (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 92))
  (export "memory" (memory $0))
  (export "returnRef" (func $retain-release/returnRef))
  (export "receiveRef" (func $retain-release/receiveRef))
- (export "receiveRefDrop" (func $retain-release/receiveRefDrop))
- (export "receiveRefRetain" (func $retain-release/receiveRefRetain))
+ (export "receiveRefDrop" (func $retain-release/receiveRef))
+ (export "receiveRefRetain" (func $retain-release/receiveRef))
  (export "takeRef" (func $retain-release/takeRef))
- (export "provideRef" (func $retain-release/provideRef))
+ (export "provideRef" (func $retain-release/receiveRef))
  (export "takeReturnRef" (func $retain-release/takeReturnRef))
- (export "provideReceiveRef" (func $retain-release/provideReceiveRef))
+ (export "provideReceiveRef" (func $retain-release/receiveRef))
  (export "newRef" (func $retain-release/newRef))
  (export "assignGlobal" (func $retain-release/assignGlobal))
  (export "assignField" (func $retain-release/assignField))
- (export "scopeBlock" (func $retain-release/scopeBlock))
- (export "scopeBlockToUninitialized" (func $retain-release/scopeBlockToUninitialized))
- (export "scopeBlockToInitialized" (func $retain-release/scopeBlockToInitialized))
- (export "scopeBlockToConditional" (func $retain-release/scopeBlockToConditional))
- (export "scopeTopLevelUninitialized" (func $retain-release/scopeTopLevelUninitialized))
- (export "scopeTopLevelInitialized" (func $retain-release/scopeTopLevelInitialized))
- (export "scopeTopLevelConditional" (func $retain-release/scopeTopLevelConditional))
- (export "scopeIf" (func $retain-release/scopeIf))
- (export "scopeIfElse" (func $retain-release/scopeIfElse))
- (export "scopeWhile" (func $retain-release/scopeWhile))
- (export "scopeDo" (func $retain-release/scopeDo))
- (export "scopeFor" (func $retain-release/scopeFor))
- (export "scopeBreak" (func $retain-release/scopeBreak))
- (export "scopeContinue" (func $retain-release/scopeContinue))
+ (export "scopeBlock" (func $retain-release/receiveRef))
+ (export "scopeBlockToUninitialized" (func $retain-release/receiveRef))
+ (export "scopeBlockToInitialized" (func $retain-release/receiveRef))
+ (export "scopeBlockToConditional" (func $retain-release/takeRef))
+ (export "scopeTopLevelUninitialized" (func $retain-release/receiveRef))
+ (export "scopeTopLevelInitialized" (func $retain-release/receiveRef))
+ (export "scopeTopLevelConditional" (func $retain-release/takeRef))
+ (export "scopeIf" (func $retain-release/takeRef))
+ (export "scopeIfElse" (func $retain-release/takeRef))
+ (export "scopeWhile" (func $retain-release/takeRef))
+ (export "scopeDo" (func $retain-release/takeRef))
+ (export "scopeFor" (func $retain-release/takeRef))
+ (export "scopeBreak" (func $retain-release/takeRef))
+ (export "scopeContinue" (func $retain-release/takeRef))
  (export "scopeThrow" (func $retain-release/scopeThrow))
  (export "scopeUnreachable" (func $retain-release/scopeUnreachable))
- (export "callInline" (func $retain-release/callInline))
- (export "provideRefInline" (func $retain-release/provideRefInline))
- (export "receiveRefInline" (func $retain-release/receiveRefInline))
- (export "receiveRefInlineDrop" (func $retain-release/receiveRefInlineDrop))
+ (export "callInline" (func $retain-release/receiveRef))
+ (export "provideRefInline" (func $retain-release/receiveRef))
+ (export "receiveRefInline" (func $retain-release/receiveRef))
+ (export "receiveRefInlineDrop" (func $retain-release/receiveRef))
  (export "provideRefIndirect" (func $retain-release/provideRefIndirect))
  (export "receiveRefIndirect" (func $retain-release/receiveRefIndirect))
- (export "receiveRefIndirectDrop" (func $retain-release/receiveRefIndirectDrop))
+ (export "receiveRefIndirectDrop" (func $retain-release/receiveRefIndirect))
  (start $start)
- (func $retain-release/Ref#constructor (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 17
-   call $~lib/rt/stub/__alloc
-   call $~lib/rt/stub/__retain
-   local.set $0
-  end
+ (func $retain-release/Ref#constructor (; 1 ;) (type $FUNCSIG$i) (result i32)
+  i32.const 0
+  i32.const 17
+  call $~lib/rt/stub/__alloc
+ )
+ (func $retain-release/returnRef (; 2 ;) (type $FUNCSIG$i) (result i32)
+  global.get $retain-release/REF
+ )
+ (func $retain-release/receiveRef (; 3 ;) (type $FUNCSIG$v)
+  nop
+ )
+ (func $retain-release/takeRef (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
+  nop
+ )
+ (func $retain-release/takeReturnRef (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
  )
- (func $retain-release/Target#constructor (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.eqz
-  if
-   i32.const 4
-   i32.const 18
-   call $~lib/rt/stub/__alloc
-   call $~lib/rt/stub/__retain
-   local.set $0
-  end
-  local.get $0
-  i32.const 0
-  i32.store
-  local.get $0
- )
- (func $start:retain-release (; 3 ;) (type $FUNCSIG$v)
-  i32.const 0
+ (func $retain-release/newRef (; 6 ;) (type $FUNCSIG$v)
   call $retain-release/Ref#constructor
-  global.set $retain-release/REF
-  i32.const 0
-  call $retain-release/Target#constructor
-  global.set $retain-release/TARGET
- )
- (func $retain-release/returnRef (; 4 ;) (type $FUNCSIG$i) (result i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
- )
- (func $retain-release/receiveRef (; 5 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  call $retain-release/returnRef
-  local.tee $0
-  i32.eqz
   drop
-  local.get $0
-  call $~lib/rt/stub/__release
  )
- (func $retain-release/receiveRefDrop (; 6 ;) (type $FUNCSIG$v)
-  call $retain-release/returnRef
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/receiveRefRetain (; 7 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  call $retain-release/returnRef
-  local.set $0
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/takeRef (; 8 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  call $~lib/rt/stub/__retain
-  drop
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/provideRef (; 9 ;) (type $FUNCSIG$v)
+ (func $retain-release/assignGlobal (; 7 ;) (type $FUNCSIG$v)
   global.get $retain-release/REF
-  call $retain-release/takeRef
- )
- (func $retain-release/takeReturnRef (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  call $~lib/rt/stub/__retain
-  drop
-  local.get $0
- )
- (func $retain-release/provideReceiveRef (; 11 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  global.get $retain-release/REF
-  call $retain-release/takeReturnRef
-  local.tee $0
-  i32.eqz
-  drop
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/newRef (; 12 ;) (type $FUNCSIG$v)
-  i32.const 0
-  call $retain-release/Ref#constructor
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/assignGlobal (; 13 ;) (type $FUNCSIG$v)
-  global.get $retain-release/REF
-  global.get $retain-release/glo
-  call $~lib/rt/stub/__retainRelease
   global.set $retain-release/glo
  )
- (func $retain-release/assignField (; 14 ;) (type $FUNCSIG$v)
+ (func $retain-release/assignField (; 8 ;) (type $FUNCSIG$v)
   (local $0 i32)
   global.get $retain-release/TARGET
   local.tee $0
-  global.get $retain-release/REF
-  local.get $0
   i32.load
-  call $~lib/rt/stub/__retainRelease
+  drop
+  local.get $0
+  global.get $retain-release/REF
   i32.store
  )
- (func $retain-release/scopeBlock (; 15 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $0
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeBlockToUninitialized (; 16 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  i32.const 0
-  local.set $0
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $1
-  local.get $1
-  local.get $0
-  call $~lib/rt/stub/__retainRelease
-  local.set $0
-  local.get $1
-  call $~lib/rt/stub/__release
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeBlockToInitialized (; 17 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $0
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $1
-  local.get $1
-  local.get $0
-  call $~lib/rt/stub/__retainRelease
-  local.set $0
-  local.get $1
-  call $~lib/rt/stub/__release
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeBlockToConditional (; 18 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  i32.const 0
-  local.set $1
+ (func $retain-release/scopeThrow (; 9 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   if
-   global.get $retain-release/REF
-   local.get $1
-   call $~lib/rt/stub/__retainRelease
-   local.set $1
-  end
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/stub/__retainRelease
-  local.set $1
-  local.get $2
-  call $~lib/rt/stub/__release
-  local.get $1
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeTopLevelUninitialized (; 19 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  i32.const 0
-  local.set $0
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeTopLevelInitialized (; 20 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $0
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeTopLevelConditional (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  i32.const 0
-  local.set $1
-  local.get $0
-  if
-   global.get $retain-release/REF
-   local.get $1
-   call $~lib/rt/stub/__retainRelease
-   local.set $1
-  end
-  local.get $1
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/scopeIf (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  if
-   global.get $retain-release/REF
-   call $~lib/rt/stub/__retain
-   local.set $1
-   local.get $1
-   call $~lib/rt/stub/__release
-  end
- )
- (func $retain-release/scopeIfElse (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  if
-   global.get $retain-release/REF
-   call $~lib/rt/stub/__retain
-   local.set $1
-   local.get $1
-   call $~lib/rt/stub/__release
-  else   
-   global.get $retain-release/REF
-   call $~lib/rt/stub/__retain
-   local.set $1
-   local.get $1
-   call $~lib/rt/stub/__release
-  end
- )
- (func $retain-release/scopeWhile (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  loop $continue|0
-   local.get $0
-   if
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    local.get $1
-    call $~lib/rt/stub/__release
-    br $continue|0
-   end
-  end
- )
- (func $retain-release/scopeDo (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  loop $continue|0
-   block
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    local.get $1
-    call $~lib/rt/stub/__release
-   end
-   local.get $0
-   br_if $continue|0
-  end
- )
- (func $retain-release/scopeFor (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  block $break|0
-   loop $repeat|0
-    local.get $0
-    i32.eqz
-    br_if $break|0
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    local.get $1
-    call $~lib/rt/stub/__release
-    br $repeat|0
-    unreachable
-   end
+   i32.const 24
+   i32.const 56
+   i32.const 313
+   i32.const 4
+   call $~lib/builtins/abort
    unreachable
   end
  )
- (func $retain-release/scopeBreak (; 27 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  block $break|0
-   loop $continue|0
-    local.get $0
-    if
-     global.get $retain-release/REF
-     call $~lib/rt/stub/__retain
-     local.set $1
-     local.get $1
-     call $~lib/rt/stub/__release
-     br $break|0
-    end
-   end
-  end
- )
- (func $retain-release/scopeContinue (; 28 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  loop $continue|0
-   local.get $0
-   if
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    local.get $1
-    call $~lib/rt/stub/__release
-    br $continue|0
-   end
-  end
- )
- (func $retain-release/scopeThrow (; 29 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  loop $continue|0
-   local.get $0
-   if
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    local.get $1
-    call $~lib/rt/stub/__release
-    block
-     i32.const 24
-     i32.const 56
-     i32.const 310
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-  end
- )
- (func $retain-release/scopeUnreachable (; 30 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  loop $continue|0
-   local.get $0
-   if
-    global.get $retain-release/REF
-    call $~lib/rt/stub/__retain
-    local.set $1
-    unreachable
-    local.get $1
-    call $~lib/rt/stub/__release
-    br $continue|0
-   end
-  end
- )
- (func $retain-release/callInline (; 31 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $0
+ (func $retain-release/scopeUnreachable (; 10 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/provideRefInline (; 32 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  global.get $retain-release/REF
-  call $~lib/rt/stub/__retain
-  local.set $0
-  local.get $0
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/receiveRefInline (; 33 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  block $retain-release/returnRefInline|inlined.0 (result i32)
-   global.get $retain-release/REF
-   call $~lib/rt/stub/__retain
+  if
+   unreachable
   end
-  local.tee $0
-  i32.eqz
-  drop
-  local.get $0
-  call $~lib/rt/stub/__release
  )
- (func $retain-release/receiveRefInlineDrop (; 34 ;) (type $FUNCSIG$v)
-  block $retain-release/returnRefInline|inlined.1 (result i32)
-   global.get $retain-release/REF
-   call $~lib/rt/stub/__retain
-  end
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/provideRefIndirect (; 35 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $retain-release/provideRefIndirect (; 11 ;) (type $FUNCSIG$vi) (param $0 i32)
   i32.const 1
   global.set $~lib/argc
   global.get $retain-release/REF
   local.get $0
   call_indirect (type $FUNCSIG$vi)
  )
- (func $retain-release/receiveRefIndirect (; 36 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  block (result i32)
-   i32.const 0
-   global.set $~lib/argc
-   local.get $0
-   call_indirect (type $FUNCSIG$i)
-   local.tee $1
-  end
-  i32.eqz
-  drop
-  local.get $1
-  call $~lib/rt/stub/__release
- )
- (func $retain-release/receiveRefIndirectDrop (; 37 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $retain-release/receiveRefIndirect (; 12 ;) (type $FUNCSIG$vi) (param $0 i32)
   i32.const 0
   global.set $~lib/argc
   local.get $0
   call_indirect (type $FUNCSIG$i)
-  call $~lib/rt/stub/__release
+  drop
  )
- (func $start (; 38 ;) (type $FUNCSIG$v)
-  call $start:retain-release
+ (func $start (; 13 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  call $retain-release/Ref#constructor
+  global.set $retain-release/REF
+  i32.const 4
+  i32.const 18
+  call $~lib/rt/stub/__alloc
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  global.set $retain-release/TARGET
  )
- (func $~lib/rt/stub/__alloc (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/stub/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   i32.const 1073741808
   i32.gt_u
@@ -482,59 +145,45 @@
   global.get $~lib/rt/stub/offset
   i32.const 16
   i32.add
-  local.set $2
-  local.get $2
-  local.get $0
   local.tee $3
+  local.get $0
+  i32.const 1
+  local.get $0
   i32.const 1
-  local.tee $4
-  local.get $3
-  local.get $4
   i32.gt_u
   select
   i32.add
   i32.const 15
   i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
+  i32.const -16
   i32.and
-  local.set $5
+  local.tee $2
   current_memory
-  local.set $6
-  local.get $5
-  local.get $6
+  local.tee $4
   i32.const 16
   i32.shl
   i32.gt_u
   if
-   local.get $5
+   local.get $4
    local.get $2
+   local.get $3
    i32.sub
    i32.const 65535
    i32.add
-   i32.const 65535
-   i32.const -1
-   i32.xor
+   i32.const -65536
    i32.and
    i32.const 16
    i32.shr_u
-   local.set $3
-   local.get $6
-   local.tee $4
-   local.get $3
-   local.tee $7
+   local.tee $5
    local.get $4
-   local.get $7
+   local.get $5
    i32.gt_s
    select
-   local.set $4
-   local.get $4
    grow_memory
    i32.const 0
    i32.lt_s
    if
-    local.get $3
+    local.get $5
     grow_memory
     i32.const 0
     i32.lt_s
@@ -543,29 +192,17 @@
     end
    end
   end
-  local.get $5
-  global.set $~lib/rt/stub/offset
   local.get $2
+  global.set $~lib/rt/stub/offset
+  local.get $3
   i32.const 16
   i32.sub
-  local.set $8
-  local.get $8
+  local.tee $2
   local.get $1
   i32.store offset=8
-  local.get $8
+  local.get $2
   local.get $0
   i32.store offset=12
-  local.get $2
- )
- (func $~lib/rt/stub/__retain (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
- )
- (func $~lib/rt/stub/__retainRelease (; 41 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
- )
- (func $~lib/rt/stub/__release (; 42 ;) (type $FUNCSIG$vi) (param $0 i32)
-  nop
- )
- (func $null (; 43 ;) (type $FUNCSIG$v)
+  local.get $3
  )
 )
diff --git a/tests/compiler/retain-release.untouched.wat b/tests/compiler/retain-release.untouched.wat
index 82aea40b..c07d7eb9 100644
--- a/tests/compiler/retain-release.untouched.wat
+++ b/tests/compiler/retain-release.untouched.wat
@@ -17,7 +17,7 @@
  (global $~lib/argc (mut i32) (i32.const 0))
  (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0))
  (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 92))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 92))
  (export "memory" (memory $0))
  (export "returnRef" (func $retain-release/returnRef))
  (export "receiveRef" (func $retain-release/receiveRef))
@@ -374,7 +374,7 @@
     block
      i32.const 24
      i32.const 56
-     i32.const 310
+     i32.const 313
      i32.const 4
      call $~lib/builtins/abort
      unreachable
diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat
index cf7afd43..a51ddc5f 100644
--- a/tests/compiler/runtime-full.optimized.wat
+++ b/tests/compiler/runtime-full.optimized.wat
@@ -1,52 +1,60 @@
 (module
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 56) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 168) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 280) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 56) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 416))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
- (export "__realloc" (func $~lib/rt/tlsf/__realloc))
- (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (func $~lib/rt/tlsf/removeBlock (; 1 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.ne
+  if
+   local.get $0
+   local.get $1
+   i32.const -1879048193
+   i32.and
+   i32.const 268435456
+   i32.or
+   i32.store offset=4
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 2
+   call $~lib/rt/__visit_members
+  end
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
@@ -58,17 +66,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
   local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $3
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -83,44 +88,37 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $5
+   local.set $2
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $3
+   local.get $2
    i32.clz
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
+   local.set $2
+   local.get $3
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $4
   end
-  local.get $4
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $5
+   local.get $2
    i32.const 16
    i32.lt_u
   else   
@@ -136,111 +134,76 @@
    unreachable
   end
   local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
   i32.load offset=20
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
   if
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $4
    i32.store offset=20
   end
-  local.get $7
+  local.get $4
   if
-   local.get $7
-   local.get $6
+   local.get $4
+   local.get $5
    i32.store offset=16
   end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
   local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
+  i32.eq
+  if
+   local.get $3
    i32.const 4
    i32.shl
-   local.get $8
+   local.get $2
    i32.add
    i32.const 2
    i32.shl
+   local.get $0
    i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
+   local.get $4
+   i32.store offset=96
+   local.get $4
    i32.eqz
    if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
     i32.eqz
     if
      local.get $0
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -250,19 +213,13 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.eqz
   if
@@ -275,8 +232,7 @@
   end
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $3
   i32.const 1
   i32.and
   i32.eqz
@@ -288,43 +244,30 @@
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
   i32.load
-  local.set $5
-  local.get $5
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
   i32.const 1
   i32.and
   if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
    local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.tee $2
    i32.const 1073741808
    i32.lt_u
    if
@@ -332,50 +275,37 @@
     local.get $4
     call $~lib/rt/tlsf/removeBlock
     local.get $1
-    local.get $2
+    local.get $3
     i32.const 3
     i32.and
-    local.get $3
+    local.get $2
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
     i32.load
     local.set $5
    end
   end
-  local.get $2
+  local.get $3
   i32.const 2
   i32.and
   if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
+   local.get $1
+   i32.const 4
+   i32.sub
    i32.load
-   local.set $6
-   local.get $6
+   local.tee $2
+   i32.load
+   local.tee $6
    i32.const 1
    i32.and
    i32.eqz
@@ -388,54 +318,48 @@
     unreachable
    end
    local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
+   i32.const -4
    i32.and
    i32.const 16
    i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
+   local.get $3
+   i32.const -4
    i32.and
    i32.add
-   local.set $7
-   local.get $7
+   local.tee $7
    i32.const 1073741808
    i32.lt_u
-   if
+   if (result i32)
     local.get $0
-    local.get $3
+    local.get $2
     call $~lib/rt/tlsf/removeBlock
-    local.get $3
+    local.get $2
     local.get $6
     i32.const 3
     i32.and
     local.get $7
     i32.or
-    local.tee $2
+    local.tee $3
     i32.store
-    local.get $3
-    local.set $1
+    local.get $2
+   else    
+    local.get $1
    end
+   local.set $1
   end
   local.get $4
   local.get $5
   i32.const 2
   i32.or
   i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
+  local.get $3
+  i32.const -4
   i32.and
-  local.set $8
-  local.get $8
+  local.tee $2
   i32.const 16
   i32.ge_u
   if (result i32)
-   local.get $8
+   local.get $2
    i32.const 1073741808
    i32.lt_u
   else   
@@ -450,14 +374,13 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $4
   local.get $1
   i32.const 16
   i32.add
-  local.get $8
+  local.get $2
   i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -471,44 +394,37 @@
   i32.sub
   local.get $1
   i32.store
-  local.get $8
+  local.get $2
   i32.const 256
   i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
+  if (result i32)
+   local.get $2
    i32.const 4
    i32.shr_u
-   local.set $10
+   local.set $4
+   i32.const 0
   else   
+   local.get $2
    i32.const 31
-   local.get $8
+   local.get $2
    i32.clz
    i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
+   local.tee $2
    i32.const 4
    i32.sub
    i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
+   i32.const 16
    i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
+   local.set $4
+   local.get $2
+   i32.const 7
    i32.sub
-   i32.sub
-   local.set $9
   end
-  local.get $9
+  local.tee $3
   i32.const 23
   i32.lt_u
   if (result i32)
-   local.get $10
+   local.get $4
    i32.const 16
    i32.lt_u
   else   
@@ -523,1247 +439,72 @@
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
   local.get $1
   i32.const 0
   i32.store offset=16
   local.get $1
-  local.get $11
+  local.get $2
   i32.store offset=20
-  local.get $11
+  local.get $2
   if
-   local.get $11
+   local.get $2
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
+  local.get $3
+  i32.const 4
   i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 3 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
   local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
+  i32.add
   i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
+  i32.shl
+  local.get $0
+  i32.add
   local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
   i32.const 1
+  local.get $3
+  i32.shl
   i32.or
-  local.get $5
+  i32.store
+  local.get $3
   i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
+  i32.shl
+  local.get $0
   i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
+  local.get $3
   i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 4 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
   i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
   local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 72
-   i32.const 24
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
   i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 6 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 24
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
-      if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       br $continue|2
-      end
-     end
-    end
-   else    
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
-      local.get $3
-      if
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $continue|5
-      end
-     end
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/reallocateBlock (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
   i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
   i32.const 1
+  local.get $4
+  i32.shl
   i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $8
+  i32.store offset=4
  )
- (func $~lib/rt/tlsf/__realloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -1781,359 +522,24 @@
   local.get $1
   call $~lib/rt/tlsf/insertBlock
  )
- (func $~lib/rt/tlsf/__free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 184
-   i32.const 240
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
-  local.tee $2
-  i32.const 64
-  i32.const 2
-  i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
-  i32.gt_u
-  select
-  local.set $4
-  local.get $4
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.and
-  local.set $2
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-   if
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
-   end
-  else   
-   local.get $2
-   i32.const 0
-   i32.gt_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   i32.eqz
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-    local.get $1
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-   end
-  end
- )
- (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $~lib/rt/purerc/markGray (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.ne
-  if
-   local.get $0
-   local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 268435456
-   i32.or
-   i32.store offset=4
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 2
-   call $~lib/builtins/__visit_members
-  end
- )
- (func $~lib/rt/purerc/scanBlack (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -2146,13 +552,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -2161,16 +565,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -2188,49 +591,42 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__collect (; 27 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $5
+  local.tee $2
+  local.set $3
+  global.get $~lib/rt/pure/CUR
   local.set $0
-  local.get $0
-  local.set $1
-  block $break|0
-   block
-    local.get $1
-    local.set $2
-    global.get $~lib/rt/purerc/CUR
-    local.set $3
-   end
-   loop $repeat|0
-    local.get $2
+  loop $repeat|0
+   block $break|0
     local.get $3
-    i32.lt_u
-    i32.eqz
+    local.get $0
+    i32.ge_u
     br_if $break|0
-    local.get $2
+    local.get $3
     i32.load
-    local.set $4
-    local.get $4
+    local.tee $4
     i32.load offset=4
-    local.set $5
-    local.get $5
+    local.tee $1
     i32.const 1879048192
     i32.and
     i32.const 805306368
     i32.eq
     if (result i32)
-     local.get $5
+     local.get $1
      i32.const 268435455
      i32.and
      i32.const 0
@@ -2240,122 +636,100 @@
     end
     if
      local.get $4
-     call $~lib/rt/purerc/markGray
-     local.get $1
+     call $~lib/rt/pure/markGray
+     local.get $2
      local.get $4
      i32.store
-     local.get $1
+     local.get $2
      i32.const 4
      i32.add
-     local.set $1
+     local.set $2
     else     
-     local.get $5
+     i32.const 0
+     local.get $1
+     i32.const 268435455
+     i32.and
+     i32.eqz
+     local.get $1
      i32.const 1879048192
      i32.and
-     i32.const 0
-     i32.eq
-     if (result i32)
-      local.get $5
-      i32.const 268435455
-      i32.and
-      i32.eqz
-     else      
-      i32.const 0
-     end
+     select
      if
       global.get $~lib/rt/tlsf/ROOT
       local.get $4
       call $~lib/rt/tlsf/freeBlock
      else      
       local.get $4
-      local.get $5
-      i32.const -2147483648
-      i32.const -1
-      i32.xor
+      local.get $1
+      i32.const 2147483647
       i32.and
       i32.store offset=4
      end
     end
-    local.get $2
+    local.get $3
     i32.const 4
     i32.add
-    local.set $2
+    local.set $3
     br $repeat|0
-    unreachable
    end
-   unreachable
   end
-  local.get $1
-  global.set $~lib/rt/purerc/CUR
-  block $break|1
-   local.get $0
-   local.set $5
-   loop $repeat|1
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
+  local.get $2
+  global.set $~lib/rt/pure/CUR
+  local.get $5
+  local.set $0
+  loop $repeat|1
+   block $break|1
+    local.get $0
+    local.get $2
+    i32.ge_u
     br_if $break|1
-    local.get $5
+    local.get $0
     i32.load
-    call $~lib/rt/purerc/scan
-    local.get $5
+    call $~lib/rt/pure/scan
+    local.get $0
     i32.const 4
     i32.add
-    local.set $5
+    local.set $0
     br $repeat|1
-    unreachable
    end
-   unreachable
   end
-  block $break|2
-   local.get $0
-   local.set $5
-   loop $repeat|2
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
+  local.get $5
+  local.set $0
+  loop $repeat|2
+   block $break|2
+    local.get $0
+    local.get $2
+    i32.ge_u
     br_if $break|2
-    local.get $5
+    local.get $0
     i32.load
-    local.set $4
-    local.get $4
-    local.get $4
+    local.tee $1
+    local.get $1
     i32.load offset=4
-    i32.const -2147483648
-    i32.const -1
-    i32.xor
+    i32.const 2147483647
     i32.and
     i32.store offset=4
-    local.get $4
-    call $~lib/rt/purerc/collectWhite
-    local.get $5
+    local.get $1
+    call $~lib/rt/pure/collectWhite
+    local.get $0
     i32.const 4
     i32.add
-    local.set $5
+    local.set $0
     br $repeat|2
-    unreachable
    end
-   unreachable
   end
-  local.get $0
-  global.set $~lib/rt/purerc/CUR
+  local.get $5
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/common/__instanceof (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=8
-  local.set $2
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $3
-  local.get $2
+  local.tee $0
   if (result i32)
-   local.get $2
-   local.get $3
+   local.get $0
+   i32.const 256
    i32.load
    i32.le_u
   else   
@@ -2363,30 +737,369 @@
   end
   if
    loop $continue|0
-    local.get $2
+    local.get $0
     local.get $1
     i32.eq
     if
      i32.const 1
      return
     end
-    local.get $3
-    local.get $2
-    i32.const 8
-    i32.mul
+    local.get $0
+    i32.const 3
+    i32.shl
+    i32.const 256
     i32.add
     i32.load offset=4
-    local.tee $2
+    local.tee $0
     br_if $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/rt/purerc/__visit (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  if (result i32)
+   local.get $0
+   i32.const 256
+   i32.load
+   i32.gt_u
+  else   
+   i32.const 1
+  end
+  if
+   i32.const 72
+   i32.const 128
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 3
+  i32.shl
+  i32.const 256
+  i32.add
+  i32.load
+ )
+ (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  block $~lib/util/memory/memmove|inlined.0
+   local.get $2
+   local.set $3
+   local.get $0
+   local.get $1
+   i32.eq
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
+   i32.lt_u
+   if
+    local.get $1
+    i32.const 7
+    i32.and
+    local.get $0
+    i32.const 7
+    i32.and
+    i32.eq
+    if
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
+      if
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $3
+       i32.const 1
+       i32.sub
+       local.set $3
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
+      end
+     end
+    end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
+   else    
+    local.get $1
+    i32.const 7
+    i32.and
+    local.get $0
+    i32.const 7
+    i32.and
+    i32.eq
+    if
+     loop $continue|3
+      local.get $0
+      local.get $3
+      i32.add
+      i32.const 7
+      i32.and
+      if
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
+       local.get $3
+       i32.const 1
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i32.load8_u
+       i32.store8
+       br $continue|3
+      end
+     end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $2
+  i32.sub
+  local.tee $1
+  i32.const 1
+  i32.shl
+  local.tee $0
+  i32.const 256
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 256
+  i32.gt_u
+  select
+  local.tee $3
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.tee $0
+  local.get $2
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  i32.const 268435455
+  i32.and
+  local.set $1
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $2
+   i32.const -2147483648
+   i32.and
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   end
+  else   
+   local.get $1
+   i32.const 0
+   i32.le_u
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   if
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
+    i32.or
+    i32.store offset=4
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/__visit (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.const 392
   i32.lt_u
   if
    return
@@ -2394,205 +1107,673 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 128
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 168
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 128
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 168
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
+    end
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
+   end
+   i32.const 0
+   i32.const 168
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/__visit_members (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $switch$1$case$16
+   block $switch$1$case$3
+    block $switch$1$default
+     local.get $0
+     i32.const 8
+     i32.sub
+     i32.load
+     i32.const 1
+     i32.sub
+     br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default
     end
     unreachable
    end
+   return
+  end
+  local.get $0
+  i32.load
+  local.tee $0
+  if
+   local.get $0
+   local.get $1
+   call $~lib/rt/pure/__visit
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
    i32.const 0
-   i32.eqz
+   i32.const 24
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
    if
     i32.const 0
-    i32.const 128
-    i32.const 96
     i32.const 24
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 406
+    i32.const 4
     call $~lib/builtins/abort
     unreachable
    end
   end
- )
- (func $~lib/builtins/__visit_members (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
   end
-  block $switch$1$leave
-   block $switch$1$case$16
-    block $switch$1$case$3
-     block $switch$1$default
-      local.get $0
-      i32.const 8
-      i32.sub
-      i32.load
-      br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$default
-     end
-     block
-      block
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      i32.load
-      local.tee $2
-      if
-       local.get $2
-       local.get $1
-       call $~lib/rt/purerc/__visit
-      end
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 18 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
    unreachable
   end
+  i32.const 400
+  i32.const 0
+  i32.store
+  i32.const 1968
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 400
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 400
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 400
+  i32.const 1984
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 400
+  global.set $~lib/rt/tlsf/ROOT
  )
- (func $null (; 31 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/prepareSize (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 24
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 24
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 25 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat
index cf7afd43..a8c3c97d 100644
--- a/tests/compiler/runtime-full.untouched.wat
+++ b/tests/compiler/runtime-full.untouched.wat
@@ -1,38 +1,61 @@
 (module
- (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$v (func))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 8) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 56) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 112) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 168) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 224) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 280) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 56) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 280))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 416))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 256))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 392))
  (export "memory" (memory $0))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
- (export "__realloc" (func $~lib/rt/tlsf/__realloc))
- (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (func $~lib/rt/tlsf/removeBlock (; 1 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/rt/pure/markGray (; 1 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.ne
+  if
+   local.get $0
+   local.get $1
+   i32.const 1879048192
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 268435456
+   i32.or
+   i32.store offset=4
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 2
+   call $~lib/rt/__visit_members
+  end
+ )
+ (func $~lib/rt/tlsf/removeBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -174,7 +197,7 @@
   end
   i32.eq
   if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
+   block $~lib/rt/tlsf/SETHEAD|inlined.0
     local.get $0
     local.set $11
     local.get $4
@@ -211,7 +234,7 @@
      i32.load offset=4
     end
     local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
+    block $~lib/rt/tlsf/SETSL|inlined.0
      local.get $0
      local.set $11
      local.get $4
@@ -250,7 +273,7 @@
    end
   end
  )
- (func $~lib/rt/tlsf/insertBlock (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -554,7 +577,7 @@
    local.get $1
    i32.store offset=16
   end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
+  block $~lib/rt/tlsf/SETHEAD|inlined.1
    local.get $0
    local.set $12
    local.get $9
@@ -583,7 +606,7 @@
   i32.shl
   i32.or
   i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
+  block $~lib/rt/tlsf/SETSL|inlined.1
    local.get $0
    local.set $3
    local.get $9
@@ -614,766 +637,332 @@
    i32.store offset=4
   end
  )
- (func $~lib/rt/tlsf/addMemory (; 3 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
   local.get $1
+  i32.load
+  local.set $2
   local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
+  i32.const 1
+  i32.and
+  i32.eqz
   i32.eqz
   if
    i32.const 0
    i32.const 24
-   i32.const 384
-   i32.const 4
+   i32.const 530
+   i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
+  local.get $1
   local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
   i32.const 1
   i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
   i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
   local.get $0
-  local.get $8
+  local.get $1
   call $~lib/rt/tlsf/insertBlock
-  i32.const 1
  )
- (func $~lib/rt/tlsf/initializeRoot (; 4 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/scanBlack (; 5 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  local.get $0
+  i32.load offset=4
+  i32.const 1879048192
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 0
+  i32.or
+  i32.store offset=4
+  local.get $0
+  i32.const 16
+  i32.add
+  i32.const 4
+  call $~lib/rt/__visit_members
+ )
+ (func $~lib/rt/pure/scan (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 268435456
+  i32.eq
+  if
+   local.get $1
+   i32.const 268435455
+   i32.and
+   i32.const 0
+   i32.gt_u
+   if
+    local.get $0
+    call $~lib/rt/pure/scanBlack
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1879048192
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.const 536870912
+    i32.or
+    i32.store offset=4
+    local.get $0
+    i32.const 16
+    i32.add
+    i32.const 3
+    call $~lib/rt/__visit_members
+   end
+  end
+ )
+ (func $~lib/rt/pure/collectWhite (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 1879048192
+  i32.and
+  i32.const 536870912
+  i32.eq
+  if (result i32)
+   local.get $1
+   i32.const -2147483648
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 5
+   call $~lib/rt/__visit_members
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/__collect (; 8 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  current_memory
+  local.get $0
   local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
   block $break|0
-   i32.const 0
-   local.set $4
+   block
+    local.get $1
+    local.set $2
+    global.get $~lib/rt/pure/CUR
+    local.set $3
+   end
    loop $repeat|0
-    local.get $4
-    i32.const 23
+    local.get $2
+    local.get $3
     i32.lt_u
     i32.eqz
     br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
+    local.get $2
+    i32.load
     local.set $4
+    local.get $4
+    i32.load offset=4
+    local.set $5
+    local.get $5
+    i32.const 1879048192
+    i32.and
+    i32.const 805306368
+    i32.eq
+    if (result i32)
+     local.get $5
+     i32.const 268435455
+     i32.and
+     i32.const 0
+     i32.gt_u
+    else     
+     i32.const 0
+    end
+    if
+     local.get $4
+     call $~lib/rt/pure/markGray
+     local.get $1
+     local.get $4
+     i32.store
+     local.get $1
+     i32.const 4
+     i32.add
+     local.set $1
+    else     
+     local.get $5
+     i32.const 1879048192
+     i32.and
+     i32.const 0
+     i32.eq
+     if (result i32)
+      local.get $5
+      i32.const 268435455
+      i32.and
+      i32.eqz
+     else      
+      i32.const 0
+     end
+     if
+      global.get $~lib/rt/tlsf/ROOT
+      local.get $4
+      call $~lib/rt/tlsf/freeBlock
+     else      
+      local.get $4
+      local.get $5
+      i32.const -2147483648
+      i32.const -1
+      i32.xor
+      i32.and
+      i32.store offset=4
+     end
+    end
+    local.get $2
+    i32.const 4
+    i32.add
+    local.set $2
     br $repeat|0
     unreachable
    end
    unreachable
   end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 72
-   i32.const 24
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
   local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 6 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+  global.set $~lib/rt/pure/CUR
+  block $break|1
    local.get $0
    local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
+   loop $repeat|1
+    local.get $5
+    local.get $1
+    i32.lt_u
     i32.eqz
-    if
-     i32.const 0
-     i32.const 24
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
+    br_if $break|1
+    local.get $5
+    i32.load
+    call $~lib/rt/pure/scan
     local.get $5
     i32.const 4
-    i32.shl
-    local.get $4
     i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
+    local.set $5
+    br $repeat|1
     unreachable
    end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
+  block $break|2
+   local.get $0
    local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
+   loop $repeat|2
     local.get $5
-    i32.const 16
-    i32.add
+    local.get $1
+    i32.lt_u
+    i32.eqz
+    br_if $break|2
     local.get $5
     i32.load
-    i32.const 3
+    local.set $4
+    local.get $4
+    local.get $4
+    i32.load offset=4
+    i32.const -2147483648
     i32.const -1
     i32.xor
     i32.and
+    i32.store offset=4
+    local.get $4
+    call $~lib/rt/pure/collectWhite
+    local.get $5
+    i32.const 4
     i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
     local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
+    br $repeat|2
     unreachable
    end
+   unreachable
   end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
+  local.get $0
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/__instanceof (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=8
+  local.set $2
+  global.get $~lib/rt/RTTI_BASE
+  local.set $3
   local.get $2
-  i32.ge_u
-  i32.eqz
-  if
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.load
+   i32.le_u
+  else   
    i32.const 0
-   i32.const 24
-   i32.const 478
-   i32.const 13
+  end
+  if
+   loop $continue|0
+    local.get $2
+    local.get $1
+    i32.eq
+    if
+     i32.const 1
+     return
+    end
+    local.get $3
+    local.get $2
+    i32.const 8
+    i32.mul
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    br_if $continue|0
+   end
+  end
+  i32.const 0
+ )
+ (func $~lib/rt/__typeinfo (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  global.get $~lib/rt/RTTI_BASE
+  local.set $1
+  local.get $0
+  i32.eqz
+  if (result i32)
+   i32.const 1
+  else   
+   local.get $0
+   local.get $1
+   i32.load
+   i32.gt_u
+  end
+  if
+   i32.const 72
+   i32.const 128
+   i32.const 23
+   i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
   local.get $1
-  i32.store offset=12
   local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
+  i32.const 8
+  i32.mul
   i32.add
+  i32.load
  )
  (func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
@@ -1581,341 +1170,16 @@
    end
   end
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $8
- )
- (func $~lib/rt/tlsf/__realloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/rt/tlsf/freeBlock (; 14 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
- )
- (func $~lib/rt/tlsf/__free (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/increment (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__typeinfo (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 184
-   i32.const 240
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 19 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 12 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -1941,26 +1205,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 20 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -1969,9 +1233,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 21 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1989,7 +1253,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 128
+   i32.const 168
    i32.const 114
    i32.const 13
    call $~lib/builtins/abort
@@ -2003,7 +1267,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -2028,7 +1292,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 128
+    i32.const 168
     i32.const 123
     i32.const 15
     call $~lib/builtins/abort
@@ -2036,7 +1300,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -2056,7 +1320,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -2073,320 +1337,11 @@
    end
   end
  )
- (func $~lib/rt/purerc/__release (; 22 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $~lib/rt/purerc/markGray (; 23 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.ne
-  if
-   local.get $0
-   local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 268435456
-   i32.or
-   i32.store offset=4
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 2
-   call $~lib/builtins/__visit_members
-  end
- )
- (func $~lib/rt/purerc/scanBlack (; 24 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  local.get $0
-  i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 0
-  i32.or
-  i32.store offset=4
-  local.get $0
-  i32.const 16
-  i32.add
-  i32.const 4
-  call $~lib/builtins/__visit_members
- )
- (func $~lib/rt/purerc/scan (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 268435456
-  i32.eq
-  if
-   local.get $1
-   i32.const 268435455
-   i32.and
-   i32.const 0
-   i32.gt_u
-   if
-    local.get $0
-    call $~lib/rt/purerc/scanBlack
-   else    
-    local.get $0
-    local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.const 536870912
-    i32.or
-    i32.store offset=4
-    local.get $0
-    i32.const 16
-    i32.add
-    i32.const 3
-    call $~lib/builtins/__visit_members
-   end
-  end
- )
- (func $~lib/rt/purerc/collectWhite (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 1879048192
-  i32.and
-  i32.const 536870912
-  i32.eq
-  if (result i32)
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 5
-   call $~lib/builtins/__visit_members
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/rt/purerc/__collect (; 27 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  local.get $0
-  local.set $1
-  block $break|0
-   block
-    local.get $1
-    local.set $2
-    global.get $~lib/rt/purerc/CUR
-    local.set $3
-   end
-   loop $repeat|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    local.get $2
-    i32.load
-    local.set $4
-    local.get $4
-    i32.load offset=4
-    local.set $5
-    local.get $5
-    i32.const 1879048192
-    i32.and
-    i32.const 805306368
-    i32.eq
-    if (result i32)
-     local.get $5
-     i32.const 268435455
-     i32.and
-     i32.const 0
-     i32.gt_u
-    else     
-     i32.const 0
-    end
-    if
-     local.get $4
-     call $~lib/rt/purerc/markGray
-     local.get $1
-     local.get $4
-     i32.store
-     local.get $1
-     i32.const 4
-     i32.add
-     local.set $1
-    else     
-     local.get $5
-     i32.const 1879048192
-     i32.and
-     i32.const 0
-     i32.eq
-     if (result i32)
-      local.get $5
-      i32.const 268435455
-      i32.and
-      i32.eqz
-     else      
-      i32.const 0
-     end
-     if
-      global.get $~lib/rt/tlsf/ROOT
-      local.get $4
-      call $~lib/rt/tlsf/freeBlock
-     else      
-      local.get $4
-      local.get $5
-      i32.const -2147483648
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.store offset=4
-     end
-    end
-    local.get $2
-    i32.const 4
-    i32.add
-    local.set $2
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $1
-  global.set $~lib/rt/purerc/CUR
-  block $break|1
-   local.get $0
-   local.set $5
-   loop $repeat|1
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
-    br_if $break|1
-    local.get $5
-    i32.load
-    call $~lib/rt/purerc/scan
-    local.get $5
-    i32.const 4
-    i32.add
-    local.set $5
-    br $repeat|1
-    unreachable
-   end
-   unreachable
-  end
-  block $break|2
-   local.get $0
-   local.set $5
-   loop $repeat|2
-    local.get $5
-    local.get $1
-    i32.lt_u
-    i32.eqz
-    br_if $break|2
-    local.get $5
-    i32.load
-    local.set $4
-    local.get $4
-    local.get $4
-    i32.load offset=4
-    i32.const -2147483648
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.store offset=4
-    local.get $4
-    call $~lib/rt/purerc/collectWhite
-    local.get $5
-    i32.const 4
-    i32.add
-    local.set $5
-    br $repeat|2
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/common/__instanceof (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/pure/__visit (; 15 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=8
-  local.set $2
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $3
-  local.get $2
-  if (result i32)
-   local.get $2
-   local.get $3
-   i32.load
-   i32.le_u
-  else   
-   i32.const 0
-  end
-  if
-   loop $continue|0
-    local.get $2
-    local.get $1
-    i32.eq
-    if
-     i32.const 1
-     return
-    end
-    local.get $3
-    local.get $2
-    i32.const 8
-    i32.mul
-    i32.add
-    i32.load offset=4
-    local.tee $2
-    br_if $continue|0
-   end
-  end
-  i32.const 0
- )
- (func $~lib/rt/purerc/__visit (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -2428,7 +1383,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -2444,7 +1399,7 @@
         i32.eqz
         if
          i32.const 0
-         i32.const 128
+         i32.const 168
          i32.const 74
          i32.const 17
          call $~lib/builtins/abort
@@ -2457,7 +1412,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -2465,7 +1420,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -2491,7 +1446,7 @@
       i32.eqz
       if
        i32.const 0
-       i32.const 128
+       i32.const 168
        i32.const 85
        i32.const 6
        call $~lib/builtins/abort
@@ -2509,7 +1464,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -2518,7 +1473,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -2528,7 +1483,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 128
+    i32.const 168
     i32.const 96
     i32.const 24
     call $~lib/builtins/abort
@@ -2536,7 +1491,7 @@
    end
   end
  )
- (func $~lib/builtins/__visit_members (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -2579,7 +1534,7 @@
       if
        local.get $2
        local.get $1
-       call $~lib/rt/purerc/__visit
+       call $~lib/rt/pure/__visit
       end
       return
       unreachable
@@ -2593,6 +1548,767 @@
    unreachable
   end
  )
- (func $null (; 31 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/tlsf/addMemory (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 18 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 24
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 24
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 24
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 24
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
+ (func $null (; 25 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/runtime-stub.optimized.wat b/tests/compiler/runtime-stub.optimized.wat
index a386e913..33e10f0e 100644
--- a/tests/compiler/runtime-stub.optimized.wat
+++ b/tests/compiler/runtime-stub.optimized.wat
@@ -1,388 +1,25 @@
 (module
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$v (func))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 64) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 120) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
- (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0))
- (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 120))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 256))
+ (data (i32.const 8) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 64) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 104) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08")
  (export "memory" (memory $0))
- (export "__alloc" (func $~lib/rt/stub/__alloc))
- (export "__realloc" (func $~lib/rt/stub/__realloc))
- (export "__free" (func $~lib/rt/stub/__free))
- (export "__retain" (func $~lib/rt/stub/__retain))
- (export "__release" (func $~lib/rt/stub/__release))
- (export "__collect" (func $~lib/rt/stub/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (start $start)
- (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.gt_u
-  if
-   unreachable
-  end
-  global.get $~lib/rt/stub/offset
-  i32.const 16
-  i32.add
-  local.set $2
-  local.get $2
-  local.get $0
-  local.tee $3
-  i32.const 1
-  local.tee $4
-  local.get $3
-  local.get $4
-  i32.gt_u
-  select
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $5
-  current_memory
-  local.set $6
-  local.get $5
-  local.get $6
-  i32.const 16
-  i32.shl
-  i32.gt_u
-  if
-   local.get $5
-   local.get $2
-   i32.sub
-   i32.const 65535
-   i32.add
-   i32.const 65535
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.shr_u
-   local.set $3
-   local.get $6
-   local.tee $4
-   local.get $3
-   local.tee $7
-   local.get $4
-   local.get $7
-   i32.gt_s
-   select
-   local.set $4
-   local.get $4
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    local.get $3
-    grow_memory
-    i32.const 0
-    i32.lt_s
-    if
-     unreachable
-    end
-   end
-  end
-  local.get $5
-  global.set $~lib/rt/stub/offset
-  local.get $2
-  i32.const 16
-  i32.sub
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.store offset=8
-  local.get $8
-  local.get $0
-  i32.store offset=12
-  local.get $2
- )
- (func $~lib/memory/memory.copy (; 2 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
-      if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       br $continue|2
-      end
-     end
-    end
-   else    
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
-      local.get $3
-      if
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $continue|5
-      end
-     end
-    end
-   end
-  end
- )
- (func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.set $2
-  local.get $2
-  i32.load offset=12
-  local.set $3
-  local.get $1
-  local.get $3
-  i32.gt_u
-  if
-   local.get $1
-   local.get $2
-   i32.load offset=8
-   call $~lib/rt/stub/__alloc
-   local.set $4
-   local.get $4
-   local.get $0
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $4
-   local.set $0
-  else   
-   local.get $2
-   local.get $1
-   i32.store offset=12
-  end
-  local.get $0
- )
- (func $~lib/rt/stub/__free (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
-  nop
- )
- (func $~lib/rt/stub/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
- )
- (func $~lib/rt/stub/__release (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
-  nop
- )
- (func $~lib/rt/stub/__collect (; 7 ;) (type $FUNCSIG$v)
-  nop
- )
- (func $~lib/rt/common/__instanceof (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/rt/__instanceof (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=8
-  local.set $2
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $3
-  local.get $2
+  local.tee $0
   if (result i32)
-   local.get $2
-   local.get $3
+   local.get $0
+   i32.const 104
    i32.load
    i32.le_u
   else   
@@ -390,66 +27,51 @@
   end
   if
    loop $continue|0
-    local.get $2
+    local.get $0
     local.get $1
     i32.eq
     if
      i32.const 1
      return
     end
-    local.get $3
-    local.get $2
-    i32.const 8
-    i32.mul
+    local.get $0
+    i32.const 3
+    i32.shl
+    i32.const 104
     i32.add
     i32.load offset=4
-    local.tee $2
+    local.tee $0
     br_if $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 104
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
    i32.const 24
    i32.const 80
-   i32.const 55
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
+  i32.const 3
+  i32.shl
+  i32.const 104
   i32.add
   i32.load
  )
- (func $start (; 10 ;) (type $FUNCSIG$v)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  global.set $~lib/rt/stub/startOffset
-  global.get $~lib/rt/stub/startOffset
-  global.set $~lib/rt/stub/offset
- )
- (func $null (; 11 ;) (type $FUNCSIG$v)
+ (func $null (; 3 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/runtime-stub.untouched.wat b/tests/compiler/runtime-stub.untouched.wat
index a386e913..f5e419eb 100644
--- a/tests/compiler/runtime-stub.untouched.wat
+++ b/tests/compiler/runtime-stub.untouched.wat
@@ -1,375 +1,20 @@
 (module
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
- (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$v (func))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 8) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 64) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 120) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
+ (data (i32.const 64) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 104) "\10\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
- (global $~lib/rt/stub/startOffset (mut i32) (i32.const 0))
- (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 120))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 256))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 104))
  (export "memory" (memory $0))
- (export "__alloc" (func $~lib/rt/stub/__alloc))
- (export "__realloc" (func $~lib/rt/stub/__realloc))
- (export "__free" (func $~lib/rt/stub/__free))
- (export "__retain" (func $~lib/rt/stub/__retain))
- (export "__release" (func $~lib/rt/stub/__release))
- (export "__collect" (func $~lib/rt/stub/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (start $start)
- (func $~lib/rt/stub/__alloc (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.gt_u
-  if
-   unreachable
-  end
-  global.get $~lib/rt/stub/offset
-  i32.const 16
-  i32.add
-  local.set $2
-  local.get $2
-  local.get $0
-  local.tee $3
-  i32.const 1
-  local.tee $4
-  local.get $3
-  local.get $4
-  i32.gt_u
-  select
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $5
-  current_memory
-  local.set $6
-  local.get $5
-  local.get $6
-  i32.const 16
-  i32.shl
-  i32.gt_u
-  if
-   local.get $5
-   local.get $2
-   i32.sub
-   i32.const 65535
-   i32.add
-   i32.const 65535
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.shr_u
-   local.set $3
-   local.get $6
-   local.tee $4
-   local.get $3
-   local.tee $7
-   local.get $4
-   local.get $7
-   i32.gt_s
-   select
-   local.set $4
-   local.get $4
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    local.get $3
-    grow_memory
-    i32.const 0
-    i32.lt_s
-    if
-     unreachable
-    end
-   end
-  end
-  local.get $5
-  global.set $~lib/rt/stub/offset
-  local.get $2
-  i32.const 16
-  i32.sub
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.store offset=8
-  local.get $8
-  local.get $0
-  i32.store offset=12
-  local.get $2
- )
- (func $~lib/memory/memory.copy (; 2 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
-      if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       br $continue|2
-      end
-     end
-    end
-   else    
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
-      local.get $3
-      if
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $continue|5
-      end
-     end
-    end
-   end
-  end
- )
- (func $~lib/rt/stub/__realloc (; 3 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.set $2
-  local.get $2
-  i32.load offset=12
-  local.set $3
-  local.get $1
-  local.get $3
-  i32.gt_u
-  if
-   local.get $1
-   local.get $2
-   i32.load offset=8
-   call $~lib/rt/stub/__alloc
-   local.set $4
-   local.get $4
-   local.get $0
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $4
-   local.set $0
-  else   
-   local.get $2
-   local.get $1
-   i32.store offset=12
-  end
-  local.get $0
- )
- (func $~lib/rt/stub/__free (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
-  nop
- )
- (func $~lib/rt/stub/__retain (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
- )
- (func $~lib/rt/stub/__release (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
-  nop
- )
- (func $~lib/rt/stub/__collect (; 7 ;) (type $FUNCSIG$v)
-  nop
- )
- (func $~lib/rt/common/__instanceof (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/rt/__instanceof (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -377,7 +22,7 @@
   i32.sub
   i32.load offset=8
   local.set $2
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $3
   local.get $2
   if (result i32)
@@ -409,9 +54,9 @@
   end
   i32.const 0
  )
- (func $~lib/rt/common/__typeinfo (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -426,7 +71,7 @@
   if
    i32.const 24
    i32.const 80
-   i32.const 55
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -438,18 +83,6 @@
   i32.add
   i32.load
  )
- (func $start (; 10 ;) (type $FUNCSIG$v)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  global.set $~lib/rt/stub/startOffset
-  global.get $~lib/rt/stub/startOffset
-  global.set $~lib/rt/stub/offset
- )
- (func $null (; 11 ;) (type $FUNCSIG$v)
+ (func $null (; 3 ;) (type $FUNCSIG$v)
  )
 )
diff --git a/tests/compiler/simd.optimized.wat b/tests/compiler/simd.optimized.wat
index 7c5760a2..d8503c5c 100644
--- a/tests/compiler/simd.optimized.wat
+++ b/tests/compiler/simd.optimized.wat
@@ -1,7 +1,7 @@
 (module
  (type $FUNCSIG$v (func))
  (memory $0 1)
- (data (i32.const 8) "\0e\00\00\00\01\00\00\00\11\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s\00")
+ (data (i32.const 8) "\0e\00\00\00\01\00\00\00\11\00\00\00\0e\00\00\00s\00i\00m\00d\00.\00t\00s")
  (export "memory" (memory $0))
  (func $start (; 0 ;) (type $FUNCSIG$v)
   nop
diff --git a/tests/compiler/static-this.optimized.wat b/tests/compiler/static-this.optimized.wat
index 66ab3781..e0d93835 100644
--- a/tests/compiler/static-this.optimized.wat
+++ b/tests/compiler/static-this.optimized.wat
@@ -1,23 +1,16 @@
 (module
- (type $FUNCSIG$i (func (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
- (global $static-this/Foo.bar (mut i32) (i32.const 42))
+ (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00s\00t\00a\00t\00i\00c\00-\00t\00h\00i\00s\00.\00t\00s")
+ (global $static-this/Foo.bar i32 (i32.const 42))
  (export "memory" (memory $0))
  (start $start)
- (func $static-this/Foo.getBar (; 1 ;) (type $FUNCSIG$i) (result i32)
+ (func $start (; 1 ;) (type $FUNCSIG$v)
   global.get $static-this/Foo.bar
- )
- (func $start:static-this (; 2 ;) (type $FUNCSIG$v)
-  call $static-this/Foo.getBar
   i32.const 42
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -27,9 +20,7 @@
    unreachable
   end
  )
- (func $start (; 3 ;) (type $FUNCSIG$v)
-  call $start:static-this
- )
- (func $null (; 4 ;) (type $FUNCSIG$v)
+ (func $null (; 2 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat
index 3a939472..10cebb29 100644
--- a/tests/compiler/std/array.optimized.wat
+++ b/tests/compiler/std/array.optimized.wat
@@ -2,12 +2,10 @@
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
- (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$fiii (func (param i32 i32 i32) (result f32)))
  (type $FUNCSIG$fii (func (param i32 i32) (result f32)))
  (type $FUNCSIG$d (func (result f64)))
@@ -16,203 +14,204 @@
  (type $FUNCSIG$idd (func (param f64 f64) (result i32)))
  (type $FUNCSIG$dii (func (param i32 i32) (result f64)))
  (type $FUNCSIG$id (func (param f64) (result i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$iid (func (param i32 f64) (result i32)))
  (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $FUNCSIG$iiid (func (param i32 i32 f64) (result i32)))
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$viji (func (param i32 i64 i32)))
  (type $FUNCSIG$iiij (func (param i32 i32 i64) (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$i (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (import "Math" "random" (func $~lib/bindings/Math/random (result f64)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (memory $0 1)
  (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h")
  (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s")
- (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
- (data (i32.const 160) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
- (data (i32.const 216) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s")
- (data (i32.const 256) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c")
- (data (i32.const 280) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05")
- (data (i32.const 304) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s")
- (data (i32.const 360) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05")
- (data (i32.const 384) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
- (data (i32.const 440) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
- (data (i32.const 488) "\05\00\00\00\01\00\00\00\0f\00\00\00\05")
- (data (i32.const 512) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01")
- (data (i32.const 536) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
- (data (i32.const 560) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
- (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05")
- (data (i32.const 664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14")
- (data (i32.const 704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01")
- (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02")
- (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02")
- (data (i32.const 824) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y")
- (data (i32.const 876) "\01\00\00\00\0f")
- (data (i32.const 892) "\01\00\00\00\0f")
+ (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s")
+ (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c")
+ (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05")
+ (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05")
+ (data (i32.const 224) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
+ (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05")
+ (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01")
+ (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
+ (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
+ (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05")
+ (data (i32.const 504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14")
+ (data (i32.const 544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01")
+ (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02")
+ (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02")
+ (data (i32.const 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y")
+ (data (i32.const 716) "\01\00\00\00\0f")
+ (data (i32.const 732) "\01\00\00\00\0f")
+ (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05")
  (data (i32.const 904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05")
  (data (i32.const 984) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05")
+ (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1064) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05")
+ (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1144) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1224) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05")
  (data (i32.const 1304) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1384) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05")
+ (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05")
  (data (i32.const 1544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05")
  (data (i32.const 1624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05")
  (data (i32.const 1704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05")
- (data (i32.const 1784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05")
- (data (i32.const 1864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 1948) "\01\00\00\00\0f")
- (data (i32.const 1960) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2000) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2032) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
- (data (i32.const 2056) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2096) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04")
- (data (i32.const 2120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05")
- (data (i32.const 2152) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2192) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 2216) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2248) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2288) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05")
- (data (i32.const 2312) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04")
- (data (i32.const 2344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2384) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05")
- (data (i32.const 2408) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03")
- (data (i32.const 2440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04")
- (data (i32.const 2504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05")
- (data (i32.const 2536) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2576) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 2600) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2632) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2676) "\01\00\00\00\0f")
- (data (i32.const 2688) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2728) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2772) "\01\00\00\00\0f")
- (data (i32.const 2784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2868) "\01\00\00\00\0f")
- (data (i32.const 2880) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2920) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 2964) "\01\00\00\00\0f")
- (data (i32.const 2976) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 3016) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 3060) "\01\00\00\00\0f")
- (data (i32.const 3072) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
- (data (i32.const 3112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s")
- (data (i32.const 3152) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?")
- (data (i32.const 3344) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f")
- (data (i32.const 3392) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f")
- (data (i32.const 3440) "@\00\00\00\01\00\00\00\0f\00\00\00@")
- (data (i32.const 3462) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?")
- (data (i32.const 3502) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f")
- (data (i32.const 3520) "@\00\00\00\01\00\00\00\0f\00\00\00@")
- (data (i32.const 3542) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf")
- (data (i32.const 3574) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f")
- (data (i32.const 3600) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02")
- (data (i32.const 3640) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02")
- (data (i32.const 3680) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02")
- (data (i32.const 3720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff")
- (data (i32.const 3764) "\01\00\00\00\0f")
- (data (i32.const 3776) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 3800) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01")
- (data (i32.const 3824) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01")
- (data (i32.const 3856) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03")
- (data (i32.const 3888) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.")
- (data (i32.const 3944) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 3968) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
- (data (i32.const 3992) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y")
- (data (i32.const 4104) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s")
- (data (i32.const 4160) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a")
- (data (i32.const 4184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b")
- (data (i32.const 4208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b")
- (data (i32.const 4232) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a")
- (data (i32.const 4260) "\01\00\00\00\10")
- (data (i32.const 4272) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00P\10\00\00h\10\00\00P\10\00\00\80\10\00\00\98\10\00\00\b0\10")
- (data (i32.const 4320) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10")
- (data (i32.const 4368) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
- (data (i32.const 4416) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l")
- (data (i32.const 4440) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01")
- (data (i32.const 4464) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e")
- (data (i32.const 4488) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e")
- (data (i32.const 4520) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,")
- (data (i32.const 4544) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e")
- (data (i32.const 4584) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff")
- (data (i32.const 4616) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000")
- (data (i32.const 4640) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
- (data (i32.const 5056) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\000\12\00\000\12\00\00\90\01\00\00d")
- (data (i32.const 5088) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003")
- (data (i32.const 5120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03")
- (data (i32.const 5152) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-")
- (data (i32.const 5176) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80")
- (data (i32.const 5200) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_")
- (data (i32.const 5224) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008")
- (data (i32.const 5288) "0\00\00\00\01\00\00\00\0f\00\00\000")
- (data (i32.const 5318) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f")
- (data (i32.const 5352) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 ")
- (data (i32.const 5376) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000")
- (data (i32.const 5400) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N")
- (data (i32.const 5424) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
- (data (i32.const 5464) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
- (data (i32.const 5496) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
- (data (i32.const 6208) "\10\00\00\00\01\00\00\00\1e\00\00\00\10\00\00\00\88\15\00\00\88\15\00\00\b8\02\00\00W")
- (data (i32.const 6240) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
- (data (i32.const 6432) "\10\00\00\00\01\00\00\00\1f\00\00\00\10\00\00\00p\18\00\00p\18\00\00\ae\00\00\00W")
- (data (i32.const 6464) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
- (data (i32.const 6520) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00P\19\00\00P\19\00\00(\00\00\00\n")
- (data (i32.const 6552) "P\00\00\00\01\00\00\00\10\00\00\00P\00\00\000\00.\000\00,\00 \001\00.\000\00,\00 \00-\002\00.\000\00,\00 \00N\00a\00N\00,\00 \00-\00I\00n\00f\00i\00n\00i\00t\00y\00,\00 \00I\00n\00f\00i\00n\00i\00t\00y")
- (data (i32.const 6648) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001")
- (data (i32.const 6672) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\b0\10\00\00\08\1a")
- (data (i32.const 6704) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]")
- (data (i32.const 6752) "@\00\00\00\01\00\00\00\10\00\00\00@\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]")
- (data (i32.const 6836) "\01\00\00\00\0f")
- (data (i32.const 6848) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 6872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
- (data (i32.const 6896) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03")
- (data (i32.const 6928) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00,\002")
- (data (i32.const 6952) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003")
- (data (i32.const 6984) "\03\00\00\00\01\00\00\00\0f\00\00\00\03\00\00\00\01\ff")
- (data (i32.const 7008) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\00-\001\00,\000")
- (data (i32.const 7040) "\06\00\00\00\01\00\00\00\0f\00\00\00\06\00\00\00\01\00\ff\ff")
- (data (i32.const 7064) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000")
- (data (i32.const 7104) "\18\00\00\00\01\00\00\00\0f\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff")
- (data (i32.const 7144) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000")
- (data (i32.const 7208) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff")
- (data (i32.const 7248) "\ff\ff\ff\ff\ff\ff\ff\7f")
- (data (i32.const 7256) "T\00\00\00\01\00\00\00\10\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007")
- (data (i32.const 7360) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10")
- (data (i32.const 7408) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,")
- (data (i32.const 7456) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\002")
- (data (i32.const 7480) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\004")
- (data (i32.const 7504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\08\1a\00\000\1d\00\00\00\00\00\00H\1d")
- (data (i32.const 7536) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\002\00,\00,\004")
- (data (i32.const 7568) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
- (data (i32.const 7592) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04")
- (data (i32.const 7616) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004")
- (data (i32.const 7648) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\02")
- (data (i32.const 7672) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\03\04")
- (data (i32.const 7696) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
- (data (i32.const 7720) "\'\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\06\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e")
+ (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1788) "\01\00\00\00\0f")
+ (data (i32.const 1800) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1840) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
+ (data (i32.const 1896) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 1936) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04")
+ (data (i32.const 1960) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05")
+ (data (i32.const 1992) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2032) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 2056) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2088) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2128) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05")
+ (data (i32.const 2152) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04")
+ (data (i32.const 2184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2224) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05")
+ (data (i32.const 2248) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03")
+ (data (i32.const 2280) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2320) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04")
+ (data (i32.const 2344) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05")
+ (data (i32.const 2376) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2416) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 2440) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2472) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2516) "\01\00\00\00\0f")
+ (data (i32.const 2528) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2568) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2612) "\01\00\00\00\0f")
+ (data (i32.const 2624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2708) "\01\00\00\00\0f")
+ (data (i32.const 2720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2760) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2804) "\01\00\00\00\0f")
+ (data (i32.const 2816) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2856) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2900) "\01\00\00\00\0f")
+ (data (i32.const 2912) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05")
+ (data (i32.const 2952) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s")
+ (data (i32.const 2992) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?")
+ (data (i32.const 3184) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f")
+ (data (i32.const 3232) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f")
+ (data (i32.const 3280) "@\00\00\00\01\00\00\00\0f\00\00\00@")
+ (data (i32.const 3302) "\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?")
+ (data (i32.const 3342) "\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f")
+ (data (i32.const 3360) "@\00\00\00\01\00\00\00\0f\00\00\00@")
+ (data (i32.const 3382) "\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf")
+ (data (i32.const 3414) "\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f")
+ (data (i32.const 3440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02")
+ (data (i32.const 3480) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02")
+ (data (i32.const 3520) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02")
+ (data (i32.const 3560) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff")
+ (data (i32.const 3604) "\01\00\00\00\0f")
+ (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01")
+ (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01")
+ (data (i32.const 3696) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03")
+ (data (i32.const 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.")
+ (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
+ (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y")
+ (data (i32.const 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a")
+ (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b")
+ (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b")
+ (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a")
+ (data (i32.const 4044) "\01\00\00\00\10")
+ (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f")
+ (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f")
+ (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
+ (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l")
+ (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01")
+ (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e")
+ (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e")
+ (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,")
+ (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e")
+ (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff")
+ (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000")
+ (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
+ (data (i32.const 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d")
+ (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003")
+ (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03")
+ (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-")
+ (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80")
+ (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_")
+ (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008")
+ (data (i32.const 5072) "0\00\00\00\01\00\00\00\0f\00\00\000")
+ (data (i32.const 5102) "\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f")
+ (data (i32.const 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 ")
+ (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000")
+ (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N")
+ (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
+ (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
+ (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
+ (data (i32.const 5992) "\10\00\00\00\01\00\00\00\1e\00\00\00\10\00\00\00\b0\14\00\00\b0\14\00\00\b8\02\00\00W")
+ (data (i32.const 6024) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
+ (data (i32.const 6216) "\10\00\00\00\01\00\00\00\1f\00\00\00\10\00\00\00\98\17\00\00\98\17\00\00\ae\00\00\00W")
+ (data (i32.const 6248) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
+ (data (i32.const 6304) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00x\18\00\00x\18\00\00(\00\00\00\n")
+ (data (i32.const 6336) "P\00\00\00\01\00\00\00\10\00\00\00P\00\00\000\00.\000\00,\00 \001\00.\000\00,\00 \00-\002\00.\000\00,\00 \00N\00a\00N\00,\00 \00-\00I\00n\00f\00i\00n\00i\00t\00y\00,\00 \00I\00n\00f\00i\00n\00i\00t\00y")
+ (data (i32.const 6432) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001")
+ (data (i32.const 6456) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\d8\0f\00\000\19")
+ (data (i32.const 6488) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]")
+ (data (i32.const 6536) "@\00\00\00\01\00\00\00\10\00\00\00@\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]")
+ (data (i32.const 6620) "\01\00\00\00\0f")
+ (data (i32.const 6632) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 6656) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
+ (data (i32.const 6680) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03")
+ (data (i32.const 6712) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00,\002")
+ (data (i32.const 6736) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003")
+ (data (i32.const 6768) "\03\00\00\00\01\00\00\00\0f\00\00\00\03\00\00\00\01\ff")
+ (data (i32.const 6792) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\00-\001\00,\000")
+ (data (i32.const 6824) "\06\00\00\00\01\00\00\00\0f\00\00\00\06\00\00\00\01\00\ff\ff")
+ (data (i32.const 6848) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000")
+ (data (i32.const 6888) "\18\00\00\00\01\00\00\00\0f\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff")
+ (data (i32.const 6928) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000")
+ (data (i32.const 6992) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff")
+ (data (i32.const 7032) "\ff\ff\ff\ff\ff\ff\ff\7f")
+ (data (i32.const 7040) "T\00\00\00\01\00\00\00\10\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007")
+ (data (i32.const 7144) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f")
+ (data (i32.const 7192) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,")
+ (data (i32.const 7240) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\002")
+ (data (i32.const 7264) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\004")
+ (data (i32.const 7288) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\000\19\00\00X\1c\00\00\00\00\00\00p\1c")
+ (data (i32.const 7320) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\002\00,\00,\004")
+ (data (i32.const 7352) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02")
+ (data (i32.const 7376) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04")
+ (data (i32.const 7400) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004")
+ (data (i32.const 7432) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\02")
+ (data (i32.const 7456) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\03\04")
+ (data (i32.const 7480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01")
+ (data (i32.const 7504) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 7552) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 7592) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 7648) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 7696) "\'\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\06\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e")
  (table $0 57 funcref)
  (elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0)
- (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $std/array/arr (mut i32) (i32.const 0))
  (global $std/array/i (mut i32) (i32.const 0))
  (global $~lib/argc (mut i32) (i32.const 0))
@@ -221,9 +220,6 @@
  (global $~lib/math/random_state1_64 (mut i64) (i64.const 0))
  (global $~lib/math/random_state0_32 (mut i32) (i32.const 0))
  (global $~lib/math/random_state1_32 (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
  (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp (mut i32) (i32.const 0))
@@ -231,1009 +227,21 @@
  (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
  (global $~lib/started (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (export "main" (func $std/array/main))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
  (export "__realloc" (func $~lib/rt/tlsf/__realloc))
  (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.tee $3
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const -4
-  i32.and
-  local.tee $2
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $2
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 4
-   i32.shr_u
-   local.set $2
-   i32.const 0
-  else   
-   local.get $2
-   i32.const 31
-   local.get $2
-   i32.clz
-   i32.sub
-   local.tee $3
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $2
-   local.get $3
-   i32.const 7
-   i32.sub
-  end
-  local.tee $3
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=20
-  local.set $4
-  local.get $1
-  i32.load offset=16
-  local.tee $5
-  if
-   local.get $5
-   local.get $4
-   i32.store offset=20
-  end
-  local.get $4
-  if
-   local.get $4
-   local.get $5
-   i32.store offset=16
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $2
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=96
-  local.get $1
-  i32.eq
-  if
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $2
-   i32.add
-   i32.const 2
-   i32.shl
-   local.get $0
-   i32.add
-   local.get $4
-   i32.store offset=96
-   local.get $4
-   i32.eqz
-   if
-    local.get $3
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    local.get $3
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=4
-    i32.const 1
-    local.get $2
-    i32.shl
-    i32.const -1
-    i32.xor
-    i32.and
-    local.tee $1
-    i32.store offset=4
-    local.get $1
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $3
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.tee $3
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.load
-  i32.const -4
-  i32.and
-  i32.add
-  local.tee $4
-  i32.load
-  local.tee $5
-  i32.const 1
-  i32.and
-  if
-   local.get $3
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $2
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $3
-    i32.const 3
-    i32.and
-    local.get $2
-    i32.or
-    local.tee $3
-    i32.store
-    local.get $1
-    i32.const 16
-    i32.add
-    local.get $1
-    i32.load
-    i32.const -4
-    i32.and
-    i32.add
-    local.tee $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $3
-  i32.const 2
-  i32.and
-  if
-   local.get $1
-   i32.const 4
-   i32.sub
-   i32.load
-   local.tee $2
-   i32.load
-   local.tee $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $7
-   i32.const 1073741808
-   i32.lt_u
-   if (result i32)
-    local.get $0
-    local.get $2
-    call $~lib/rt/tlsf/removeBlock
-    local.get $2
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $3
-    i32.store
-    local.get $2
-   else    
-    local.get $1
-   end
-   local.set $1
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $3
-  i32.const -4
-  i32.and
-  local.tee $2
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $2
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  i32.add
-  i32.ne
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $2
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 4
-   i32.shr_u
-   local.set $4
-   i32.const 0
-  else   
-   local.get $2
-   i32.const 31
-   local.get $2
-   i32.clz
-   i32.sub
-   local.tee $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $4
-   local.get $2
-   i32.const 7
-   i32.sub
-  end
-  local.tee $3
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $4
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $4
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=96
-  local.set $2
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $2
-  i32.store offset=20
-  local.get $2
-  if
-   local.get $2
-   local.get $1
-   i32.store offset=16
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $4
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  local.get $1
-  i32.store offset=96
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $3
-  i32.shl
-  i32.or
-  i32.store
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=4
-  i32.const 1
-  local.get $4
-  i32.shl
-  i32.or
-  i32.store offset=4
- )
- (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  local.get $2
-  i32.le_u
-  select
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=1568
-  local.tee $3
-  if
-   local.get $1
-   local.get $3
-   i32.const 16
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $3
-   i32.eq
-   if
-    local.get $3
-    i32.load
-    local.set $4
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.tee $2
-  i32.const 48
-  i32.lt_u
-  if
-   return
-  end
-  local.get $1
-  local.get $4
-  i32.const 2
-  i32.and
-  local.get $2
-  i32.const 32
-  i32.sub
-  i32.const 1
-  i32.or
-  i32.or
-  i32.store
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $2
-  i32.add
-  i32.const 16
-  i32.sub
-  local.tee $2
-  i32.const 2
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=1568
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
- )
- (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  i32.const 1
-  current_memory
-  local.tee $0
-  i32.gt_s
-  if (result i32)
-   i32.const 1
-   local.get $0
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  i32.const 8048
-  i32.const 0
-  i32.store
-  i32.const 9616
-  i32.const 0
-  i32.store
-  i32.const 0
-  local.set $0
-  loop $repeat|0
-   block $break|0
-    local.get $0
-    i32.const 23
-    i32.ge_u
-    br_if $break|0
-    local.get $0
-    i32.const 2
-    i32.shl
-    i32.const 8048
-    i32.add
-    i32.const 0
-    i32.store offset=4
-    i32.const 0
-    local.set $1
-    loop $repeat|1
-     block $break|1
-      local.get $1
-      i32.const 16
-      i32.ge_u
-      br_if $break|1
-      local.get $0
-      i32.const 4
-      i32.shl
-      local.get $1
-      i32.add
-      i32.const 2
-      i32.shl
-      i32.const 8048
-      i32.add
-      i32.const 0
-      i32.store offset=96
-      local.get $1
-      i32.const 1
-      i32.add
-      local.set $1
-      br $repeat|1
-     end
-    end
-    local.get $0
-    i32.const 1
-    i32.add
-    local.set $0
-    br $repeat|0
-   end
-  end
-  i32.const 8048
-  i32.const 9632
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  i32.const 8048
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 176
-   i32.const 128
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const -16
-  i32.and
-  local.tee $0
-  i32.const 16
-  local.get $0
-  i32.const 16
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $1
-   i32.const 0
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    local.get $1
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
-   i32.const 31
-   local.get $1
-   i32.clz
-   i32.sub
-   local.tee $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $1
-   local.get $2
-   i32.const 7
-   i32.sub
-  end
-  local.tee $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=4
-  i32.const -1
-  local.get $1
-  i32.shl
-  i32.and
-  local.tee $1
-  if (result i32)
-   local.get $1
-   i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   local.get $0
-   i32.add
-   i32.load offset=96
-  else   
-   local.get $0
-   i32.load
-   i32.const -1
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.tee $1
-   if (result i32)
-    local.get $1
-    i32.ctz
-    local.tee $1
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=4
-    local.tee $2
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 128
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $2
-    i32.ctz
-    local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=96
-   else    
-    i32.const 0
-   end
-  end
- )
- (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  current_memory
-  local.tee $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const -65536
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.tee $1
-  local.get $2
-  local.get $1
-  i32.gt_s
-  select
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $1
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
- )
- (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const -4
-  i32.and
-  local.get $2
-  i32.sub
-  local.tee $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $3
-   i32.const 2
-   i32.and
-   local.get $2
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.tee $1
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $1
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const -2
-   i32.and
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   i32.load
-   i32.const -3
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.tee $3
-  call $~lib/rt/tlsf/searchBlock
-  local.tee $2
-  i32.eqz
-  if
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/searchBlock
-   local.tee $2
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  i32.load
-  i32.const -4
-  i32.and
-  local.get $3
-  i32.lt_u
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 0
-  i32.store offset=4
-  local.get $2
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $2
-  local.get $3
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $2
- )
- (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.tee $2
-  if (result i32)
-   local.get $2
-  else   
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-  end
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $0
-  local.get $1
-  i32.store offset=8
-  local.get $0
-  i32.const 16
-  i32.add
- )
- (func $~lib/arraybuffer/ArrayBufferView#constructor (; 15 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (export "__retain" (func $~lib/rt/pure/__retain))
+ (export "__release" (func $~lib/rt/pure/__release))
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/arraybuffer/ArrayBufferView#constructor (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 1073741808
   local.get $2
@@ -1260,7 +268,7 @@
    i32.const 12
    i32.const 14
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -1276,7 +284,7 @@
   local.get $1
   local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -1286,12 +294,12 @@
   i32.store offset=8
   local.get $0
  )
- (func $~lib/array/Array<i32>#constructor (; 16 ;) (type $FUNCSIG$i) (result i32)
+ (func $~lib/array/Array<i32>#constructor (; 6 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   i32.const 16
   i32.const 17
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.const 0
   i32.const 2
   call $~lib/arraybuffer/ArrayBufferView#constructor
@@ -1303,78 +311,25 @@
   i32.store offset=12
   local.get $0
  )
- (func $~lib/array/Array.isArray<~lib/array/Array<i32> | null> (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<~lib/array/Array<i32> | null> (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 0
   i32.ne
  )
- (func $~lib/array/Array.isArray<std/array/P> (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<std/array/P> (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/rt/purerc/increment (; 19 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $1
-  i32.const -268435456
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const -268435456
-  i32.and
-  i32.ne
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 8040
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/memory/memory.copy (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 9 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   block $~lib/util/memory/memmove|inlined.0
@@ -1547,7 +502,7 @@
    end
   end
  )
- (func $~lib/rt/common/__allocArray (; 22 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/rt/__allocArray (; 10 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   i32.const 16
   local.get $2
@@ -1560,7 +515,7 @@
   i32.const 15
   call $~lib/rt/tlsf/__alloc
   local.tee $4
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $2
   local.get $4
@@ -1580,7 +535,7 @@
   end
   local.get $2
  )
- (func $~lib/memory/memory.fill (; 23 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.fill (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i64)
   block $~lib/util/memory/memset|inlined.0
@@ -1805,7 +760,7 @@
    end
   end
  )
- (func $~lib/array/Array<u8>#fill (; 24 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<u8>#fill (; 12 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
@@ -1870,16 +825,16 @@
    call $~lib/memory/memory.fill
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<u8>#__get (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u8>#__get (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -1891,14 +846,14 @@
   i32.add
   i32.load8_u
  )
- (func $std/array/isArraysEqual<u8> (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isArraysEqual<u8> (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner1
    block $folding-inner0
@@ -1936,19 +891,19 @@
     br $folding-inner1
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $~lib/array/Array<u32>#fill (; 27 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<u32>#fill (; 15 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
@@ -2022,9 +977,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<u32>#__get (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#__get (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -2032,8 +987,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -2047,13 +1002,13 @@
   i32.add
   i32.load
  )
- (func $std/array/isArraysEqual<u32> (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<u32> (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner1
    block $folding-inner0
@@ -2097,193 +1052,41 @@
     br $folding-inner1
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $std/array/internalCapacity<i32> (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/internalCapacity<i32> (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 16
   i32.sub
   i32.load offset=12
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 2
   i32.shr_s
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 31 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.tee $4
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.load
-  i32.const -4
-  i32.and
-  i32.add
-  local.tee $6
-  i32.load
-  local.tee $5
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $3
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
-  local.get $3
- )
- (func $~lib/rt/tlsf/__realloc (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $0
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/array/ensureSize (; 33 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/ensureSize (; 19 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2300,7 +1103,7 @@
    i32.gt_u
    if
     i32.const 24
-    i32.const 456
+    i32.const 296
     i32.const 14
     i32.const 47
     call $~lib/builtins/abort
@@ -2328,7 +1131,7 @@
    if
     local.get $0
     local.get $1
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $0
     local.get $1
@@ -2339,7 +1142,7 @@
    i32.store offset=8
   end
  )
- (func $~lib/array/Array<i32>#push (; 34 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<i32>#push (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -2362,7 +1165,7 @@
   local.get $3
   i32.store offset=12
  )
- (func $~lib/array/Array<i32>#pop (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#pop (; 21 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -2371,8 +1174,8 @@
   i32.const 1
   i32.lt_s
   if
-   i32.const 840
-   i32.const 456
+   i32.const 680
+   i32.const 296
    i32.const 250
    i32.const 20
    call $~lib/builtins/abort
@@ -2394,13 +1197,13 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/array/Array<i32>#concat (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#concat (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -2417,9 +1220,9 @@
   i32.gt_u
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 197
    i32.const 59
    call $~lib/builtins/abort
@@ -2429,8 +1232,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $2
   i32.load offset=4
   local.tee $5
@@ -2451,10 +1254,10 @@
   i32.shl
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/array/Array<i32>#copyWithin (; 37 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<i32>#copyWithin (; 23 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
@@ -2615,9 +1418,9 @@
    call $~lib/memory/memory.copy
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<i32>#unshift (; 38 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<i32>#unshift (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -2646,7 +1449,7 @@
   local.get $2
   i32.store offset=12
  )
- (func $~lib/array/Array<i32>#shift (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#shift (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -2657,8 +1460,8 @@
   i32.const 1
   i32.lt_s
   if
-   i32.const 840
-   i32.const 456
+   i32.const 680
+   i32.const 296
    i32.const 311
    i32.const 20
    call $~lib/builtins/abort
@@ -2691,7 +1494,7 @@
   i32.store offset=12
   local.get $3
  )
- (func $~lib/array/Array<i32>#reverse (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#reverse (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -2739,9 +1542,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<i32>#indexOf (; 41 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#indexOf (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load offset=12
@@ -2801,7 +1604,7 @@
   end
   i32.const -1
  )
- (func $~lib/array/Array<i32>#includes (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#includes (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   local.get $1
   local.get $2
@@ -2809,7 +1612,7 @@
   i32.const 0
   i32.ge_s
  )
- (func $~lib/array/Array<i32>#splice (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#splice (; 29 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2856,8 +1659,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   i32.load offset=4
   local.get $0
@@ -2899,7 +1702,7 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/array/Array<i32>#__set (; 44 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<i32>#__set (; 30 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $0
   i32.load offset=12
@@ -2928,16 +1731,16 @@
    i32.store offset=12
   end
  )
- (func $start:std/array~anonymous|0 (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|0 (; 31 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.eqz
  )
- (func $~lib/array/Array<i32>#findIndex (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#findIndex (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2985,63 +1788,63 @@
   end
   i32.const -1
  )
- (func $start:std/array~anonymous|1 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|1 (; 33 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 1
   i32.eq
  )
- (func $start:std/array~anonymous|2 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|2 (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 100
   i32.eq
  )
- (func $start:std/array~anonymous|3 (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|3 (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
   call $~lib/array/Array<i32>#push
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 100
   i32.eq
  )
- (func $start:std/array~anonymous|5 (; 50 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|5 (; 36 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 100
   i32.eq
  )
- (func $start:std/array~anonymous|6 (; 51 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|6 (; 37 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 0
   i32.ge_s
  )
- (func $~lib/array/Array<i32>#every (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#every (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3089,63 +1892,63 @@
   end
   i32.const 1
  )
- (func $start:std/array~anonymous|7 (; 53 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|7 (; 39 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 0
   i32.le_s
  )
- (func $start:std/array~anonymous|8 (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|8 (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
   call $~lib/array/Array<i32>#push
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 10
   i32.lt_s
  )
- (func $start:std/array~anonymous|9 (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|9 (; 41 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 10
   i32.lt_s
  )
- (func $start:std/array~anonymous|10 (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|10 (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 3
   i32.lt_s
  )
- (func $start:std/array~anonymous|11 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|11 (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 3
   i32.ge_s
  )
- (func $~lib/array/Array<i32>#some (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#some (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3193,64 +1996,64 @@
   end
   i32.const 0
  )
- (func $start:std/array~anonymous|12 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|12 (; 45 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const -1
   i32.le_s
  )
- (func $start:std/array~anonymous|13 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|13 (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
   call $~lib/array/Array<i32>#push
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 10
   i32.gt_s
  )
- (func $start:std/array~anonymous|14 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|14 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 10
   i32.gt_s
  )
- (func $start:std/array~anonymous|15 (; 62 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|15 (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 3
   i32.gt_s
  )
- (func $start:std/array~anonymous|16 (; 63 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|16 (; 49 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<i32>#forEach (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<i32>#forEach (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3293,9 +2096,9 @@
    unreachable
   end
  )
- (func $start:std/array~anonymous|17 (; 65 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|17 (; 51 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -3305,11 +2108,11 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|19 (; 66 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|19 (; 52 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -3319,12 +2122,12 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|20 (; 67 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|20 (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   i32.eqz
@@ -3413,7 +2216,7 @@
    i32.ne
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 570
     i32.const 6
     call $~lib/builtins/abort
@@ -3421,18 +2224,18 @@
    end
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|21 (; 68 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
+ (func $start:std/array~anonymous|21 (; 54 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   f32.convert_i32_s
  )
- (func $~lib/array/Array<i32>#map<f32> (; 69 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#map<f32> (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -3445,8 +2248,8 @@
   i32.const 2
   i32.const 22
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   i32.load offset=4
   local.set $5
@@ -3490,7 +2293,7 @@
   end
   local.get $4
  )
- (func $~lib/array/Array<f32>#__get (; 70 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
+ (func $~lib/array/Array<f32>#__get (; 56 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -3498,8 +2301,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -3513,9 +2316,9 @@
   i32.add
   f32.load
  )
- (func $start:std/array~anonymous|22 (; 71 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|22 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -3525,10 +2328,10 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/array/Array<i32>#map<i32> (; 72 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#map<i32> (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3541,8 +2344,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
   i32.load offset=4
   local.set $6
@@ -3588,21 +2391,21 @@
   end
   local.get $5
  )
- (func $start:std/array~anonymous|23 (; 73 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|23 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $start:std/array~anonymous|24 (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|24 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -3612,20 +2415,20 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $start:std/array~anonymous|25 (; 75 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|25 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 2
   i32.ge_s
  )
- (func $~lib/array/Array<i32>#filter (; 76 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#filter (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3634,8 +2437,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $4
   local.get $0
   i32.load offset=12
@@ -3682,9 +2485,9 @@
   end
   local.get $4
  )
- (func $start:std/array~anonymous|26 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|26 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -3694,28 +2497,28 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 2
   i32.ge_s
  )
- (func $start:std/array~anonymous|27 (; 78 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|27 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 2
   i32.ge_s
  )
- (func $start:std/array~anonymous|28 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|28 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -3725,22 +2528,22 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   i32.const 2
   i32.ge_s
  )
- (func $start:std/array~anonymous|29 (; 80 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|29 (; 66 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   local.get $1
   i32.add
  )
- (func $~lib/array/Array<i32>#reduce<i32> (; 81 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduce<i32> (; 67 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -3784,12 +2587,12 @@
   end
   local.get $2
  )
- (func $start:std/array~anonymous|31 (; 82 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|31 (; 68 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
   local.get $1
   i32.const 2
@@ -3797,12 +2600,12 @@
   local.get $0
   select
  )
- (func $start:std/array~anonymous|32 (; 83 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|32 (; 69 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
   local.get $1
   i32.const 100
@@ -3810,33 +2613,33 @@
   local.get $0
   select
  )
- (func $start:std/array~anonymous|33 (; 84 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|33 (; 70 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   i32.const 1
   call $~lib/array/Array<i32>#push
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   local.get $1
   i32.add
  )
- (func $start:std/array~anonymous|35 (; 85 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|35 (; 71 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   call $~lib/array/Array<i32>#pop
   drop
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
   local.get $1
   i32.add
  )
- (func $~lib/array/Array<i32>#reduceRight<i32> (; 86 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduceRight<i32> (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load offset=12
@@ -3873,7 +2676,7 @@
   end
   local.get $2
  )
- (func $~lib/math/splitMix32 (; 87 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/math/splitMix32 (; 73 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 1831565813
   i32.add
@@ -3905,13 +2708,13 @@
   i32.shr_u
   i32.xor
  )
- (func $~lib/math/NativeMath.seedRandom (; 88 ;) (type $FUNCSIG$vj) (param $0 i64)
+ (func $~lib/math/NativeMath.seedRandom (; 74 ;) (type $FUNCSIG$vj) (param $0 i64)
   (local $1 i64)
   local.get $0
   i64.eqz
   if
    i32.const 0
-   i32.const 3128
+   i32.const 2968
    i32.const 1021
    i32.const 4
    call $~lib/builtins/abort
@@ -3970,7 +2773,7 @@
   call $~lib/math/splitMix32
   global.set $~lib/math/random_state1_32
  )
- (func $~lib/util/sort/insertionSort<f32> (; 89 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<f32> (; 75 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 f32)
@@ -4052,66 +2855,7 @@
    unreachable
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.tee $2
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
- )
- (func $~lib/rt/tlsf/__free (; 91 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $0
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/util/sort/weakHeapSort<f32> (; 92 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<f32> (; 76 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 f32)
@@ -4372,7 +3116,7 @@
   local.get $5
   f32.store
  )
- (func $~lib/array/Array<f32>#sort (; 93 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f32>#sort (; 77 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f32)
@@ -4384,7 +3128,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -4417,7 +3161,7 @@
     f32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -4435,9 +3179,9 @@
    call $~lib/util/sort/weakHeapSort<f32>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<f32>~anonymous|0 (; 94 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<f32>~anonymous|0 (; 78 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -4466,15 +3210,15 @@
   i32.lt_s
   i32.sub
  )
- (func $std/array/isArraysEqual<f32> (; 95 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isArraysEqual<f32> (; 79 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 f32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner1
    block $folding-inner0
@@ -4527,19 +3271,19 @@
     br $folding-inner1
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $~lib/util/sort/insertionSort<f64> (; 96 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<f64> (; 80 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 f64)
@@ -4621,7 +3365,7 @@
    unreachable
   end
  )
- (func $~lib/util/sort/weakHeapSort<f64> (; 97 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<f64> (; 81 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 f64)
@@ -4882,7 +3626,7 @@
   local.get $5
   f64.store
  )
- (func $~lib/array/Array<f64>#sort (; 98 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f64>#sort (; 82 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f64)
@@ -4894,7 +3638,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -4927,7 +3671,7 @@
     f64.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -4945,9 +3689,9 @@
    call $~lib/util/sort/weakHeapSort<f64>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<f64>~anonymous|0 (; 99 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
+ (func $~lib/util/sort/COMPARATOR<f64>~anonymous|0 (; 83 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
   (local $2 i64)
   (local $3 i64)
   local.get $0
@@ -4976,7 +3720,7 @@
   i64.lt_s
   i32.sub
  )
- (func $~lib/array/Array<f64>#__get (; 100 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
+ (func $~lib/array/Array<f64>#__get (; 84 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -4984,8 +3728,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -4999,15 +3743,15 @@
   i32.add
   f64.load
  )
- (func $std/array/isArraysEqual<f64> (; 101 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isArraysEqual<f64> (; 85 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 f64)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner1
    block $folding-inner0
@@ -5060,19 +3804,19 @@
     br $folding-inner1
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $~lib/util/sort/insertionSort<i32> (; 102 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<i32> (; 86 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -5154,7 +3898,7 @@
    unreachable
   end
  )
- (func $~lib/util/sort/weakHeapSort<i32> (; 103 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<i32> (; 87 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -5415,7 +4159,7 @@
   local.get $1
   i32.store
  )
- (func $~lib/array/Array<i32>#sort (; 104 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#sort (; 88 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5426,7 +4170,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5459,7 +4203,7 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $2
@@ -5477,14 +4221,14 @@
    call $~lib/util/sort/weakHeapSort<i32>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<i32>~anonymous|0 (; 105 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<i32>~anonymous|0 (; 89 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.sub
  )
- (func $~lib/util/sort/COMPARATOR<u32>~anonymous|0 (; 106 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<u32>~anonymous|0 (; 90 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.gt_u
@@ -5493,13 +4237,13 @@
   i32.lt_u
   i32.sub
  )
- (func $~lib/array/Array.create<i32> (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.create<i32> (; 91 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 268435452
   i32.gt_u
   if
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 45
    i32.const 61
    call $~lib/builtins/abort
@@ -5509,8 +4253,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   i32.store offset=12
@@ -5522,7 +4266,7 @@
   call $~lib/memory/memory.fill
   local.get $0
  )
- (func $std/array/createReverseOrderedArray (; 108 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createReverseOrderedArray (; 92 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -5551,14 +4295,14 @@
   end
   local.get $2
  )
- (func $~lib/math/NativeMath.random (; 109 ;) (type $FUNCSIG$d) (result f64)
+ (func $~lib/math/NativeMath.random (; 93 ;) (type $FUNCSIG$d) (result f64)
   (local $0 i64)
   (local $1 i64)
   global.get $~lib/math/random_seeded
   i32.eqz
   if
-   i32.const 3904
-   i32.const 3128
+   i32.const 3744
+   i32.const 2968
    i32.const 1030
    i32.const 24
    call $~lib/builtins/abort
@@ -5598,7 +4342,7 @@
   f64.const 1
   f64.sub
  )
- (func $std/array/createRandomOrderedArray (; 110 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createRandomOrderedArray (; 94 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -5627,11 +4371,11 @@
   end
   local.get $2
  )
- (func $std/array/isSorted<i32> (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<i32> (; 95 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 1
   local.set $2
@@ -5659,7 +4403,7 @@
     i32.gt_s
     if
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      i32.const 0
      return
     else     
@@ -5673,13 +4417,13 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $std/array/assertSorted<i32> (; 112 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<i32> (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -5690,40 +4434,40 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/assertSortedDefault<i32> (; 113 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $std/array/assertSortedDefault<i32> (; 97 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 48
   call $std/array/assertSorted<i32>
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|44 (; 114 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|44 (; 98 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.sub
  )
- (func $~lib/array/Array.create<~lib/array/Array<i32>> (; 115 ;) (type $FUNCSIG$i) (result i32)
+ (func $~lib/array/Array.create<~lib/array/Array<i32>> (; 99 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   i32.const 2
   i32.const 2
   i32.const 24
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   i32.store offset=12
@@ -5735,205 +4479,9 @@
   call $~lib/memory/memory.fill
   local.get $0
  )
- (func $~lib/rt/common/__typeinfo (; 116 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  if (result i32)
-   local.get $0
-   i32.const 7720
-   i32.load
-   i32.gt_u
-  else   
-   i32.const 1
-  end
-  if
-   i32.const 400
-   i32.const 4120
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 3
-  i32.shl
-  i32.const 7720
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/purerc/CUR
-  global.get $~lib/rt/purerc/ROOTS
-  local.tee $2
-  i32.sub
-  local.tee $1
-  i32.const 1
-  i32.shl
-  local.tee $0
-  i32.const 256
-  local.get $0
-  i32.const 256
-  i32.gt_u
-  select
-  local.tee $3
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $0
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_set (; 100 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $0
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $0
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $0
-  local.get $3
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.tee $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $2
-  i32.const 268435455
-  i32.and
-  local.set $1
-  local.get $0
-  call $~lib/rt/purerc/onDecrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $2
-   i32.const -2147483648
-   i32.and
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.store offset=4
-   else    
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   end
-  else   
-   local.get $1
-   i32.const 0
-   i32.le_u
-   if
-    i32.const 0
-    i32.const 320
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   if
-    local.get $0
-    local.get $1
-    i32.const 1
-    i32.sub
-    local.get $2
-    i32.const -268435456
-    i32.and
-    i32.or
-    i32.store offset=4
-   else    
-    local.get $0
-    local.get $1
-    i32.const 1
-    i32.sub
-    i32.const -1342177280
-    i32.or
-    i32.store offset=4
-    local.get $2
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   end
-  end
- )
- (func $~lib/rt/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  i32.ne
-  if
-   local.get $0
-   i32.const 8040
-   i32.gt_u
-   if
-    local.get $0
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/increment
-   end
-   local.get $1
-   i32.const 8040
-   i32.gt_u
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/decrement
-   end
-  end
-  local.get $0
- )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_set (; 121 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=4
@@ -5945,15 +4493,15 @@
   local.get $2
   local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__set (; 122 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__set (; 101 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   local.get $0
@@ -5962,9 +4510,9 @@
   i32.gt_u
   if
    local.get $2
-   call $~lib/rt/purerc/__release
-   i32.const 4008
-   i32.const 456
+   call $~lib/rt/pure/__release
+   i32.const 3848
+   i32.const 296
    i32.const 112
    i32.const 38
    call $~lib/builtins/abort
@@ -5990,9 +4538,9 @@
    i32.store offset=12
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/createReverseOrderedNestedArray (; 123 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/array/createReverseOrderedNestedArray (; 102 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -6016,7 +4564,7 @@
     local.get $2
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $2
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $0
     i32.const 1
     i32.add
@@ -6026,13 +4574,13 @@
   end
   local.get $1
  )
- (func $start:std/array~anonymous|47 (; 124 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|47 (; 103 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -6043,12 +4591,12 @@
   i32.sub
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/util/sort/insertionSort<~lib/array/Array<i32>> (; 125 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<~lib/array/Array<i32>> (; 104 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -6066,7 +4614,7 @@
     local.get $0
     i32.add
     i32.load
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $6
     local.get $3
     i32.const 1
@@ -6084,7 +4632,7 @@
        local.get $0
        i32.add
        i32.load
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        local.set $5
        i32.const 2
        global.set $~lib/argc
@@ -6111,11 +4659,11 @@
         i32.store
        else        
         local.get $5
-        call $~lib/rt/purerc/__release
+        call $~lib/rt/pure/__release
         br $break|1
        end
        local.get $5
-       call $~lib/rt/purerc/__release
+       call $~lib/rt/pure/__release
        br $continue|1
       end
      end
@@ -6130,7 +4678,7 @@
     local.get $6
     i32.store
     local.get $6
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -6141,7 +4689,7 @@
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#sort (; 126 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#sort (; 105 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -6152,7 +4700,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -6164,11 +4712,11 @@
   if
    local.get $3
    i32.load offset=4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    i32.const 2
    global.set $~lib/argc
@@ -6187,12 +4735,12 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -6201,9 +4749,9 @@
   local.get $1
   call $~lib/util/sort/insertionSort<~lib/array/Array<i32>>
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get (; 106 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -6211,16 +4759,16 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__get (; 128 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__get (; 107 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 4008
-   i32.const 456
+   i32.const 3848
+   i32.const 296
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -6233,8 +4781,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -6244,13 +4792,13 @@
   local.get $1
   call $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get
  )
- (func $std/array/isSorted<~lib/array/Array<i32>> (; 129 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<~lib/array/Array<i32>> (; 108 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 1
   local.set $2
@@ -6280,18 +4828,18 @@
     i32.gt_s
     if
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      i32.const 0
      return
     else     
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      i32.const 1
      i32.add
@@ -6302,13 +4850,13 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $std/array/assertSorted<~lib/array/Array<i32>> (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/array/Array<i32>> (; 109 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -6319,25 +4867,25 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array.create<std/array/Proxy<i32>> (; 131 ;) (type $FUNCSIG$i) (result i32)
+ (func $~lib/array/Array.create<std/array/Proxy<i32>> (; 110 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   i32.const 512
   i32.const 2
   i32.const 26
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   i32.store offset=12
@@ -6349,7 +4897,7 @@
   call $~lib/memory/memory.fill
   local.get $0
  )
- (func $std/array/createReverseOrderedElementsArray (; 132 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/array/createReverseOrderedElementsArray (; 111 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -6363,7 +4911,7 @@
     i32.const 4
     i32.const 25
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.tee $2
     i32.const 511
     local.get $0
@@ -6374,7 +4922,7 @@
     local.get $2
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $2
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $0
     i32.const 1
     i32.add
@@ -6384,13 +4932,13 @@
   end
   local.get $1
  )
- (func $start:std/array~anonymous|48 (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|48 (; 112 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load
@@ -6399,12 +4947,12 @@
   i32.sub
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/array/Array<~lib/string/String | null>#__get (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#__get (; 113 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -6412,8 +4960,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -6423,13 +4971,13 @@
   local.get $1
   call $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get
  )
- (func $std/array/isSorted<~lib/string/String | null> (; 135 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<~lib/string/String | null> (; 114 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 1
   local.set $2
@@ -6459,18 +5007,18 @@
     i32.gt_s
     if
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      i32.const 0
      return
     else     
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      i32.const 1
      i32.add
@@ -6481,13 +5029,13 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $std/array/assertSorted<~lib/string/String | null> (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/string/String | null> (; 115 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -6498,26 +5046,26 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/util/string/compareImpl (; 137 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/string/compareImpl (; 116 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.set $3
@@ -6553,19 +5101,19 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 117 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner0
    i32.const 1
@@ -6602,9 +5150,9 @@
    i32.eqz
    if
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const -1
     return
    end
@@ -6612,9 +5160,9 @@
    i32.eqz
    if
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 1
     return
    end
@@ -6629,34 +5177,34 @@
    call $~lib/util/string/compareImpl
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/string/String.__eq (; 139 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__eq (; 118 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.eq
   if
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 1
    return
   end
@@ -6689,25 +5237,25 @@
    i32.eqz
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/string/String.__ne (; 140 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__ne (; 119 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -6715,21 +5263,21 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/isArraysEqual<~lib/string/String | null> (; 141 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isArraysEqual<~lib/string/String | null> (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -6739,9 +5287,9 @@
   i32.ne
   if
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
@@ -6750,9 +5298,9 @@
   i32.eq
   if
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 1
    return
   end
@@ -6772,20 +5320,20 @@
     call $~lib/string/String.__ne
     if
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      i32.const 0
      return
     else     
      local.get $3
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      i32.const 1
      i32.add
@@ -6796,19 +5344,19 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 1
  )
- (func $~lib/array/Array.create<~lib/string/String> (; 142 ;) (type $FUNCSIG$i) (result i32)
+ (func $~lib/array/Array.create<~lib/string/String> (; 121 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   i32.const 400
   i32.const 2
   i32.const 28
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   i32.store offset=12
@@ -6820,17 +5368,17 @@
   call $~lib/memory/memory.fill
   local.get $0
  )
- (func $~lib/string/String#charAt (; 143 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String#charAt (; 122 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  i32.const 3164
+  i32.const 3004
   i32.load
   i32.const 1
   i32.shr_u
   i32.ge_u
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 2
@@ -6840,27 +5388,27 @@
   local.get $0
   i32.const 1
   i32.shl
-  i32.const 3168
+  i32.const 3008
   i32.add
   i32.load16_u
   i32.store16
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#concat (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (; 123 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block (result i32)
    local.get $1
    i32.eqz
    if
-    i32.const 4432
+    i32.const 4216
     local.get $1
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $1
    end
    local.get $1
@@ -6886,18 +5434,18 @@
    i32.eqz
   end
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
   local.get $2
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $2
   local.get $0
   local.get $3
@@ -6909,37 +5457,37 @@
   local.get $4
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__concat (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__concat (; 124 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  i32.const 4432
+  i32.const 4216
   local.get $0
   select
   local.get $1
   call $~lib/string/String#concat
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/createRandomString (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createRandomString (; 125 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
   loop $repeat|0
    local.get $2
@@ -6948,7 +5496,7 @@
    if
     local.get $1
     call $~lib/math/NativeMath.random
-    i32.const 3164
+    i32.const 3004
     i32.load
     i32.const 1
     i32.shr_u
@@ -6961,12 +5509,12 @@
     call $~lib/string/String.__concat
     local.tee $4
     local.get $1
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $1
     local.get $3
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -6976,7 +5524,7 @@
   end
   local.get $1
  )
- (func $std/array/createRandomStringArray (; 147 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/array/createRandomStringArray (; 126 ;) (type $FUNCSIG$i) (result i32)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -6997,7 +5545,7 @@
     local.tee $2
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $2
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $0
     i32.const 1
     i32.add
@@ -7007,14 +5555,14 @@
   end
   local.get $1
  )
- (func $~lib/string/String#substring (; 148 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#substring (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 4384
+   i32.const 4168
    i32.const 196
    i32.const 4
    call $~lib/builtins/abort
@@ -7066,8 +5614,8 @@
   local.tee $2
   i32.eqz
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -7087,7 +5635,7 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $2
@@ -7100,9 +5648,9 @@
   local.get $2
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<bool>#join_bool (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<bool>#join_bool (; 128 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -7111,8 +5659,8 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -7122,11 +5670,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -7136,19 +5684,19 @@
   local.get $1
   i32.eqz
   if
-   i32.const 4480
-   i32.const 4504
+   i32.const 4264
+   i32.const 4288
    local.get $3
    i32.load8_u
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -7164,7 +5712,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $2
   i32.const 0
   local.set $0
@@ -7187,8 +5735,8 @@
     i32.shl
     local.get $2
     i32.add
-    i32.const 4480
-    i32.const 4504
+    i32.const 4264
+    i32.const 4288
     local.get $8
     select
     local.get $6
@@ -7206,7 +5754,7 @@
      i32.shl
      local.get $2
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -7237,8 +5785,8 @@
   i32.shl
   local.get $2
   i32.add
-  i32.const 4480
-  i32.const 4504
+  i32.const 4264
+  i32.const 4288
   local.get $3
   select
   local.get $1
@@ -7256,18 +5804,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/util/number/decimalCount32 (; 150 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/decimalCount32 (; 129 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 100000
   i32.lt_u
@@ -7321,10 +5869,10 @@
    end
   end
  )
- (func $~lib/util/number/utoa32_lut (; 151 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_lut (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  i32.const 5076
+  i32.const 4860
   i32.load
   local.set $3
   loop $continue|0
@@ -7431,15 +5979,15 @@
    i32.store16
   end
  )
- (func $~lib/util/number/itoa32 (; 152 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (; 131 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i32.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -7472,9 +6020,9 @@
    i32.store16
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa_stream<i32> (; 153 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<i32> (; 132 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 1
   i32.shl
@@ -7518,7 +6066,7 @@
   end
   local.get $2
  )
- (func $~lib/array/Array<i32>#join_int (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#join_int (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7526,7 +6074,7 @@
   (local $6 i32)
   (local $7 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -7536,11 +6084,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -7554,12 +6102,12 @@
    i32.load
    call $~lib/util/number/itoa32
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -7581,7 +6129,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $2
   i32.const 0
   local.set $0
@@ -7646,36 +6194,36 @@
    call $~lib/string/String#substring
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/array/Array<i32>#join (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#join (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<i32>#join_int
   local.set $0
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/util/number/utoa32 (; 156 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/utoa32 (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -7690,9 +6238,9 @@
   local.get $1
   call $~lib/util/number/utoa32_lut
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa_stream<u32> (; 157 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u32> (; 136 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 1
   i32.shl
@@ -7716,7 +6264,7 @@
   call $~lib/util/number/utoa32_lut
   local.get $0
  )
- (func $~lib/array/Array<u32>#join_int (; 158 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#join_int (; 137 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7724,7 +6272,7 @@
   (local $6 i32)
   (local $7 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -7734,11 +6282,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -7752,12 +6300,12 @@
    i32.load
    call $~lib/util/number/utoa32
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -7779,7 +6327,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $2
   i32.const 0
   local.set $0
@@ -7844,29 +6392,29 @@
    call $~lib/string/String#substring
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/array/Array<u32>#join (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#join (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<u32>#join_int
   local.set $0
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/util/number/genDigits (; 160 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (; 139 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i32)
   (local $9 i64)
@@ -7901,7 +6449,7 @@
   local.tee $7
   call $~lib/util/number/decimalCount32
   local.set $4
-  i32.const 6540
+  i32.const 6324
   i32.load
   local.set $13
   loop $continue|0
@@ -8271,7 +6819,7 @@
    local.get $6
   end
  )
- (func $~lib/util/number/prettify (; 161 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/prettify (; 140 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
   i32.eqz
@@ -8522,7 +7070,7 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (; 162 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/util/number/dtoa_core (; 141 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 i64)
   (local $3 i32)
   (local $4 i64)
@@ -8638,7 +7186,7 @@
   i32.shl
   i32.sub
   global.set $~lib/util/number/_K
-  i32.const 6228
+  i32.const 6012
   i32.load
   local.get $3
   i32.const 3
@@ -8646,7 +7194,7 @@
   i32.add
   i64.load
   global.set $~lib/util/number/_frc_pow
-  i32.const 6452
+  i32.const 6236
   i32.load
   local.get $3
   i32.const 1
@@ -8810,15 +7358,15 @@
   local.get $10
   i32.add
  )
- (func $~lib/util/number/dtoa (; 163 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/util/number/dtoa (; 142 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   f64.const 0
   f64.eq
   if
-   i32.const 5392
-   call $~lib/rt/purerc/__retain
+   i32.const 5176
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -8831,17 +7379,17 @@
    local.get $0
    f64.ne
    if
-    i32.const 5416
-    call $~lib/rt/purerc/__retain
+    i32.const 5200
+    call $~lib/rt/pure/__retain
     return
    end
-   i32.const 5440
-   i32.const 5480
+   i32.const 5224
+   i32.const 5264
    local.get $0
    f64.const 0
    f64.lt
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 56
@@ -8855,7 +7403,7 @@
   i32.eq
   if
    local.get $1
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -8866,7 +7414,7 @@
   call $~lib/rt/tlsf/__free
   local.get $2
  )
- (func $~lib/util/number/dtoa_stream (; 164 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
+ (func $~lib/util/number/dtoa_stream (; 143 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
   (local $3 i32)
   local.get $1
   i32.const 1
@@ -8920,8 +7468,8 @@
     i32.add
     local.set $1
     local.get $0
-    i32.const 5440
-    i32.const 5480
+    i32.const 5224
+    i32.const 5264
     local.get $3
     select
     local.get $1
@@ -8937,15 +7485,15 @@
   local.get $2
   call $~lib/util/number/dtoa_core
  )
- (func $~lib/array/Array<f64>#join_flt (; 165 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<f64>#join_flt (; 144 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 5368
-  call $~lib/rt/purerc/__retain
+  i32.const 5152
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -8955,11 +7503,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 5368
-   call $~lib/rt/purerc/__release
+   i32.const 5152
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -8973,16 +7521,16 @@
    f64.load
    call $~lib/util/number/dtoa
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 5368
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 5152
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 5364
+  i32.const 5148
   i32.load
   i32.const 1
   i32.shr_u
@@ -8998,7 +7546,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -9026,7 +7574,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 5368
+     i32.const 5152
      local.get $4
      i32.const 1
      i32.shl
@@ -9062,18 +7610,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 5368
-   call $~lib/rt/purerc/__release
+   i32.const 5152
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 5368
-  call $~lib/rt/purerc/__release
+  i32.const 5152
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<~lib/string/String>#join_str (; 166 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#join_str (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9082,7 +7630,7 @@
   (local $7 i32)
   (local $8 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -9092,11 +7640,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -9108,10 +7656,10 @@
   if
    local.get $6
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -9140,7 +7688,7 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $0
@@ -9171,7 +7719,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $3
   i32.const 0
   local.set $4
@@ -9187,7 +7735,7 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $2
@@ -9242,7 +7790,7 @@
   i32.add
   i32.load
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   if
    local.get $2
@@ -9262,30 +7810,30 @@
    call $~lib/memory/memory.copy
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<~lib/string/String>#join (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#join (; 146 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/string/String>#join_str
   local.set $0
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $std/array/Ref#constructor (; 168 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/array/Ref#constructor (; 147 ;) (type $FUNCSIG$i) (result i32)
   i32.const 0
   i32.const 32
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<std/array/Ref | null>#join_ref (; 169 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<std/array/Ref | null>#join_ref (; 148 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -9293,8 +7841,8 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -9304,11 +7852,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -9318,15 +7866,15 @@
   local.get $2
   i32.eqz
   if
-   i32.const 6720
-   call $~lib/rt/purerc/__retain
+   i32.const 6504
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -9342,7 +7890,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -9358,7 +7906,7 @@
     i32.add
     i32.load
     local.get $5
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $5
     if
      local.get $0
@@ -9366,7 +7914,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 6720
+     i32.const 6504
      i32.const 30
      call $~lib/memory/memory.copy
      local.get $0
@@ -9381,7 +7929,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $3
      i32.const 1
      i32.shl
@@ -9411,7 +7959,7 @@
     i32.shl
     local.get $1
     i32.add
-    i32.const 6720
+    i32.const 6504
     i32.const 30
     call $~lib/memory/memory.copy
     local.get $0
@@ -9428,27 +7976,27 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<i32>#toString (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#toString (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<i32>#join
  )
- (func $~lib/util/number/itoa_stream<i8> (; 171 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<i8> (; 150 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $1
   i32.const 1
@@ -9503,15 +8051,15 @@
   end
   local.get $2
  )
- (func $~lib/array/Array<i8>#join_int (; 172 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i8>#join_int (; 151 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -9521,11 +8069,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -9539,16 +8087,16 @@
    i32.load8_s
    call $~lib/util/number/itoa32
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -9564,7 +8112,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -9590,7 +8138,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -9624,18 +8172,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/util/number/itoa_stream<u16> (; 173 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u16> (; 152 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 1
   i32.shl
@@ -9665,15 +8213,15 @@
   call $~lib/util/number/utoa32_lut
   local.get $1
  )
- (func $~lib/array/Array<u16>#join_int (; 174 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u16>#join_int (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -9683,11 +8231,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -9701,16 +8249,16 @@
    i32.load16_u
    call $~lib/util/number/utoa32
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -9726,7 +8274,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -9754,7 +8302,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -9790,18 +8338,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/util/number/decimalCount64 (; 175 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/decimalCount64 (; 154 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   local.get $0
   i64.const 1000000000000000
   i64.lt_u
@@ -9855,12 +8403,12 @@
    end
   end
  )
- (func $~lib/util/number/utoa64_lut (; 176 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_lut (; 155 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 5076
+  i32.const 4860
   i32.load
   local.set $3
   loop $continue|0
@@ -9952,15 +8500,15 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/utoa64 (; 177 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/utoa64 (; 156 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i64.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -9994,9 +8542,9 @@
    call $~lib/util/number/utoa64_lut
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa_stream<u64> (; 178 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
+ (func $~lib/util/number/itoa_stream<u64> (; 157 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
   local.get $1
   i32.const 1
@@ -10036,15 +8584,15 @@
   end
   local.get $1
  )
- (func $~lib/array/Array<u64>#join_int (; 179 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u64>#join_int (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10054,11 +8602,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -10072,16 +8620,16 @@
    i64.load
    call $~lib/util/number/utoa64
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10097,7 +8645,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -10125,7 +8673,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -10161,18 +8709,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/util/number/itoa64 (; 180 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa64 (; 159 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10180,8 +8728,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   block (result i32)
@@ -10237,9 +8785,9 @@
    i32.store16
   end
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa_stream<i64> (; 181 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
+ (func $~lib/util/number/itoa_stream<i64> (; 160 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
@@ -10302,15 +8850,15 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<i64>#join_int (; 182 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i64>#join_int (; 161 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10320,11 +8868,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -10338,16 +8886,16 @@
    i64.load
    call $~lib/util/number/itoa64
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10363,7 +8911,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -10391,7 +8939,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -10427,23 +8975,23 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<~lib/string/String | null>#toString (; 183 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#toString (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/string/String>#join
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#join_arr (; 184 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#join_arr (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10451,8 +8999,8 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10462,18 +9010,18 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10489,23 +9037,23 @@
    local.get $3
    i32.load
    i32.const 0
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.tee $0
    if (result i32)
     local.get $0
-    i32.const 4536
+    i32.const 4320
     call $~lib/array/Array<i32>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $2
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10521,35 +9069,35 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $1
      local.get $0
-     i32.const 4536
+     i32.const 4320
      call $~lib/array/Array<i32>#join
      local.tee $5
      call $~lib/string/String.__concat
      local.tee $7
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $7
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $6
     if
      local.get $1
-     i32.const 4536
+     i32.const 4320
      call $~lib/string/String.__concat
      local.tee $5
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -10565,31 +9113,31 @@
   i32.add
   i32.load
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   if
    local.get $1
    local.get $0
-   i32.const 4536
+   i32.const 4320
    call $~lib/array/Array<i32>#join
    local.tee $2
    call $~lib/string/String.__concat
    local.tee $3
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/util/number/itoa_stream<u8> (; 185 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u8> (; 164 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 1
   i32.shl
@@ -10619,15 +9167,15 @@
   call $~lib/util/number/utoa32_lut
   local.get $1
  )
- (func $~lib/array/Array<u8>#join_int (; 186 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u8>#join_int (; 165 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10637,11 +9185,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -10655,16 +9203,16 @@
    i32.load8_u
    call $~lib/util/number/utoa32
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $0
-   call $~lib/rt/purerc/__release
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
    return
   end
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10680,7 +9228,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   i32.const 0
   local.set $0
@@ -10706,7 +9254,7 @@
      i32.shl
      local.get $1
      i32.add
-     i32.const 4536
+     i32.const 4320
      local.get $4
      i32.const 1
      i32.shl
@@ -10740,29 +9288,29 @@
    local.get $0
    call $~lib/string/String#substring
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<u8>#join (; 187 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+ (func $~lib/array/Array<u8>#join (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   call $~lib/array/Array<u8>#join_int
   local.set $0
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/array/Array<~lib/array/Array<u8>>#join_arr (; 188 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u8>>#join_arr (; 167 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10770,8 +9318,8 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10781,18 +9329,18 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10808,22 +9356,22 @@
    local.get $3
    i32.load
    i32.const 0
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.tee $0
    if (result i32)
     local.get $0
     call $~lib/array/Array<u8>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $2
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10839,7 +9387,7 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $1
@@ -10849,24 +9397,24 @@
      call $~lib/string/String.__concat
      local.tee $7
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $7
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $6
     if
      local.get $1
-     i32.const 4536
+     i32.const 4320
      call $~lib/string/String.__concat
      local.tee $5
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -10882,7 +9430,7 @@
   i32.add
   i32.load
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   if
    local.get $1
@@ -10892,20 +9440,20 @@
    call $~lib/string/String.__concat
    local.tee $3
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<~lib/array/Array<u32>>#join_arr (; 189 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u32>>#join_arr (; 168 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10913,8 +9461,8 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10924,18 +9472,18 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -10951,23 +9499,23 @@
    local.get $3
    i32.load
    i32.const 0
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.tee $0
    if (result i32)
     local.get $0
-    i32.const 4536
+    i32.const 4320
     call $~lib/array/Array<u32>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $2
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10983,35 +9531,35 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $1
      local.get $0
-     i32.const 4536
+     i32.const 4320
      call $~lib/array/Array<u32>#join
      local.tee $5
      call $~lib/string/String.__concat
      local.tee $7
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $7
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $6
     if
      local.get $1
-     i32.const 4536
+     i32.const 4320
      call $~lib/string/String.__concat
      local.tee $5
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -11027,42 +9575,42 @@
   i32.add
   i32.load
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   if
    local.get $1
    local.get $0
-   i32.const 4536
+   i32.const 4320
    call $~lib/array/Array<u32>#join
    local.tee $2
    call $~lib/string/String.__concat
    local.tee $3
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array<~lib/array/Array<u32>>#join (; 190 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+ (func $~lib/array/Array<~lib/array/Array<u32>>#join (; 169 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   call $~lib/array/Array<~lib/array/Array<u32>>#join_arr
   local.set $0
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr (; 191 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -11070,8 +9618,8 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -11081,18 +9629,18 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $0
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
-  i32.const 4532
+  i32.const 4316
   i32.load
   i32.const 1
   i32.shr_u
@@ -11108,22 +9656,22 @@
    local.get $3
    i32.load
    i32.const 0
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.tee $0
    if (result i32)
     local.get $0
     call $~lib/array/Array<~lib/array/Array<u32>>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $2
-   i32.const 4536
-   call $~lib/rt/purerc/__release
+   i32.const 4320
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -11139,7 +9687,7 @@
     i32.add
     i32.load
     local.get $0
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.tee $0
     if
      local.get $1
@@ -11149,24 +9697,24 @@
      call $~lib/string/String.__concat
      local.tee $7
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $7
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $6
     if
      local.get $1
-     i32.const 4536
+     i32.const 4320
      call $~lib/string/String.__concat
      local.tee $5
      local.get $1
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $1
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -11182,7 +9730,7 @@
   i32.add
   i32.load
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   if
    local.get $1
@@ -11192,31 +9740,20 @@
    call $~lib/string/String.__concat
    local.tee $3
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/rt/purerc/__release (; 192 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  i32.const 8040
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $start:std/array (; 193 ;) (type $FUNCSIG$v)
+ (func $start:std/array (; 171 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -11276,7 +9813,7 @@
   call $~lib/array/Array.isArray<~lib/array/Array<i32> | null>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 37
    i32.const 2
    call $~lib/builtins/abort
@@ -11288,7 +9825,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 38
    i32.const 2
    call $~lib/builtins/abort
@@ -11297,14 +9834,14 @@
   i32.const 0
   i32.const 18
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $0
   local.set $1
   local.get $0
   call $~lib/array/Array.isArray<std/array/P>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 39
    i32.const 2
    call $~lib/builtins/abort
@@ -11313,7 +9850,7 @@
   i32.const 12
   i32.const 19
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.const 1
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
@@ -11323,53 +9860,53 @@
   call $~lib/array/Array.isArray<std/array/P>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 272
+  i32.const 168
   call $~lib/array/Array.isArray<std/array/P>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 42
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 296
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 192
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $6
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 1
   i32.const 1
   i32.const 3
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 376
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 216
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 50
    i32.const 2
    call $~lib/builtins/abort
@@ -11380,20 +9917,20 @@
   i32.const 0
   i32.const 2147483647
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 504
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 344
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 53
    i32.const 2
    call $~lib/builtins/abort
@@ -11404,20 +9941,20 @@
   i32.const 0
   i32.const -3
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 528
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 368
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $1
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 56
    i32.const 2
    call $~lib/builtins/abort
@@ -11428,20 +9965,20 @@
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 552
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 392
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 59
    i32.const 2
    call $~lib/builtins/abort
@@ -11452,67 +9989,67 @@
   i32.const 1
   i32.const 0
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 0
   i32.const 20
-  i32.const 576
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 416
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 62
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 600
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 440
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $6
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 1
   i32.const 1
   i32.const 3
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 640
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 480
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 69
    i32.const 2
    call $~lib/builtins/abort
@@ -11523,21 +10060,21 @@
   i32.const 0
   i32.const 2147483647
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 680
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 520
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 72
    i32.const 2
    call $~lib/builtins/abort
@@ -11548,21 +10085,21 @@
   i32.const 0
   i32.const -3
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 720
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 560
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 75
    i32.const 2
    call $~lib/builtins/abort
@@ -11573,21 +10110,21 @@
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 760
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 600
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 78
    i32.const 2
    call $~lib/builtins/abort
@@ -11598,45 +10135,45 @@
   i32.const 1
   i32.const 0
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 800
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 640
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 81
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.load offset=12
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 87
    i32.const 2
    call $~lib/builtins/abort
@@ -11646,7 +10183,7 @@
   call $std/array/internalCapacity<i32>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 88
    i32.const 2
    call $~lib/builtins/abort
@@ -11662,7 +10199,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 92
    i32.const 2
    call $~lib/builtins/abort
@@ -11674,7 +10211,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 93
    i32.const 2
    call $~lib/builtins/abort
@@ -11686,7 +10223,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 94
    i32.const 2
    call $~lib/builtins/abort
@@ -11698,7 +10235,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 98
    i32.const 2
    call $~lib/builtins/abort
@@ -11708,7 +10245,7 @@
   i32.load offset=12
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 99
    i32.const 2
    call $~lib/builtins/abort
@@ -11720,7 +10257,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 100
    i32.const 2
    call $~lib/builtins/abort
@@ -11735,7 +10272,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 104
    i32.const 2
    call $~lib/builtins/abort
@@ -11747,7 +10284,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 105
    i32.const 2
    call $~lib/builtins/abort
@@ -11760,7 +10297,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 106
    i32.const 2
    call $~lib/builtins/abort
@@ -11775,7 +10312,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 110
    i32.const 2
    call $~lib/builtins/abort
@@ -11787,7 +10324,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 111
    i32.const 2
    call $~lib/builtins/abort
@@ -11800,7 +10337,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 112
    i32.const 2
    call $~lib/builtins/abort
@@ -11813,7 +10350,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 113
    i32.const 2
    call $~lib/builtins/abort
@@ -11828,7 +10365,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 117
    i32.const 2
    call $~lib/builtins/abort
@@ -11840,7 +10377,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 118
    i32.const 2
    call $~lib/builtins/abort
@@ -11853,7 +10390,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 119
    i32.const 2
    call $~lib/builtins/abort
@@ -11866,7 +10403,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 120
    i32.const 2
    call $~lib/builtins/abort
@@ -11879,7 +10416,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 121
    i32.const 2
    call $~lib/builtins/abort
@@ -11897,7 +10434,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 130
    i32.const 2
    call $~lib/builtins/abort
@@ -11909,7 +10446,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 131
    i32.const 2
    call $~lib/builtins/abort
@@ -11921,7 +10458,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 132
    i32.const 2
    call $~lib/builtins/abort
@@ -11931,19 +10468,19 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 888
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 728
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $1
   call $~lib/array/Array<i32>#concat
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   call $std/array/internalCapacity<i32>
   i32.const 3
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 135
    i32.const 2
    call $~lib/builtins/abort
@@ -11956,7 +10493,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 137
    i32.const 2
    call $~lib/builtins/abort
@@ -11969,7 +10506,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 138
    i32.const 2
    call $~lib/builtins/abort
@@ -11982,7 +10519,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 139
    i32.const 2
    call $~lib/builtins/abort
@@ -11995,7 +10532,7 @@
   i32.const 47
   call $~lib/array/Array<i32>#push
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   local.get $4
   call $~lib/array/Array<i32>#concat
@@ -12006,7 +10543,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 146
    i32.const 2
    call $~lib/builtins/abort
@@ -12018,7 +10555,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 147
    i32.const 2
    call $~lib/builtins/abort
@@ -12030,7 +10567,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 148
    i32.const 2
    call $~lib/builtins/abort
@@ -12043,7 +10580,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 149
    i32.const 2
    call $~lib/builtins/abort
@@ -12056,7 +10593,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 150
    i32.const 2
    call $~lib/builtins/abort
@@ -12069,7 +10606,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 151
    i32.const 2
    call $~lib/builtins/abort
@@ -12082,7 +10619,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 152
    i32.const 2
    call $~lib/builtins/abort
@@ -12095,7 +10632,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 153
    i32.const 2
    call $~lib/builtins/abort
@@ -12110,14 +10647,14 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 156
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 0
   call $~lib/array/Array<i32>#concat
@@ -12127,7 +10664,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 159
    i32.const 2
    call $~lib/builtins/abort
@@ -12140,7 +10677,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 160
    i32.const 2
    call $~lib/builtins/abort
@@ -12149,23 +10686,23 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 904
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 744
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $5
   i32.load offset=12
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 163
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
   global.get $std/array/arr
   call $~lib/array/Array<i32>#concat
@@ -12175,7 +10712,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 165
    i32.const 2
    call $~lib/builtins/abort
@@ -12185,31 +10722,31 @@
   i32.load offset=12
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 166
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 920
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 760
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $29
   i32.const 0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 0
   i32.const 3
@@ -12219,16 +10756,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 960
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 800
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $31
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 174
    i32.const 2
    call $~lib/builtins/abort
@@ -12237,12 +10774,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1000
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 840
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $32
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 1
   i32.const 3
@@ -12252,16 +10789,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1040
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 880
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $34
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 176
    i32.const 2
    call $~lib/builtins/abort
@@ -12270,12 +10807,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1080
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 920
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $35
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 1
   i32.const 2
@@ -12285,16 +10822,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1120
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 960
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $7
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 178
    i32.const 2
    call $~lib/builtins/abort
@@ -12303,12 +10840,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1160
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1000
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $10
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 2
   i32.const 2
@@ -12318,16 +10855,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1200
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1040
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $16
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 180
    i32.const 2
    call $~lib/builtins/abort
@@ -12336,12 +10873,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1240
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1080
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $17
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 0
   i32.const 3
@@ -12351,16 +10888,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1280
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1120
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $19
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 182
    i32.const 2
    call $~lib/builtins/abort
@@ -12369,12 +10906,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1320
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1160
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $20
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 1
   i32.const 3
@@ -12384,16 +10921,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1360
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1200
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $22
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 184
    i32.const 2
    call $~lib/builtins/abort
@@ -12402,12 +10939,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1400
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1240
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $23
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 1
   i32.const 2
@@ -12417,16 +10954,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1440
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1280
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $28
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 186
    i32.const 2
    call $~lib/builtins/abort
@@ -12435,12 +10972,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1480
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1320
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $9
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 0
   i32.const -2
@@ -12450,16 +10987,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1520
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1360
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $12
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 188
    i32.const 2
    call $~lib/builtins/abort
@@ -12468,12 +11005,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1560
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1400
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $13
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 0
   i32.const -2
@@ -12483,16 +11020,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1600
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1440
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $25
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 190
    i32.const 2
    call $~lib/builtins/abort
@@ -12501,12 +11038,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1640
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1480
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $26
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -4
   i32.const -3
@@ -12516,16 +11053,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1680
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1520
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $27
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 192
    i32.const 2
    call $~lib/builtins/abort
@@ -12534,12 +11071,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1720
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1560
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $2
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -4
   i32.const -3
@@ -12549,16 +11086,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1760
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1600
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 194
    i32.const 2
    call $~lib/builtins/abort
@@ -12567,12 +11104,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1800
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1640
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $1
   i32.const -4
   i32.const -3
@@ -12582,95 +11119,95 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1840
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1680
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 196
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $29
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $30
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $31
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $32
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $33
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $34
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $35
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $36
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 42
   call $~lib/array/Array<i32>#unshift
@@ -12680,7 +11217,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 204
    i32.const 2
    call $~lib/builtins/abort
@@ -12692,7 +11229,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 205
    i32.const 2
    call $~lib/builtins/abort
@@ -12705,7 +11242,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 206
    i32.const 2
    call $~lib/builtins/abort
@@ -12718,7 +11255,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 207
    i32.const 2
    call $~lib/builtins/abort
@@ -12731,7 +11268,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 208
    i32.const 2
    call $~lib/builtins/abort
@@ -12744,7 +11281,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 209
    i32.const 2
    call $~lib/builtins/abort
@@ -12759,7 +11296,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 213
    i32.const 2
    call $~lib/builtins/abort
@@ -12771,7 +11308,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 214
    i32.const 2
    call $~lib/builtins/abort
@@ -12784,7 +11321,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 215
    i32.const 2
    call $~lib/builtins/abort
@@ -12797,7 +11334,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 216
    i32.const 2
    call $~lib/builtins/abort
@@ -12810,7 +11347,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 217
    i32.const 2
    call $~lib/builtins/abort
@@ -12823,7 +11360,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 218
    i32.const 2
    call $~lib/builtins/abort
@@ -12836,7 +11373,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 219
    i32.const 2
    call $~lib/builtins/abort
@@ -12850,7 +11387,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 228
    i32.const 2
    call $~lib/builtins/abort
@@ -12862,7 +11399,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 229
    i32.const 2
    call $~lib/builtins/abort
@@ -12874,7 +11411,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 230
    i32.const 2
    call $~lib/builtins/abort
@@ -12887,7 +11424,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 231
    i32.const 2
    call $~lib/builtins/abort
@@ -12900,7 +11437,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 232
    i32.const 2
    call $~lib/builtins/abort
@@ -12913,7 +11450,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 233
    i32.const 2
    call $~lib/builtins/abort
@@ -12926,7 +11463,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 234
    i32.const 2
    call $~lib/builtins/abort
@@ -12940,7 +11477,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 238
    i32.const 2
    call $~lib/builtins/abort
@@ -12952,7 +11489,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 239
    i32.const 2
    call $~lib/builtins/abort
@@ -12964,7 +11501,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 240
    i32.const 2
    call $~lib/builtins/abort
@@ -12977,7 +11514,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 241
    i32.const 2
    call $~lib/builtins/abort
@@ -12990,7 +11527,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 242
    i32.const 2
    call $~lib/builtins/abort
@@ -13003,7 +11540,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 243
    i32.const 2
    call $~lib/builtins/abort
@@ -13011,14 +11548,14 @@
   end
   global.get $std/array/arr
   call $~lib/array/Array<i32>#reverse
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.load offset=12
   i32.const 3
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 251
    i32.const 2
    call $~lib/builtins/abort
@@ -13030,7 +11567,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 252
    i32.const 2
    call $~lib/builtins/abort
@@ -13043,7 +11580,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 253
    i32.const 2
    call $~lib/builtins/abort
@@ -13056,7 +11593,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 254
    i32.const 2
    call $~lib/builtins/abort
@@ -13069,7 +11606,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 255
    i32.const 2
    call $~lib/builtins/abort
@@ -13089,7 +11626,7 @@
   global.get $std/array/i
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 265
    i32.const 2
    call $~lib/builtins/abort
@@ -13105,7 +11642,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 268
    i32.const 2
    call $~lib/builtins/abort
@@ -13121,7 +11658,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 271
    i32.const 2
    call $~lib/builtins/abort
@@ -13137,7 +11674,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 274
    i32.const 2
    call $~lib/builtins/abort
@@ -13153,7 +11690,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 277
    i32.const 2
    call $~lib/builtins/abort
@@ -13169,7 +11706,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 280
    i32.const 2
    call $~lib/builtins/abort
@@ -13185,7 +11722,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 283
    i32.const 2
    call $~lib/builtins/abort
@@ -13201,7 +11738,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 286
    i32.const 2
    call $~lib/builtins/abort
@@ -13217,7 +11754,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 289
    i32.const 2
    call $~lib/builtins/abort
@@ -13233,7 +11770,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 292
    i32.const 2
    call $~lib/builtins/abort
@@ -13247,7 +11784,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 299
    i32.const 2
    call $~lib/builtins/abort
@@ -13261,7 +11798,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 302
    i32.const 2
    call $~lib/builtins/abort
@@ -13273,7 +11810,7 @@
   call $~lib/array/Array<i32>#includes
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 305
    i32.const 2
    call $~lib/builtins/abort
@@ -13285,7 +11822,7 @@
   call $~lib/array/Array<i32>#includes
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 308
    i32.const 2
    call $~lib/builtins/abort
@@ -13299,7 +11836,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 311
    i32.const 2
    call $~lib/builtins/abort
@@ -13313,7 +11850,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 314
    i32.const 2
    call $~lib/builtins/abort
@@ -13327,7 +11864,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 317
    i32.const 2
    call $~lib/builtins/abort
@@ -13341,7 +11878,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 320
    i32.const 2
    call $~lib/builtins/abort
@@ -13355,7 +11892,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 323
    i32.const 2
    call $~lib/builtins/abort
@@ -13369,7 +11906,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 326
    i32.const 2
    call $~lib/builtins/abort
@@ -13379,14 +11916,14 @@
   i32.const 1
   i32.const 1
   call $~lib/array/Array<i32>#splice
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.load offset=12
   i32.const 4
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 330
    i32.const 2
    call $~lib/builtins/abort
@@ -13398,7 +11935,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 331
    i32.const 2
    call $~lib/builtins/abort
@@ -13411,7 +11948,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 332
    i32.const 2
    call $~lib/builtins/abort
@@ -13424,7 +11961,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 333
    i32.const 2
    call $~lib/builtins/abort
@@ -13433,11 +11970,11 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1880
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1720
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $38
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   i32.const 2147483647
@@ -13446,16 +11983,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1920
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1760
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $40
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 340
    i32.const 2
    call $~lib/builtins/abort
@@ -13465,16 +12002,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 1960
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1800
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $41
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 341
    i32.const 2
    call $~lib/builtins/abort
@@ -13483,12 +12020,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 1976
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1816
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $42
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 2
   i32.const 2147483647
@@ -13497,16 +12034,16 @@
   i32.const 3
   i32.const 2
   i32.const 17
-  i32.const 2016
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1856
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $44
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 344
    i32.const 2
    call $~lib/builtins/abort
@@ -13516,16 +12053,16 @@
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 2048
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1888
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $45
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 345
    i32.const 2
    call $~lib/builtins/abort
@@ -13534,12 +12071,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2072
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1912
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $46
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 2
   i32.const 2
@@ -13548,16 +12085,16 @@
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 2112
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1952
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $48
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 348
    i32.const 2
    call $~lib/builtins/abort
@@ -13567,16 +12104,16 @@
   i32.const 3
   i32.const 2
   i32.const 17
-  i32.const 2136
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 1976
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $49
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 349
    i32.const 2
    call $~lib/builtins/abort
@@ -13585,12 +12122,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2168
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2008
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $50
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 0
   i32.const 1
@@ -13599,16 +12136,16 @@
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 2208
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2048
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $52
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 352
    i32.const 2
    call $~lib/builtins/abort
@@ -13618,16 +12155,16 @@
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 2232
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2072
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $29
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 353
    i32.const 2
    call $~lib/builtins/abort
@@ -13636,12 +12173,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2264
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2104
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $30
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -1
   i32.const 2147483647
@@ -13650,16 +12187,16 @@
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 2304
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2144
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $32
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 356
    i32.const 2
    call $~lib/builtins/abort
@@ -13669,16 +12206,16 @@
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 2328
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2168
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $33
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 357
    i32.const 2
    call $~lib/builtins/abort
@@ -13687,12 +12224,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2360
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2200
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $34
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -2
   i32.const 2147483647
@@ -13701,16 +12238,16 @@
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 2400
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2240
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $36
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 360
    i32.const 2
    call $~lib/builtins/abort
@@ -13720,16 +12257,16 @@
   i32.const 3
   i32.const 2
   i32.const 17
-  i32.const 2424
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2264
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $7
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 361
    i32.const 2
    call $~lib/builtins/abort
@@ -13738,12 +12275,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2456
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2296
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $10
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -2
   i32.const 1
@@ -13752,16 +12289,16 @@
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 2496
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2336
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $16
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 364
    i32.const 2
    call $~lib/builtins/abort
@@ -13771,16 +12308,16 @@
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 2520
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2360
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $17
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 365
    i32.const 2
    call $~lib/builtins/abort
@@ -13789,12 +12326,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2552
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2392
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $18
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -7
   i32.const 1
@@ -13803,16 +12340,16 @@
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 2592
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2432
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $20
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 368
    i32.const 2
    call $~lib/builtins/abort
@@ -13822,16 +12359,16 @@
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 2616
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2456
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $21
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 369
    i32.const 2
    call $~lib/builtins/abort
@@ -13840,12 +12377,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2648
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2488
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $22
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const -2
   i32.const -1
@@ -13854,16 +12391,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 2688
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2528
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $24
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 372
    i32.const 2
    call $~lib/builtins/abort
@@ -13873,16 +12410,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2704
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2544
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $28
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 373
    i32.const 2
    call $~lib/builtins/abort
@@ -13891,12 +12428,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2744
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2584
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $9
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 1
   i32.const -2
@@ -13905,16 +12442,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 2784
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2624
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $12
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 376
    i32.const 2
    call $~lib/builtins/abort
@@ -13924,16 +12461,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2800
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2640
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $13
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 377
    i32.const 2
    call $~lib/builtins/abort
@@ -13942,12 +12479,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2840
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2680
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $14
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 4
   i32.const 0
@@ -13956,16 +12493,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 2880
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2720
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $26
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 380
    i32.const 2
    call $~lib/builtins/abort
@@ -13975,16 +12512,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2896
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2736
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $8
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 381
    i32.const 2
    call $~lib/builtins/abort
@@ -13993,12 +12530,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2936
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2776
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $27
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $0
   i32.const 7
   i32.const 0
@@ -14007,16 +12544,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 2976
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2816
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $6
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 384
    i32.const 2
    call $~lib/builtins/abort
@@ -14026,16 +12563,16 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 2992
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2832
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 385
    i32.const 2
    call $~lib/builtins/abort
@@ -14044,12 +12581,12 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 3032
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2872
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
   local.get $0
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.tee $37
   i32.const 7
   i32.const 5
@@ -14058,16 +12595,16 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 3072
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2912
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 388
    i32.const 2
    call $~lib/builtins/abort
@@ -14077,127 +12614,127 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 3088
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 2928
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 389
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $38
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $37
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $39
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $40
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $41
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $42
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $43
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $44
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $45
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $46
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $47
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $48
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $49
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $50
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $51
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $52
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $29
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $30
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $31
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $32
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $33
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $34
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $35
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $36
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 0
   i32.const 0
@@ -14221,7 +12758,7 @@
   global.get $std/array/i
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 402
    i32.const 2
    call $~lib/builtins/abort
@@ -14236,7 +12773,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 405
    i32.const 2
    call $~lib/builtins/abort
@@ -14251,7 +12788,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 408
    i32.const 2
    call $~lib/builtins/abort
@@ -14266,7 +12803,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 416
    i32.const 2
    call $~lib/builtins/abort
@@ -14278,7 +12815,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 417
    i32.const 2
    call $~lib/builtins/abort
@@ -14293,7 +12830,7 @@
   i32.eq
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 419
    i32.const 2
    call $~lib/builtins/abort
@@ -14320,7 +12857,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 432
    i32.const 2
    call $~lib/builtins/abort
@@ -14332,7 +12869,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 433
    i32.const 2
    call $~lib/builtins/abort
@@ -14351,7 +12888,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 443
    i32.const 2
    call $~lib/builtins/abort
@@ -14362,7 +12899,7 @@
   call $~lib/array/Array<i32>#every
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 446
    i32.const 2
    call $~lib/builtins/abort
@@ -14375,7 +12912,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 454
    i32.const 2
    call $~lib/builtins/abort
@@ -14387,7 +12924,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 455
    i32.const 2
    call $~lib/builtins/abort
@@ -14398,7 +12935,7 @@
   call $~lib/array/Array<i32>#every
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 457
    i32.const 2
    call $~lib/builtins/abort
@@ -14423,7 +12960,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 470
    i32.const 2
    call $~lib/builtins/abort
@@ -14435,7 +12972,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 471
    i32.const 2
    call $~lib/builtins/abort
@@ -14454,7 +12991,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 481
    i32.const 2
    call $~lib/builtins/abort
@@ -14465,7 +13002,7 @@
   call $~lib/array/Array<i32>#some
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 484
    i32.const 2
    call $~lib/builtins/abort
@@ -14476,7 +13013,7 @@
   call $~lib/array/Array<i32>#some
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 492
    i32.const 2
    call $~lib/builtins/abort
@@ -14488,7 +13025,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 493
    i32.const 2
    call $~lib/builtins/abort
@@ -14501,7 +13038,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 495
    i32.const 2
    call $~lib/builtins/abort
@@ -14524,7 +13061,7 @@
   call $~lib/array/Array<i32>#some
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 508
    i32.const 2
    call $~lib/builtins/abort
@@ -14536,7 +13073,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 509
    i32.const 2
    call $~lib/builtins/abort
@@ -14558,7 +13095,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 520
    i32.const 2
    call $~lib/builtins/abort
@@ -14574,7 +13111,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 529
    i32.const 2
    call $~lib/builtins/abort
@@ -14586,7 +13123,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -14602,7 +13139,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 533
    i32.const 2
    call $~lib/builtins/abort
@@ -14630,7 +13167,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 547
    i32.const 2
    call $~lib/builtins/abort
@@ -14642,7 +13179,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 548
    i32.const 2
    call $~lib/builtins/abort
@@ -14663,7 +13200,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 573
    i32.const 2
    call $~lib/builtins/abort
@@ -14706,7 +13243,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 587
    i32.const 2
    call $~lib/builtins/abort
@@ -14722,7 +13259,7 @@
   f32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 588
    i32.const 2
    call $~lib/builtins/abort
@@ -14733,13 +13270,13 @@
   global.get $std/array/arr
   i32.const 23
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 6
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 597
    i32.const 2
    call $~lib/builtins/abort
@@ -14751,7 +13288,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 598
    i32.const 2
    call $~lib/builtins/abort
@@ -14762,13 +13299,13 @@
   global.get $std/array/arr
   i32.const 24
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 406
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 605
    i32.const 2
    call $~lib/builtins/abort
@@ -14791,13 +13328,13 @@
   global.get $std/array/arr
   i32.const 25
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 1
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 620
    i32.const 2
    call $~lib/builtins/abort
@@ -14809,7 +13346,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 621
    i32.const 2
    call $~lib/builtins/abort
@@ -14822,7 +13359,7 @@
   i32.const 3
   call $~lib/array/Array<i32>#push
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 26
   call $~lib/array/Array<i32>#filter
@@ -14832,7 +13369,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 631
    i32.const 2
    call $~lib/builtins/abort
@@ -14843,13 +13380,13 @@
   global.get $std/array/arr
   i32.const 27
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 6
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 640
    i32.const 2
    call $~lib/builtins/abort
@@ -14861,7 +13398,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 641
    i32.const 2
    call $~lib/builtins/abort
@@ -14872,13 +13409,13 @@
   global.get $std/array/arr
   i32.const 28
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 406
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 648
    i32.const 2
    call $~lib/builtins/abort
@@ -14901,13 +13438,13 @@
   global.get $std/array/arr
   i32.const 29
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/i
   i32.const 1
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 663
    i32.const 2
    call $~lib/builtins/abort
@@ -14919,7 +13456,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 664
    i32.const 2
    call $~lib/builtins/abort
@@ -14932,7 +13469,7 @@
   i32.const 3
   call $~lib/array/Array<i32>#push
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 30
   i32.const 0
@@ -14943,7 +13480,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 674
    i32.const 2
    call $~lib/builtins/abort
@@ -14959,7 +13496,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 678
    i32.const 2
    call $~lib/builtins/abort
@@ -14975,7 +13512,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 681
    i32.const 2
    call $~lib/builtins/abort
@@ -14987,7 +13524,7 @@
   call $~lib/array/Array<i32>#reduce<i32>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 684
    i32.const 2
    call $~lib/builtins/abort
@@ -15003,7 +13540,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 692
    i32.const 2
    call $~lib/builtins/abort
@@ -15015,7 +13552,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 693
    i32.const 2
    call $~lib/builtins/abort
@@ -15031,7 +13568,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 695
    i32.const 2
    call $~lib/builtins/abort
@@ -15059,7 +13596,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 708
    i32.const 2
    call $~lib/builtins/abort
@@ -15071,7 +13608,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 709
    i32.const 2
    call $~lib/builtins/abort
@@ -15093,7 +13630,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 719
    i32.const 2
    call $~lib/builtins/abort
@@ -15109,7 +13646,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 723
    i32.const 2
    call $~lib/builtins/abort
@@ -15125,7 +13662,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 726
    i32.const 2
    call $~lib/builtins/abort
@@ -15137,7 +13674,7 @@
   call $~lib/array/Array<i32>#reduceRight<i32>
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 729
    i32.const 2
    call $~lib/builtins/abort
@@ -15153,7 +13690,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 737
    i32.const 2
    call $~lib/builtins/abort
@@ -15165,7 +13702,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 738
    i32.const 2
    call $~lib/builtins/abort
@@ -15181,7 +13718,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 740
    i32.const 2
    call $~lib/builtins/abort
@@ -15209,7 +13746,7 @@
   i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 753
    i32.const 2
    call $~lib/builtins/abort
@@ -15219,7 +13756,7 @@
   i32.load offset=12
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 754
    i32.const 2
    call $~lib/builtins/abort
@@ -15243,11 +13780,11 @@
   i32.const 8
   i32.const 2
   i32.const 22
-  i32.const 3360
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3200
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $11
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
   i32.const 0
   global.set $~lib/argc
@@ -15267,20 +13804,20 @@
   local.get $10
   local.get $1
   call $~lib/array/Array<f32>#sort
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
   i32.const 8
   i32.const 2
   i32.const 22
-  i32.const 3408
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3248
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $12
   call $std/array/isArraysEqual<f32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 843
    i32.const 2
    call $~lib/builtins/abort
@@ -15289,11 +13826,11 @@
   i32.const 8
   i32.const 3
   i32.const 23
-  i32.const 3456
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3296
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $13
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $15
   i32.const 0
   global.set $~lib/argc
@@ -15313,20 +13850,20 @@
   local.get $15
   local.get $1
   call $~lib/array/Array<f64>#sort
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
   i32.const 8
   i32.const 3
   i32.const 23
-  i32.const 3536
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3376
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $14
   call $std/array/isArraysEqual<f64>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 847
    i32.const 2
    call $~lib/builtins/abort
@@ -15335,11 +13872,11 @@
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 3616
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3456
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $25
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $16
   i32.const 0
   global.set $~lib/argc
@@ -15359,21 +13896,21 @@
   local.get $16
   local.get $1
   call $~lib/array/Array<i32>#sort
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
   i32.const 5
   i32.const 2
   i32.const 17
-  i32.const 3656
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3496
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $26
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 851
    i32.const 2
    call $~lib/builtins/abort
@@ -15382,11 +13919,11 @@
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 3696
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3536
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $8
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $17
   i32.const 0
   global.set $~lib/argc
@@ -15406,21 +13943,21 @@
   local.get $17
   local.get $6
   call $~lib/array/Array<i32>#sort
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
   i32.const 5
   i32.const 2
   i32.const 21
-  i32.const 3736
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3576
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $27
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 855
    i32.const 2
    call $~lib/builtins/abort
@@ -15429,47 +13966,47 @@
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 3776
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3616
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $28
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 3792
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3632
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $6
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $18
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 3816
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3656
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $19
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 3840
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3680
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $5
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $20
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 3872
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3712
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $7
   i32.const 64
   call $std/array/createReverseOrderedArray
@@ -15494,16 +14031,16 @@
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 3960
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3800
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 875
    i32.const 2
    call $~lib/builtins/abort
@@ -15515,16 +14052,16 @@
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 3984
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 3824
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 878
    i32.const 2
    call $~lib/builtins/abort
@@ -15539,7 +14076,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 881
    i32.const 2
    call $~lib/builtins/abort
@@ -15554,7 +14091,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 884
    i32.const 2
    call $~lib/builtins/abort
@@ -15569,7 +14106,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 887
    i32.const 2
    call $~lib/builtins/abort
@@ -15584,7 +14121,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 890
    i32.const 2
    call $~lib/builtins/abort
@@ -15599,7 +14136,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 893
    i32.const 2
    call $~lib/builtins/abort
@@ -15608,63 +14145,63 @@
   local.get $9
   call $std/array/assertSortedDefault<i32>
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 64
   call $std/array/createRandomOrderedArray
   local.set $3
@@ -15684,38 +14221,38 @@
   i32.const 52
   call $std/array/assertSorted<i32>
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   call $std/array/createReverseOrderedNestedArray
   local.tee $0
   i32.const 53
   call $std/array/assertSorted<~lib/array/Array<i32>>
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   call $std/array/createReverseOrderedElementsArray
   local.tee $0
   i32.const 54
   call $std/array/assertSorted<~lib/array/Array<i32>>
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 7
   i32.const 2
   i32.const 27
-  i32.const 4288
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4072
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $4
   i32.const 7
   i32.const 2
   i32.const 27
-  i32.const 4336
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4120
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $5
   i32.const 1
   global.set $~lib/argc
@@ -15743,7 +14280,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 930
    i32.const 2
    call $~lib/builtins/abort
@@ -15772,37 +14309,37 @@
   local.get $6
   call $std/array/assertSorted<~lib/array/Array<i32>>
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 2
   i32.const 0
   i32.const 29
-  i32.const 4456
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4240
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $9
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $9
   call $~lib/array/Array<bool>#join_bool
   local.set $11
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $11
-  i32.const 4560
+  i32.const 4344
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 941
    i32.const 2
    call $~lib/builtins/abort
@@ -15811,19 +14348,19 @@
   i32.const 3
   i32.const 2
   i32.const 17
-  i32.const 4600
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4384
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $25
-  i32.const 4272
+  i32.const 4056
   call $~lib/array/Array<i32>#join
   local.tee $26
-  i32.const 5104
+  i32.const 4888
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 942
    i32.const 2
    call $~lib/builtins/abort
@@ -15832,19 +14369,19 @@
   i32.const 3
   i32.const 2
   i32.const 21
-  i32.const 5136
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4920
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $8
-  i32.const 5168
+  i32.const 4952
   call $~lib/array/Array<u32>#join
   local.tee $27
-  i32.const 5104
+  i32.const 4888
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 943
    i32.const 2
    call $~lib/builtins/abort
@@ -15853,19 +14390,19 @@
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 5192
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 4976
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $2
-  i32.const 5216
+  i32.const 5000
   call $~lib/array/Array<i32>#join
   local.tee $6
-  i32.const 5240
+  i32.const 5024
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 944
    i32.const 2
    call $~lib/builtins/abort
@@ -15874,25 +14411,25 @@
   i32.const 6
   i32.const 3
   i32.const 23
-  i32.const 5304
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 5088
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $12
-  i32.const 5368
-  call $~lib/rt/purerc/__retain
+  i32.const 5152
+  call $~lib/rt/pure/__retain
   drop
   local.get $12
   call $~lib/array/Array<f64>#join_flt
   local.set $13
-  i32.const 5368
-  call $~lib/rt/purerc/__release
+  i32.const 5152
+  call $~lib/rt/pure/__release
   local.get $13
-  i32.const 6568
+  i32.const 6352
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 945
    i32.const 2
    call $~lib/builtins/abort
@@ -15901,19 +14438,19 @@
   i32.const 3
   i32.const 2
   i32.const 28
-  i32.const 6688
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6472
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $4
-  i32.const 4272
+  i32.const 4056
   call $~lib/array/Array<~lib/string/String>#join
   local.tee $5
-  i32.const 6664
+  i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 946
    i32.const 2
    call $~lib/builtins/abort
@@ -15923,123 +14460,123 @@
   i32.const 2
   i32.const 33
   i32.const 0
-  call $~lib/rt/common/__allocArray
+  call $~lib/rt/__allocArray
   local.tee $1
   i32.load offset=4
   local.tee $0
   call $std/array/Ref#constructor
   local.tee $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $0
   i32.const 0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $0
   call $std/array/Ref#constructor
   local.tee $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store offset=8
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $14
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $14
   call $~lib/array/Array<std/array/Ref | null>#join_ref
   local.set $1
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
-  i32.const 6768
+  i32.const 6552
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 948
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
   i32.const 2
   i32.const 17
-  i32.const 6848
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6632
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $15
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $29
   i32.const 1
   i32.const 2
   i32.const 17
-  i32.const 6864
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6648
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $16
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $30
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 6888
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6672
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $17
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $31
   i32.const 4
   i32.const 2
   i32.const 17
-  i32.const 6912
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6696
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $18
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $32
   local.get $29
   call $~lib/array/Array<i32>#toString
   local.tee $19
-  i32.const 4272
+  i32.const 4056
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 958
    i32.const 2
    call $~lib/builtins/abort
@@ -16048,12 +14585,12 @@
   local.get $30
   call $~lib/array/Array<i32>#toString
   local.tee $20
-  i32.const 6664
+  i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 959
    i32.const 2
    call $~lib/builtins/abort
@@ -16062,12 +14599,12 @@
   local.get $31
   call $~lib/array/Array<i32>#toString
   local.tee $21
-  i32.const 6944
+  i32.const 6728
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 960
    i32.const 2
    call $~lib/builtins/abort
@@ -16076,12 +14613,12 @@
   local.get $32
   call $~lib/array/Array<i32>#toString
   local.tee $22
-  i32.const 6968
+  i32.const 6752
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 961
    i32.const 2
    call $~lib/builtins/abort
@@ -16090,25 +14627,25 @@
   i32.const 3
   i32.const 0
   i32.const 34
-  i32.const 7000
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6784
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $33
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $33
   call $~lib/array/Array<i8>#join_int
   local.set $2
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $2
-  i32.const 7024
+  i32.const 6808
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 963
    i32.const 2
    call $~lib/builtins/abort
@@ -16117,25 +14654,25 @@
   i32.const 3
   i32.const 1
   i32.const 35
-  i32.const 7056
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6840
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $34
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $34
   call $~lib/array/Array<u16>#join_int
   local.set $6
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $6
-  i32.const 7080
+  i32.const 6864
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 964
    i32.const 2
    call $~lib/builtins/abort
@@ -16144,25 +14681,25 @@
   i32.const 3
   i32.const 3
   i32.const 30
-  i32.const 7120
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 6904
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $35
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $35
   call $~lib/array/Array<u64>#join_int
   local.set $4
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $4
-  i32.const 7160
+  i32.const 6944
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 965
    i32.const 2
    call $~lib/builtins/abort
@@ -16171,25 +14708,25 @@
   i32.const 4
   i32.const 3
   i32.const 36
-  i32.const 7224
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7008
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $36
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $36
   call $~lib/array/Array<i64>#join_int
   local.set $5
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $5
-  i32.const 7272
+  i32.const 7056
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 966
    i32.const 2
    call $~lib/builtins/abort
@@ -16198,20 +14735,20 @@
   i32.const 7
   i32.const 2
   i32.const 27
-  i32.const 7376
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7160
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $23
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $24
   call $~lib/array/Array<~lib/string/String | null>#toString
   local.tee $28
-  i32.const 7424
+  i32.const 7208
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 970
    i32.const 2
    call $~lib/builtins/abort
@@ -16220,18 +14757,18 @@
   i32.const 4
   i32.const 2
   i32.const 28
-  i32.const 7520
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7304
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $9
   call $~lib/array/Array<~lib/string/String | null>#toString
   local.tee $11
-  i32.const 7552
+  i32.const 7336
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 971
    i32.const 2
    call $~lib/builtins/abort
@@ -16241,47 +14778,47 @@
   i32.const 2
   i32.const 24
   i32.const 0
-  call $~lib/rt/common/__allocArray
+  call $~lib/rt/__allocArray
   local.tee $3
   i32.load offset=4
   local.tee $0
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 7584
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7368
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $12
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $0
   i32.const 2
   i32.const 2
   i32.const 17
-  i32.const 7608
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7392
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $13
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $7
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $7
   call $~lib/array/Array<~lib/array/Array<i32>>#join_arr
   local.set $1
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $1
-  i32.const 7632
+  i32.const 7416
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 974
    i32.const 2
    call $~lib/builtins/abort
@@ -16291,47 +14828,47 @@
   i32.const 2
   i32.const 37
   i32.const 0
-  call $~lib/rt/common/__allocArray
+  call $~lib/rt/__allocArray
   local.tee $3
   i32.load offset=4
   local.tee $0
   i32.const 2
   i32.const 0
   i32.const 20
-  i32.const 7664
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7448
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $14
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $0
   i32.const 2
   i32.const 0
   i32.const 20
-  i32.const 7688
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7472
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $25
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $10
   call $~lib/array/Array<~lib/array/Array<u8>>#join_arr
   local.set $3
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $3
-  i32.const 7632
+  i32.const 7416
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 977
    i32.const 2
    call $~lib/builtins/abort
@@ -16341,7 +14878,7 @@
   i32.const 2
   i32.const 39
   i32.const 0
-  call $~lib/rt/common/__allocArray
+  call $~lib/rt/__allocArray
   local.tee $26
   i32.load offset=4
   local.set $8
@@ -16349,121 +14886,121 @@
   i32.const 2
   i32.const 38
   i32.const 0
-  call $~lib/rt/common/__allocArray
+  call $~lib/rt/__allocArray
   local.tee $0
   i32.load offset=4
   i32.const 1
   i32.const 2
   i32.const 21
-  i32.const 7712
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  i32.const 7496
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.tee $27
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $8
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $26
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
-  i32.const 4536
-  call $~lib/rt/purerc/__retain
+  i32.const 4320
+  call $~lib/rt/pure/__retain
   drop
   local.get $8
   call $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr
   local.set $0
-  i32.const 4536
-  call $~lib/rt/purerc/__release
+  i32.const 4320
+  call $~lib/rt/pure/__release
   local.get $0
-  i32.const 6664
+  i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 980
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $29
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $30
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $31
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $32
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $33
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $34
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $35
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $36
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   global.get $std/array/arr
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/main (; 194 ;) (type $FUNCSIG$v)
+ (func $std/array/main (; 172 ;) (type $FUNCSIG$v)
   global.get $~lib/started
   i32.eqz
   if
@@ -16472,7 +15009,7 @@
    global.set $~lib/started
   end
  )
- (func $~lib/rt/purerc/markGray (; 195 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 173 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -16493,10 +15030,487 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 196 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 174 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $2
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $3
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $2
+   local.get $3
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=20
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  if
+   local.get $5
+   local.get $4
+   i32.store offset=20
+  end
+  local.get $4
+  if
+   local.get $4
+   local.get $5
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.get $1
+  i32.eq
+  if
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   local.get $4
+   i32.store offset=96
+   local.get $4
+   i32.eqz
+   if
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $3
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 175 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $2
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $3
+    i32.const 3
+    i32.and
+    local.get $2
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $3
+  i32.const 2
+  i32.and
+  if
+   local.get $1
+   i32.const 4
+   i32.sub
+   i32.load
+   local.tee $2
+   i32.load
+   local.tee $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $7
+   i32.const 1073741808
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    local.get $2
+    call $~lib/rt/tlsf/removeBlock
+    local.get $2
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $2
+   else    
+    local.get $1
+   end
+   local.set $1
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  i32.add
+  i32.ne
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $4
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $4
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $4
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $2
+  i32.store offset=20
+  local.get $2
+  if
+   local.get $2
+   local.get $1
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $3
+  i32.shl
+  i32.or
+  i32.store
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/freeBlock (; 176 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.tee $2
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 530
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+ )
+ (func $~lib/rt/pure/scanBlack (; 177 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -16507,9 +15521,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 197 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 178 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -16526,7 +15540,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -16539,11 +15553,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 198 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 179 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -16565,24 +15579,24 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__collect (; 199 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/__collect (; 180 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.tee $5
   local.tee $2
   local.set $3
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $0
   loop $repeat|0
    block $break|0
@@ -16610,7 +15624,7 @@
     end
     if
      local.get $4
-     call $~lib/rt/purerc/markGray
+     call $~lib/rt/pure/markGray
      local.get $2
      local.get $4
      i32.store
@@ -16648,7 +15662,7 @@
    end
   end
   local.get $2
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.set $0
   loop $repeat|1
@@ -16659,7 +15673,7 @@
     br_if $break|1
     local.get $0
     i32.load
-    call $~lib/rt/purerc/scan
+    call $~lib/rt/pure/scan
     local.get $0
     i32.const 4
     i32.add
@@ -16684,7 +15698,7 @@
     i32.and
     i32.store offset=4
     local.get $1
-    call $~lib/rt/purerc/collectWhite
+    call $~lib/rt/pure/collectWhite
     local.get $0
     i32.const 4
     i32.add
@@ -16693,9 +15707,9 @@
    end
   end
   local.get $5
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/common/__instanceof (; 200 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/__instanceof (; 181 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
@@ -16703,7 +15717,7 @@
   local.tee $0
   if (result i32)
    local.get $0
-   i32.const 7720
+   i32.const 7696
    i32.load
    i32.le_u
   else   
@@ -16721,7 +15735,7 @@
     local.get $0
     i32.const 3
     i32.shl
-    i32.const 7720
+    i32.const 7696
     i32.add
     i32.load offset=4
     local.tee $0
@@ -16730,9 +15744,1026 @@
   end
   i32.const 0
  )
- (func $~lib/rt/purerc/__visit (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__typeinfo (; 182 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 8040
+  if (result i32)
+   local.get $0
+   i32.const 7696
+   i32.load
+   i32.gt_u
+  else   
+   i32.const 1
+  end
+  if
+   i32.const 240
+   i32.const 7568
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 3
+  i32.shl
+  i32.const 7696
+  i32.add
+  i32.load
+ )
+ (func $~lib/rt/tlsf/addMemory (; 183 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
+  end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 184 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  i32.const 8016
+  i32.const 0
+  i32.store
+  i32.const 9584
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 8016
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 8016
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 8016
+  i32.const 9600
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 8016
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 185 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 7608
+   i32.const 7520
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 7520
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 187 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 188 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 189 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 190 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/reallocateBlock (; 191 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
+  local.set $3
+  local.get $1
+  i32.load
+  local.tee $4
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 491
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  local.get $4
+  i32.const -4
+  i32.and
+  i32.le_u
+  if
+   local.get $0
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
+   local.get $1
+   local.get $2
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $6
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $4
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $5
+   local.get $3
+   i32.ge_u
+   if
+    local.get $0
+    local.get $6
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    i32.const 3
+    i32.and
+    local.get $5
+    i32.or
+    i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
+    local.get $0
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
+   end
+  end
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $3
+  local.get $1
+  i32.load offset=4
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.load offset=8
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  call $~lib/memory/memory.copy
+  local.get $1
+  local.get $4
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__realloc (; 192 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 552
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 553
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/__free (; 193 ;) (type $FUNCSIG$vi) (param $0 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 560
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 561
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/increment (; 194 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 195 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 8016
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/growRoots (; 196 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $2
+  i32.sub
+  local.tee $1
+  i32.const 1
+  i32.shl
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
+  i32.gt_u
+  select
+  local.tee $3
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.tee $0
+  local.get $2
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 197 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 198 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  i32.const 268435455
+  i32.and
+  local.set $1
+  local.get $0
+  call $~lib/rt/pure/onDecrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $2
+   i32.const -2147483648
+   i32.and
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   end
+  else   
+   local.get $1
+   i32.const 0
+   i32.le_u
+   if
+    i32.const 0
+    i32.const 7664
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   if
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
+    i32.or
+    i32.store offset=4
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/__retainRelease (; 199 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.ne
+  if
+   local.get $0
+   i32.const 8016
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/increment
+   end
+   local.get $1
+   i32.const 8016
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (; 200 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  i32.const 8016
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__visit_impl (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $0
+  loop $continue|0
+   local.get $2
+   local.get $0
+   i32.lt_u
+   if
+    local.get $2
+    i32.load
+    local.tee $3
+    if
+     local.get $3
+     local.get $1
+     call $~lib/rt/pure/__visit
+    end
+    local.get $2
+    i32.const 4
+    i32.add
+    local.set $2
+    br $continue|0
+   end
+  end
+ )
+ (func $~lib/rt/pure/__visit (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.const 8016
   i32.lt_u
   if
    return
@@ -16764,7 +16795,7 @@
          br $case5|0
         end
         local.get $0
-        call $~lib/rt/purerc/decrement
+        call $~lib/rt/pure/decrement
         br $break|0
        end
        local.get $0
@@ -16775,7 +16806,7 @@
        i32.le_u
        if
         i32.const 0
-        i32.const 320
+        i32.const 7664
         i32.const 74
         i32.const 17
         call $~lib/builtins/abort
@@ -16788,11 +16819,11 @@
        i32.sub
        i32.store offset=4
        local.get $0
-       call $~lib/rt/purerc/markGray
+       call $~lib/rt/pure/markGray
        br $break|0
       end
       local.get $0
-      call $~lib/rt/purerc/scan
+      call $~lib/rt/pure/scan
       br $break|0
      end
      local.get $0
@@ -16808,7 +16839,7 @@
      i32.ne
      if
       i32.const 0
-      i32.const 320
+      i32.const 7664
       i32.const 85
       i32.const 6
       call $~lib/builtins/abort
@@ -16824,54 +16855,23 @@
      i32.and
      if
       local.get $0
-      call $~lib/rt/purerc/scanBlack
+      call $~lib/rt/pure/scanBlack
      end
      br $break|0
     end
     local.get $0
-    call $~lib/rt/purerc/collectWhite
+    call $~lib/rt/pure/collectWhite
     br $break|0
    end
    i32.const 0
-   i32.const 320
+   i32.const 7664
    i32.const 96
    i32.const 24
    call $~lib/builtins/abort
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__visit_impl (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $0
-  loop $continue|0
-   local.get $2
-   local.get $0
-   i32.lt_u
-   if
-    local.get $2
-    i32.load
-    local.tee $3
-    if
-     local.get $3
-     local.get $1
-     call $~lib/rt/purerc/__visit
-    end
-    local.get $2
-    i32.const 4
-    i32.add
-    local.set $2
-    br $continue|0
-   end
-  end
- )
- (func $~lib/builtins/__visit_members (; 203 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 203 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   block $block$16$break
    block $switch$1$case$41
     block $switch$1$case$40
@@ -16940,7 +16940,7 @@
   if
    local.get $0
    local.get $1
-   call $~lib/rt/purerc/__visit
+   call $~lib/rt/pure/__visit
   end
  )
  (func $null (; 204 ;) (type $FUNCSIG$v)
diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat
index 4c0441e0..8a5c6f0f 100644
--- a/tests/compiler/std/array.untouched.wat
+++ b/tests/compiler/std/array.untouched.wat
@@ -2,12 +2,10 @@
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
- (type $FUNCSIG$vi (func (param i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$fiii (func (param i32 i32 i32) (result f32)))
  (type $FUNCSIG$fii (func (param i32 i32) (result f32)))
  (type $FUNCSIG$d (func (result f64)))
@@ -18,6 +16,7 @@
  (type $FUNCSIG$idd (func (param f64 f64) (result i32)))
  (type $FUNCSIG$dii (func (param i32 i32) (result f64)))
  (type $FUNCSIG$id (func (param f64) (result i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $FUNCSIG$iid (func (param i32 f64) (result i32)))
  (type $FUNCSIG$jii (func (param i32 i32) (result i64)))
@@ -26,190 +25,190 @@
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$viji (func (param i32 i64 i32)))
  (type $FUNCSIG$iiij (func (param i32 i32 i64) (result i32)))
+ (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (import "Math" "random" (func $~lib/bindings/Math/random (result f64)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (memory $0 1)
  (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00")
  (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
- (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 160) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 216) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
- (data (i32.const 256) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00")
- (data (i32.const 280) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05")
- (data (i32.const 304) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 360) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05")
- (data (i32.const 384) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 440) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
- (data (i32.const 488) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\00\00\00\00\00")
- (data (i32.const 512) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\00\00")
- (data (i32.const 536) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
- (data (i32.const 560) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
- (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
- (data (i32.const 704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
- (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00")
- (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00")
- (data (i32.const 824) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00")
- (data (i32.const 872) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 888) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
+ (data (i32.const 152) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00")
+ (data (i32.const 176) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\02\03\04\05")
+ (data (i32.const 200) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\01\04\05")
+ (data (i32.const 224) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 280) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
+ (data (i32.const 328) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\00\00\00\00\00")
+ (data (i32.const 352) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\00\00")
+ (data (i32.const 376) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
+ (data (i32.const 400) "\05\00\00\00\01\00\00\00\0f\00\00\00\05\00\00\00\01\01\00\02\02")
+ (data (i32.const 424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
+ (data (i32.const 544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
+ (data (i32.const 584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00")
+ (data (i32.const 624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00\02\00\00\00\02\00\00\00")
+ (data (i32.const 664) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00A\00r\00r\00a\00y\00 \00i\00s\00 \00e\00m\00p\00t\00y\00")
+ (data (i32.const 712) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 728) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 944) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00")
  (data (i32.const 984) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\05\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1024) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1064) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00")
+ (data (i32.const 1104) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1144) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1224) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1264) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1304) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\04\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1384) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1424) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1464) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\05\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1504) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1544) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\04\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1584) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00")
  (data (i32.const 1624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00")
  (data (i32.const 1704) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\05\00\00\00")
- (data (i32.const 1864) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1904) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 1944) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 1960) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2000) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2032) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
- (data (i32.const 2056) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2096) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00")
- (data (i32.const 2120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05\00\00\00")
- (data (i32.const 2152) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2192) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 2216) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2248) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2288) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2312) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00")
- (data (i32.const 2344) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2384) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2408) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
- (data (i32.const 2440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04\00\00\00")
- (data (i32.const 2504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05\00\00\00")
- (data (i32.const 2536) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2576) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 2600) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2632) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2672) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 2688) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2728) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2768) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 2784) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2824) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2864) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 2880) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2920) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 2960) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 2976) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 3016) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 3056) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 3072) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
- (data (i32.const 3112) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00")
- (data (i32.const 3152) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?\00")
- (data (i32.const 3344) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f")
- (data (i32.const 3392) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f")
- (data (i32.const 3440) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f")
- (data (i32.const 3520) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f")
- (data (i32.const 3600) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00")
- (data (i32.const 3640) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00")
- (data (i32.const 3680) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00")
- (data (i32.const 3720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff")
- (data (i32.const 3760) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 3776) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 3800) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00")
- (data (i32.const 3824) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00")
- (data (i32.const 3856) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
- (data (i32.const 3888) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00")
- (data (i32.const 3944) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 3968) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
- (data (i32.const 3992) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00")
- (data (i32.const 4104) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 4160) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00")
- (data (i32.const 4184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00")
- (data (i32.const 4208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00")
- (data (i32.const 4232) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00")
- (data (i32.const 4256) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
- (data (i32.const 4272) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00P\10\00\00h\10\00\00P\10\00\00\80\10\00\00\98\10\00\00\b0\10\00\00\00\00\00\00")
- (data (i32.const 4320) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10\00\00\00\00\00\00")
- (data (i32.const 4368) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
- (data (i32.const 4416) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00")
- (data (i32.const 4440) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\00")
- (data (i32.const 4464) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e\00")
- (data (i32.const 4488) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e\00")
- (data (i32.const 4520) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00")
- (data (i32.const 4544) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00")
- (data (i32.const 4584) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff")
- (data (i32.const 4616) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00")
- (data (i32.const 4640) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
- (data (i32.const 5056) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\000\12\00\000\12\00\00\90\01\00\00d\00\00\00")
- (data (i32.const 5088) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003\00")
- (data (i32.const 5120) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
- (data (i32.const 5152) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-\00")
- (data (i32.const 5176) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80")
- (data (i32.const 5200) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_\00")
- (data (i32.const 5224) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00")
- (data (i32.const 5288) "0\00\00\00\01\00\00\00\0f\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f")
- (data (i32.const 5352) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 \00")
- (data (i32.const 5376) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00")
- (data (i32.const 5400) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00")
- (data (i32.const 5424) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
- (data (i32.const 5464) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
- (data (i32.const 5496) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
- (data (i32.const 6208) "\10\00\00\00\01\00\00\00\1e\00\00\00\10\00\00\00\88\15\00\00\88\15\00\00\b8\02\00\00W\00\00\00")
- (data (i32.const 6240) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
- (data (i32.const 6432) "\10\00\00\00\01\00\00\00\1f\00\00\00\10\00\00\00p\18\00\00p\18\00\00\ae\00\00\00W\00\00\00")
- (data (i32.const 6464) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
- (data (i32.const 6520) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00P\19\00\00P\19\00\00(\00\00\00\n\00\00\00")
- (data (i32.const 6552) "P\00\00\00\01\00\00\00\10\00\00\00P\00\00\000\00.\000\00,\00 \001\00.\000\00,\00 \00-\002\00.\000\00,\00 \00N\00a\00N\00,\00 \00-\00I\00n\00f\00i\00n\00i\00t\00y\00,\00 \00I\00n\00f\00i\00n\00i\00t\00y\00")
- (data (i32.const 6648) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001\00")
- (data (i32.const 6672) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\b0\10\00\00\08\1a\00\00\00\00\00\00")
- (data (i32.const 6704) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00")
- (data (i32.const 6752) "@\00\00\00\01\00\00\00\10\00\00\00@\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00")
- (data (i32.const 6832) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
- (data (i32.const 6848) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 6872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
- (data (i32.const 6896) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
- (data (i32.const 6928) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00,\002\00")
- (data (i32.const 6952) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003\00")
- (data (i32.const 6984) "\03\00\00\00\01\00\00\00\0f\00\00\00\03\00\00\00\01\ff\00")
- (data (i32.const 7008) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\00-\001\00,\000\00")
- (data (i32.const 7040) "\06\00\00\00\01\00\00\00\0f\00\00\00\06\00\00\00\01\00\ff\ff\00\00")
- (data (i32.const 7064) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000\00")
- (data (i32.const 7104) "\18\00\00\00\01\00\00\00\0f\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00")
- (data (i32.const 7144) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000\00")
- (data (i32.const 7208) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f")
- (data (i32.const 7256) "T\00\00\00\01\00\00\00\10\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00")
- (data (i32.const 7360) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\b0\10\00\00P\10\00\00P\10\00\00\80\10\00\00h\10\00\00\98\10\00\00\00\00\00\00")
- (data (i32.const 7408) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,\00")
- (data (i32.const 7456) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\002\00")
- (data (i32.const 7480) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\004\00")
- (data (i32.const 7504) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\08\1a\00\000\1d\00\00\00\00\00\00H\1d\00\00")
- (data (i32.const 7536) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\002\00,\00,\004\00")
- (data (i32.const 7568) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
- (data (i32.const 7592) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00")
- (data (i32.const 7616) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004\00")
- (data (i32.const 7648) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\02")
- (data (i32.const 7672) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\03\04")
- (data (i32.const 7696) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
- (data (i32.const 7720) "\'\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\06\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00")
+ (data (i32.const 1744) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1784) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 1800) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1840) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1872) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
+ (data (i32.const 1896) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 1936) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00")
+ (data (i32.const 1960) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\05\00\00\00")
+ (data (i32.const 1992) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2032) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 2056) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2088) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2128) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2152) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00")
+ (data (i32.const 2184) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2224) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2248) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
+ (data (i32.const 2280) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2320) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\04\00\00\00")
+ (data (i32.const 2344) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\05\00\00\00")
+ (data (i32.const 2376) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2416) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 2440) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2472) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2512) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 2528) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2568) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2608) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 2624) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2664) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2704) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 2720) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2760) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2800) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 2816) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2856) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2896) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 2912) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00")
+ (data (i32.const 2952) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00~\00l\00i\00b\00/\00m\00a\00t\00h\00.\00t\00s\00")
+ (data (i32.const 2992) "\ac\00\00\00\01\00\00\00\10\00\00\00\ac\00\00\00A\00B\00C\00D\00E\00F\00G\00H\00I\00J\00K\00L\00M\00N\00O\00P\00Q\00R\00S\00T\00U\00V\00W\00X\00Y\00Z\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\000\001\002\003\004\005\006\007\008\009\00_\00-\00,\00.\00+\00/\00\\\00[\00]\00{\00}\00(\00)\00<\00>\00*\00&\00$\00%\00^\00@\00#\00!\00?\00")
+ (data (i32.const 3184) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80?\00\00\c0\7f\00\00\80\ff\00\00\80?\00\00\00\00\00\00\80\bf\00\00\00\c0\00\00\80\7f")
+ (data (i32.const 3232) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\00\00\80\ff\00\00\00\c0\00\00\80\bf\00\00\00\00\00\00\80?\00\00\80?\00\00\80\7f\00\00\c0\7f")
+ (data (i32.const 3280) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\05\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\7f")
+ (data (i32.const 3360) "@\00\00\00\01\00\00\00\0f\00\00\00@\00\00\00\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f0\bf\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\05\00\00\00\00\00\f0?\00\00\00\00\00\00\f0\7f\00\00\00\00\00\00\f8\7f")
+ (data (i32.const 3440) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\02\00\00\00")
+ (data (i32.const 3480) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\01\00\00\00\02\00\00\00")
+ (data (i32.const 3520) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\01\00\00\00\ff\ff\ff\ff\fe\ff\ff\ff\00\00\00\00\02\00\00\00")
+ (data (i32.const 3560) "\14\00\00\00\01\00\00\00\0f\00\00\00\14\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\fe\ff\ff\ff\ff\ff\ff\ff")
+ (data (i32.const 3600) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 3616) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 3640) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\02\00\00\00\01\00\00\00")
+ (data (i32.const 3664) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00")
+ (data (i32.const 3696) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
+ (data (i32.const 3728) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00P\00R\00N\00G\00 \00m\00u\00s\00t\00 \00b\00e\00 \00s\00e\00e\00d\00e\00d\00.\00")
+ (data (i32.const 3784) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 3808) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
+ (data (i32.const 3832) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00")
+ (data (i32.const 3944) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00")
+ (data (i32.const 3968) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00")
+ (data (i32.const 3992) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00")
+ (data (i32.const 4016) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00")
+ (data (i32.const 4040) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
+ (data (i32.const 4056) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00x\0f\00\00\90\0f\00\00x\0f\00\00\a8\0f\00\00\c0\0f\00\00\d8\0f\00\00\00\00\00\00")
+ (data (i32.const 4104) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f\00\00\00\00\00\00")
+ (data (i32.const 4152) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
+ (data (i32.const 4200) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00")
+ (data (i32.const 4224) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\00")
+ (data (i32.const 4248) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00t\00r\00u\00e\00")
+ (data (i32.const 4272) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00f\00a\00l\00s\00e\00")
+ (data (i32.const 4304) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00")
+ (data (i32.const 4328) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00t\00r\00u\00e\00,\00f\00a\00l\00s\00e\00")
+ (data (i32.const 4368) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\fe\ff\ff\ff\fd\ff\ff\ff")
+ (data (i32.const 4400) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00")
+ (data (i32.const 4424) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
+ (data (i32.const 4840) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00X\11\00\00X\11\00\00\90\01\00\00d\00\00\00")
+ (data (i32.const 4872) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\00-\002\00-\003\00")
+ (data (i32.const 4904) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
+ (data (i32.const 4936) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00-\00")
+ (data (i32.const 4960) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\00\00\00\80\00\00\00\80")
+ (data (i32.const 4984) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00_\00_\00")
+ (data (i32.const 5008) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\002\001\004\007\004\008\003\006\004\008\00_\00_\00-\002\001\004\007\004\008\003\006\004\008\00")
+ (data (i32.const 5072) "0\00\00\00\01\00\00\00\0f\00\00\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\c0\00\00\00\00\00\00\f8\7f\00\00\00\00\00\00\f0\ff\00\00\00\00\00\00\f0\7f")
+ (data (i32.const 5136) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00,\00 \00")
+ (data (i32.const 5160) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00")
+ (data (i32.const 5184) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00")
+ (data (i32.const 5208) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
+ (data (i32.const 5248) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
+ (data (i32.const 5280) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
+ (data (i32.const 5992) "\10\00\00\00\01\00\00\00\1e\00\00\00\10\00\00\00\b0\14\00\00\b0\14\00\00\b8\02\00\00W\00\00\00")
+ (data (i32.const 6024) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
+ (data (i32.const 6216) "\10\00\00\00\01\00\00\00\1f\00\00\00\10\00\00\00\98\17\00\00\98\17\00\00\ae\00\00\00W\00\00\00")
+ (data (i32.const 6248) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
+ (data (i32.const 6304) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00x\18\00\00x\18\00\00(\00\00\00\n\00\00\00")
+ (data (i32.const 6336) "P\00\00\00\01\00\00\00\10\00\00\00P\00\00\000\00.\000\00,\00 \001\00.\000\00,\00 \00-\002\00.\000\00,\00 \00N\00a\00N\00,\00 \00-\00I\00n\00f\00i\00n\00i\00t\00y\00,\00 \00I\00n\00f\00i\00n\00i\00t\00y\00")
+ (data (i32.const 6432) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001\00")
+ (data (i32.const 6456) "\0c\00\00\00\01\00\00\00\0f\00\00\00\0c\00\00\00\d8\0f\00\000\19\00\00\00\00\00\00")
+ (data (i32.const 6488) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00")
+ (data (i32.const 6536) "@\00\00\00\01\00\00\00\10\00\00\00@\00\00\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00,\00,\00[\00o\00b\00j\00e\00c\00t\00 \00O\00b\00j\00e\00c\00t\00]\00")
+ (data (i32.const 6616) "\00\00\00\00\01\00\00\00\0f\00\00\00\00\00\00\00")
+ (data (i32.const 6632) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 6656) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
+ (data (i32.const 6680) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00")
+ (data (i32.const 6712) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00,\002\00")
+ (data (i32.const 6736) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\000\00,\001\00,\002\00,\003\00")
+ (data (i32.const 6768) "\03\00\00\00\01\00\00\00\0f\00\00\00\03\00\00\00\01\ff\00")
+ (data (i32.const 6792) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\00-\001\00,\000\00")
+ (data (i32.const 6824) "\06\00\00\00\01\00\00\00\0f\00\00\00\06\00\00\00\01\00\ff\ff\00\00")
+ (data (i32.const 6848) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00,\006\005\005\003\005\00,\000\00")
+ (data (i32.const 6888) "\18\00\00\00\01\00\00\00\0f\00\00\00\18\00\00\00\01\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\ff\00\00\00\00\00\00\00\00")
+ (data (i32.const 6928) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\001\00,\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00,\000\00")
+ (data (i32.const 6992) " \00\00\00\01\00\00\00\0f\00\00\00 \00\00\00\ff\ff\ff\ff\ff\ff\ff\ff@Eu\c3*\9d\fb\ff\00\00\00\00\00\00\00\00\ff\ff\ff\ff\ff\ff\ff\7f")
+ (data (i32.const 7040) "T\00\00\00\01\00\00\00\10\00\00\00T\00\00\00-\001\00,\00-\001\002\003\004\005\006\007\008\009\000\001\002\003\004\005\006\00,\000\00,\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00")
+ (data (i32.const 7144) "\1c\00\00\00\01\00\00\00\0f\00\00\00\1c\00\00\00\d8\0f\00\00x\0f\00\00x\0f\00\00\a8\0f\00\00\90\0f\00\00\c0\0f\00\00\00\00\00\00")
+ (data (i32.const 7192) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00,\00a\00,\00a\00,\00a\00b\00,\00b\00,\00b\00a\00,\00")
+ (data (i32.const 7240) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\002\00")
+ (data (i32.const 7264) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\004\00")
+ (data (i32.const 7288) "\10\00\00\00\01\00\00\00\0f\00\00\00\10\00\00\000\19\00\00X\1c\00\00\00\00\00\00p\1c\00\00")
+ (data (i32.const 7320) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00,\002\00,\00,\004\00")
+ (data (i32.const 7352) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\01\00\00\00\02\00\00\00")
+ (data (i32.const 7376) "\08\00\00\00\01\00\00\00\0f\00\00\00\08\00\00\00\03\00\00\00\04\00\00\00")
+ (data (i32.const 7400) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00,\002\00,\003\00,\004\00")
+ (data (i32.const 7432) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\01\02")
+ (data (i32.const 7456) "\02\00\00\00\01\00\00\00\0f\00\00\00\02\00\00\00\03\04")
+ (data (i32.const 7480) "\04\00\00\00\01\00\00\00\0f\00\00\00\04\00\00\00\01\00\00\00")
+ (data (i32.const 7504) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 7552) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 7592) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 7648) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 7696) "\'\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\06\00\00\0e\00\00\00I\04\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\08\00\00\00\00\00\00\00I\06\00\00\0e\00\00\00\19\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00I\04\00\00\0e\00\00\00")
  (table $0 57 funcref)
  (elem (i32.const 0) $null $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0)
- (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $std/array/arr (mut i32) (i32.const 0))
  (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647))
  (global $std/array/i (mut i32) (i32.const 0))
@@ -219,10 +218,7 @@
  (global $~lib/math/random_state1_64 (mut i64) (i64.const 0))
  (global $~lib/math/random_state0_32 (mut i32) (i32.const 0))
  (global $~lib/math/random_state1_32 (mut i32) (i32.const 0))
- (global $std/array/charset i32 (i32.const 3168))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
+ (global $std/array/charset i32 (i32.const 3008))
  (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0))
  (global $~lib/builtins/i32.MIN_VALUE i32 (i32.const -2147483648))
  (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
@@ -234,1362 +230,23 @@
  (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1))
  (global $~lib/builtins/i64.MAX_VALUE i64 (i64.const 9223372036854775807))
  (global $~lib/started (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 7720))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 8040))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 7696))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 8016))
  (export "memory" (memory $0))
  (export "main" (func $std/array/main))
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
  (export "__realloc" (func $~lib/rt/tlsf/__realloc))
  (export "__free" (func $~lib/rt/tlsf/__free))
- (export "__retain" (func $~lib/rt/purerc/__retain))
- (export "__release" (func $~lib/rt/purerc/__release))
- (export "__collect" (func $~lib/rt/purerc/__collect))
- (export "__instanceof" (func $~lib/rt/common/__instanceof))
- (export "__typeinfo" (func $~lib/rt/common/__typeinfo))
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
-  local.get $3
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.const 4
-   i32.shr_u
-   local.set $5
-  else   
-   i32.const 31
-   local.get $3
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $4
-  end
-  local.get $4
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $5
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
-  i32.load offset=20
-  local.set $7
-  local.get $6
-  if
-   local.get $6
-   local.get $7
-   i32.store offset=20
-  end
-  local.get $7
-  if
-   local.get $7
-   local.get $6
-   i32.store offset=16
-  end
-  local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
-   i32.const 4
-   i32.shl
-   local.get $8
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
-   i32.eqz
-   if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $4
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
-  i32.load
-  local.set $5
-  local.get $5
-  i32.const 1
-  i32.and
-  if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $3
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $2
-    i32.const 3
-    i32.and
-    local.get $3
-    i32.or
-    local.tee $2
-    i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $2
-  i32.const 2
-  i32.and
-  if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
-   i32.load
-   local.set $6
-   local.get $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $7
-   local.get $7
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $3
-    call $~lib/rt/tlsf/removeBlock
-    local.get $3
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $2
-    i32.store
-    local.get $3
-    local.set $1
-   end
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $8
-  local.get $8
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $8
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $8
-  i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $8
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
-   i32.const 4
-   i32.shr_u
-   local.set $10
-  else   
-   i32.const 31
-   local.get $8
-   i32.clz
-   i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $9
-  end
-  local.get $9
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $10
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $11
-  i32.store offset=20
-  local.get $11
-  if
-   local.get $11
-   local.get $1
-   i32.store offset=16
-  end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
-  i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 176
-   i32.const 128
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 128
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/arraybuffer/ArrayBufferView#constructor (; 15 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (export "__retain" (func $~lib/rt/pure/__retain))
+ (export "__release" (func $~lib/rt/pure/__release))
+ (export "__collect" (func $~lib/rt/pure/__collect))
+ (export "__instanceof" (func $~lib/rt/__instanceof))
+ (export "__typeinfo" (func $~lib/rt/__typeinfo))
+ (func $~lib/arraybuffer/ArrayBufferView#constructor (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
@@ -1619,7 +276,7 @@
     i32.const 12
     i32.const 14
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -1637,7 +294,7 @@
   local.get $3
   local.get $4
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $3
@@ -1647,7 +304,7 @@
   i32.store offset=8
   local.get $0
  )
- (func $~lib/array/Array<i32>#constructor (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#constructor (; 6 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   if (result i32)
@@ -1656,7 +313,7 @@
    i32.const 16
    i32.const 17
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
   end
   local.get $1
   i32.const 2
@@ -1671,10 +328,10 @@
   i32.store offset=12
   local.get $0
  )
- (func $~lib/array/Array.isArray<~lib/array/Array<i32> | null> (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<~lib/array/Array<i32> | null> (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 1
   if (result i32)
@@ -1686,13 +343,13 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array.isArray<~lib/array/Array<i32>> (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<~lib/array/Array<i32>> (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 1
   if (result i32)
@@ -1704,25 +361,25 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $std/array/P#constructor (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/P#constructor (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.eqz
   if
    i32.const 0
    i32.const 18
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
  )
- (func $~lib/array/Array.isArray<std/array/P> (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<std/array/P> (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 0
   if (result i32)
@@ -1734,10 +391,10 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/typedarray/Uint8Array#constructor (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/Uint8Array#constructor (; 11 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   if (result i32)
@@ -1746,7 +403,7 @@
    i32.const 12
    i32.const 19
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
   end
   local.get $1
   i32.const 0
@@ -1755,10 +412,10 @@
   local.set $0
   local.get $0
  )
- (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<~lib/typedarray/Uint8Array> (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 0
   if (result i32)
@@ -1770,10 +427,10 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/array/Array.isArray<i32> (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<i32> (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   i32.const 0
   if (result i32)
    local.get $0
@@ -1783,10 +440,10 @@
    i32.const 0
   end
  )
- (func $~lib/array/Array.isArray<~lib/string/String> (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.isArray<~lib/string/String> (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 0
   if (result i32)
@@ -1798,71 +455,10 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/rt/purerc/increment (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/memory/memory.copy (; 27 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2068,7 +664,7 @@
    end
   end
  )
- (func $~lib/rt/common/__allocArray (; 28 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/rt/__allocArray (; 16 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -2086,7 +682,7 @@
   local.set $6
   local.get $4
   local.get $6
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $4
   local.get $6
@@ -2106,7 +702,7 @@
   end
   local.get $4
  )
- (func $~lib/memory/memory.fill (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.fill (; 17 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2369,7 +965,7 @@
    end
   end
  )
- (func $~lib/array/Array<u8>#fill (; 30 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<u8>#fill (; 18 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -2444,13 +1040,13 @@
    call $~lib/memory/memory.fill
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<u8>#get:length (; 31 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u8>#get:length (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<u8>#__unchecked_get (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u8>#__unchecked_get (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -2459,7 +1055,7 @@
   i32.add
   i32.load8_u
  )
- (func $~lib/array/Array<u8>#__get (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u8>#__get (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -2467,8 +1063,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -2478,14 +1074,14 @@
   local.get $1
   call $~lib/array/Array<u8>#__unchecked_get
  )
- (func $std/array/isArraysEqual<u8> (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<u8> (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -2501,9 +1097,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2514,9 +1110,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2541,9 +1137,9 @@
      i32.const 0
      local.set $4
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
      return
     end
@@ -2559,12 +1155,12 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<u32>#fill (; 35 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<u32>#fill (; 23 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -2649,13 +1245,13 @@
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<u32>#get:length (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u32>#get:length (; 24 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<u32>#__unchecked_get (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#__unchecked_get (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -2664,7 +1260,7 @@
   i32.add
   i32.load
  )
- (func $~lib/array/Array<u32>#__get (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#__get (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -2672,8 +1268,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -2683,14 +1279,14 @@
   local.get $1
   call $~lib/array/Array<u32>#__unchecked_get
  )
- (func $std/array/isArraysEqual<u32> (; 39 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<u32> (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -2706,9 +1302,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2719,9 +1315,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2746,9 +1342,9 @@
      i32.const 0
      local.set $4
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
      return
     end
@@ -2764,30 +1360,30 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#get:length (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#get:length (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=12
  )
- (func $std/array/internalCapacity<i32> (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/internalCapacity<i32> (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $1
   local.get $1
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
@@ -2795,187 +1391,12 @@
   i32.shr_s
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
-  local.get $8
- )
- (func $~lib/rt/tlsf/__realloc (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/array/ensureSize (; 45 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/ensureSize (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2996,7 +1417,7 @@
    i32.gt_u
    if
     i32.const 24
-    i32.const 456
+    i32.const 296
     i32.const 14
     i32.const 47
     call $~lib/builtins/abort
@@ -3027,7 +1448,7 @@
    if
     local.get $0
     local.get $6
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $0
     local.get $6
@@ -3038,7 +1459,7 @@
    i32.store offset=8
   end
  )
- (func $~lib/array/Array<i32>#push (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#push (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -3065,7 +1486,7 @@
   i32.store offset=12
   local.get $3
  )
- (func $~lib/array/Array<i32>#__unchecked_get (; 47 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#__unchecked_get (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -3074,7 +1495,7 @@
   i32.add
   i32.load
  )
- (func $~lib/array/Array<i32>#__get (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#__get (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -3082,8 +1503,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -3093,7 +1514,7 @@
   local.get $1
   call $~lib/array/Array<i32>#__unchecked_get
  )
- (func $~lib/array/Array<i32>#pop (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#pop (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -3103,8 +1524,8 @@
   i32.const 1
   i32.lt_s
   if
-   i32.const 840
-   i32.const 456
+   i32.const 680
+   i32.const 296
    i32.const 250
    i32.const 20
    call $~lib/builtins/abort
@@ -3126,7 +1547,7 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/array/Array<i32>#concat (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#concat (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3135,7 +1556,7 @@
   (local $7 i32)
   (local $8 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -3157,10 +1578,10 @@
   i32.gt_u
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    block
     i32.const 24
-    i32.const 456
+    i32.const 296
     i32.const 197
     i32.const 59
     call $~lib/builtins/abort
@@ -3173,8 +1594,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $5
   local.get $5
   i32.load offset=4
@@ -3200,10 +1621,10 @@
   local.get $5
   local.set $8
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
  )
- (func $~lib/array/Array<i32>#copyWithin (; 51 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/array/Array<i32>#copyWithin (; 37 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -3389,16 +1810,16 @@
    call $~lib/memory/memory.copy
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $std/array/isArraysEqual<i32> (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<i32> (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -3414,9 +1835,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -3427,9 +1848,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -3454,9 +1875,9 @@
      i32.const 0
      local.set $4
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
      return
     end
@@ -3472,12 +1893,12 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#unshift (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#unshift (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -3510,7 +1931,7 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/array/Array<i32>#shift (; 54 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#shift (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -3522,8 +1943,8 @@
   i32.const 1
   i32.lt_s
   if
-   i32.const 840
-   i32.const 456
+   i32.const 680
+   i32.const 296
    i32.const 311
    i32.const 20
    call $~lib/builtins/abort
@@ -3559,7 +1980,7 @@
   i32.store offset=12
   local.get $3
  )
- (func $~lib/array/Array<i32>#reverse (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#reverse (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -3611,9 +2032,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<i32>#indexOf (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#indexOf (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -3682,7 +2103,7 @@
   end
   i32.const -1
  )
- (func $~lib/array/Array<i32>#includes (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#includes (; 43 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   local.get $1
   local.get $2
@@ -3690,7 +2111,7 @@
   i32.const 0
   i32.ge_s
  )
- (func $~lib/array/Array<i32>#splice (; 58 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#splice (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -3749,8 +2170,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $6
   local.get $6
   i32.load offset=4
@@ -3798,7 +2219,7 @@
   i32.store offset=12
   local.get $6
  )
- (func $~lib/array/Array<i32>#__unchecked_set (; 59 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<i32>#__unchecked_set (; 45 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -3808,7 +2229,7 @@
   local.get $2
   i32.store
  )
- (func $~lib/array/Array<i32>#__set (; 60 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<i32>#__set (; 46 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $0
   i32.load offset=12
@@ -3834,20 +2255,20 @@
    i32.store offset=12
   end
  )
- (func $start:std/array~anonymous|0 (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|0 (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#findIndex (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#findIndex (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3904,36 +2325,36 @@
   end
   i32.const -1
  )
- (func $start:std/array~anonymous|1 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|1 (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 1
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|2 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|2 (; 50 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 100
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|3 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|3 (; 51 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -3944,26 +2365,26 @@
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|4 (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|4 (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 100
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|5 (; 67 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|5 (; 53 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -3973,23 +2394,23 @@
   i32.eq
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|6 (; 68 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|6 (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#every (; 69 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#every (; 55 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4049,23 +2470,23 @@
   end
   i32.const 1
  )
- (func $start:std/array~anonymous|7 (; 70 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|7 (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
   i32.le_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|8 (; 71 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|8 (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -4076,26 +2497,26 @@
   i32.lt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|9 (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|9 (; 58 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 10
   i32.lt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|10 (; 73 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|10 (; 59 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -4105,23 +2526,23 @@
   i32.lt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|11 (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|11 (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 3
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#some (; 75 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#some (; 61 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4178,23 +2599,23 @@
   end
   i32.const 0
  )
- (func $start:std/array~anonymous|12 (; 76 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|12 (; 62 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const -1
   i32.le_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|13 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|13 (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -4205,26 +2626,26 @@
   i32.gt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|14 (; 78 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|14 (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 10
   i32.gt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|15 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|15 (; 65 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -4234,21 +2655,21 @@
   i32.gt_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|16 (; 80 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|16 (; 66 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<i32>#forEach (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<i32>#forEach (; 67 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4298,9 +2719,9 @@
    unreachable
   end
  )
- (func $start:std/array~anonymous|17 (; 82 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|17 (; 68 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -4311,22 +2732,22 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|18 (; 83 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|18 (; 69 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|19 (; 84 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|19 (; 70 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -4336,12 +2757,12 @@
   i32.add
   global.set $std/array/i
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|20 (; 85 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $start:std/array~anonymous|20 (; 71 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   i32.const 0
@@ -4448,7 +2869,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 570
     i32.const 6
     call $~lib/builtins/abort
@@ -4456,21 +2877,21 @@
    end
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|21 (; 86 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
+ (func $start:std/array~anonymous|21 (; 72 ;) (type $FUNCSIG$fiii) (param $0 i32) (param $1 i32) (param $2 i32) (result f32)
   (local $3 f32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   f32.convert_i32_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#map<f32> (; 87 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#map<f32> (; 73 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4485,8 +2906,8 @@
   i32.const 2
   i32.const 22
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $3
   local.get $3
   i32.load offset=4
@@ -4542,11 +2963,11 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<f32>#get:length (; 88 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<f32>#get:length (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<f32>#__unchecked_get (; 89 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
+ (func $~lib/array/Array<f32>#__unchecked_get (; 75 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -4555,7 +2976,7 @@
   i32.add
   f32.load
  )
- (func $~lib/array/Array<f32>#__get (; 90 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
+ (func $~lib/array/Array<f32>#__get (; 76 ;) (type $FUNCSIG$fii) (param $0 i32) (param $1 i32) (result f32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -4563,8 +2984,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -4574,10 +2995,10 @@
   local.get $1
   call $~lib/array/Array<f32>#__unchecked_get
  )
- (func $start:std/array~anonymous|22 (; 91 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|22 (; 77 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -4590,10 +3011,10 @@
   local.get $0
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#map<i32> (; 92 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#map<i32> (; 78 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4607,8 +3028,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $3
   local.get $3
   i32.load offset=4
@@ -4664,10 +3085,10 @@
   end
   local.get $3
  )
- (func $start:std/array~anonymous|23 (; 93 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|23 (; 79 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
@@ -4676,13 +3097,13 @@
   local.get $0
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|24 (; 94 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|24 (; 80 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -4694,23 +3115,23 @@
   local.get $0
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|25 (; 95 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|25 (; 81 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 2
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#filter (; 96 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#filter (; 82 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4720,8 +3141,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $2
   block $break|0
    block
@@ -4779,10 +3200,10 @@
   end
   local.get $2
  )
- (func $start:std/array~anonymous|26 (; 97 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|26 (; 83 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.const 100
@@ -4797,13 +3218,13 @@
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|27 (; 98 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|27 (; 84 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   global.get $std/array/i
   local.get $0
@@ -4814,13 +3235,13 @@
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|28 (; 99 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $start:std/array~anonymous|28 (; 85 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   call $~lib/array/Array<i32>#pop
@@ -4834,23 +3255,23 @@
   i32.ge_s
   local.set $3
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $start:std/array~anonymous|29 (; 100 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|29 (; 86 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/array/Array<i32>#reduce<i32> (; 101 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduce<i32> (; 87 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -4908,23 +3329,23 @@
   end
   local.get $3
  )
- (func $start:std/array~anonymous|30 (; 102 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|30 (; 88 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|31 (; 103 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|31 (; 89 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   if (result i32)
@@ -4936,10 +3357,10 @@
   end
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/array/Array<i32>#reduce<bool> (; 104 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduce<bool> (; 90 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -4997,10 +3418,10 @@
   end
   local.get $3
  )
- (func $start:std/array~anonymous|32 (; 105 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|32 (; 91 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   if (result i32)
@@ -5012,13 +3433,13 @@
   end
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|33 (; 106 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|33 (; 92 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   i32.const 1
@@ -5029,26 +3450,26 @@
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|34 (; 107 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|34 (; 93 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|35 (; 108 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|35 (; 94 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   call $~lib/array/Array<i32>#pop
@@ -5058,23 +3479,23 @@
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|36 (; 109 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|36 (; 95 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/array/Array<i32>#reduceRight<i32> (; 110 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduceRight<i32> (; 96 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $2
@@ -5119,23 +3540,23 @@
   end
   local.get $3
  )
- (func $start:std/array~anonymous|37 (; 111 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|37 (; 97 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|38 (; 112 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|38 (; 98 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   if (result i32)
@@ -5147,10 +3568,10 @@
   end
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/array/Array<i32>#reduceRight<bool> (; 113 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/array/Array<i32>#reduceRight<bool> (; 99 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $2
@@ -5195,10 +3616,10 @@
   end
   local.get $3
  )
- (func $start:std/array~anonymous|39 (; 114 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|39 (; 100 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   if (result i32)
@@ -5210,13 +3631,13 @@
   end
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|40 (; 115 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|40 (; 101 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   i32.const 1
@@ -5227,26 +3648,26 @@
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|41 (; 116 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|41 (; 102 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $start:std/array~anonymous|42 (; 117 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $start:std/array~anonymous|42 (; 103 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $3
   call $~lib/array/Array<i32>#pop
@@ -5256,10 +3677,10 @@
   i32.add
   local.set $4
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/math/murmurHash3 (; 118 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64)
+ (func $~lib/math/murmurHash3 (; 104 ;) (type $FUNCSIG$jj) (param $0 i64) (result i64)
   local.get $0
   local.get $0
   i64.const 33
@@ -5288,7 +3709,7 @@
   local.set $0
   local.get $0
  )
- (func $~lib/math/splitMix32 (; 119 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/math/splitMix32 (; 105 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 1831565813
   i32.add
@@ -5323,12 +3744,12 @@
   i32.shr_u
   i32.xor
  )
- (func $~lib/math/NativeMath.seedRandom (; 120 ;) (type $FUNCSIG$vj) (param $0 i64)
+ (func $~lib/math/NativeMath.seedRandom (; 106 ;) (type $FUNCSIG$vj) (param $0 i64)
   local.get $0
   i64.eqz
   if
    i32.const 0
-   i32.const 3128
+   i32.const 2968
    i32.const 1021
    i32.const 4
    call $~lib/builtins/abort
@@ -5352,7 +3773,7 @@
   call $~lib/math/splitMix32
   global.set $~lib/math/random_state1_32
  )
- (func $~lib/util/sort/insertionSort<f32> (; 121 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<f32> (; 107 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 f32)
   (local $5 i32)
@@ -5444,73 +3865,7 @@
    unreachable
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 122 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
- )
- (func $~lib/rt/tlsf/__free (; 123 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/util/sort/weakHeapSort<f32> (; 124 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<f32> (; 108 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -5805,7 +4160,7 @@
   local.get $10
   f32.store
  )
- (func $~lib/array/Array<f32>#sort (; 125 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f32>#sort (; 109 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f32)
@@ -5821,7 +4176,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5856,7 +4211,7 @@
     f32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   block $~lib/util/sort/SORT<f32>|inlined.0
@@ -5882,9 +4237,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<f32>~anonymous|0 (; 126 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<f32>~anonymous|0 (; 110 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -5917,7 +4272,7 @@
   i32.lt_s
   i32.sub
  )
- (func $~lib/array/Array<f32>#sort|trampoline (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f32>#sort|trampoline (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -5936,19 +4291,19 @@
   local.get $1
   call $~lib/array/Array<f32>#sort
  )
- (func $~lib/builtins/isNaN<f32> (; 128 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
+ (func $~lib/builtins/isNaN<f32> (; 112 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
   local.get $0
   local.get $0
   f32.ne
  )
- (func $std/array/isArraysEqual<f32> (; 129 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<f32> (; 113 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -5964,9 +4319,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -5977,9 +4332,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -6017,9 +4372,9 @@
       i32.const 0
       local.set $4
       local.get $0
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       local.get $1
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       local.get $4
       return
      end
@@ -6036,12 +4391,12 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/util/sort/insertionSort<f64> (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<f64> (; 114 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 f64)
   (local $5 i32)
@@ -6133,7 +4488,7 @@
    unreachable
   end
  )
- (func $~lib/util/sort/weakHeapSort<f64> (; 131 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<f64> (; 115 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -6428,7 +4783,7 @@
   local.get $10
   f64.store
  )
- (func $~lib/array/Array<f64>#sort (; 132 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f64>#sort (; 116 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f64)
@@ -6444,7 +4799,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -6479,7 +4834,7 @@
     f64.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   block $~lib/util/sort/SORT<f64>|inlined.0
@@ -6505,9 +4860,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<f64>~anonymous|0 (; 133 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
+ (func $~lib/util/sort/COMPARATOR<f64>~anonymous|0 (; 117 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
   (local $2 i64)
   (local $3 i64)
   local.get $0
@@ -6540,7 +4895,7 @@
   i64.lt_s
   i32.sub
  )
- (func $~lib/array/Array<f64>#sort|trampoline (; 134 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f64>#sort|trampoline (; 118 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -6559,11 +4914,11 @@
   local.get $1
   call $~lib/array/Array<f64>#sort
  )
- (func $~lib/array/Array<f64>#get:length (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<f64>#get:length (; 119 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<f64>#__unchecked_get (; 136 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
+ (func $~lib/array/Array<f64>#__unchecked_get (; 120 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -6572,7 +4927,7 @@
   i32.add
   f64.load
  )
- (func $~lib/array/Array<f64>#__get (; 137 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
+ (func $~lib/array/Array<f64>#__get (; 121 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -6580,8 +4935,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -6591,19 +4946,19 @@
   local.get $1
   call $~lib/array/Array<f64>#__unchecked_get
  )
- (func $~lib/builtins/isNaN<f64> (; 138 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/builtins/isNaN<f64> (; 122 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   local.get $0
   local.get $0
   f64.ne
  )
- (func $std/array/isArraysEqual<f64> (; 139 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<f64> (; 123 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -6619,9 +4974,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -6632,9 +4987,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -6672,9 +5027,9 @@
       i32.const 0
       local.set $4
       local.get $0
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       local.get $1
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       local.get $4
       return
      end
@@ -6691,12 +5046,12 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/util/sort/insertionSort<i32> (; 140 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<i32> (; 124 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -6788,7 +5143,7 @@
    unreachable
   end
  )
- (func $~lib/util/sort/weakHeapSort<i32> (; 141 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<i32> (; 125 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -7083,7 +5438,7 @@
   local.get $10
   i32.store
  )
- (func $~lib/array/Array<i32>#sort (; 142 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#sort (; 126 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7097,7 +5452,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -7132,7 +5487,7 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   block $~lib/util/sort/SORT<i32>|inlined.0
@@ -7158,14 +5513,14 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<i32>~anonymous|0 (; 143 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<i32>~anonymous|0 (; 127 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.sub
  )
- (func $~lib/array/Array<i32>#sort|trampoline (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#sort|trampoline (; 128 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -7184,7 +5539,7 @@
   local.get $1
   call $~lib/array/Array<i32>#sort
  )
- (func $~lib/util/sort/insertionSort<u32> (; 145 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<u32> (; 129 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -7276,7 +5631,7 @@
    unreachable
   end
  )
- (func $~lib/util/sort/weakHeapSort<u32> (; 146 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/weakHeapSort<u32> (; 130 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -7571,7 +5926,7 @@
   local.get $10
   i32.store
  )
- (func $~lib/array/Array<u32>#sort (; 147 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#sort (; 131 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7585,7 +5940,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -7620,7 +5975,7 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   block $~lib/util/sort/SORT<u32>|inlined.0
@@ -7646,9 +6001,9 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/sort/COMPARATOR<u32>~anonymous|0 (; 148 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<u32>~anonymous|0 (; 132 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.gt_u
@@ -7657,7 +6012,7 @@
   i32.lt_u
   i32.sub
  )
- (func $~lib/array/Array<u32>#sort|trampoline (; 149 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#sort|trampoline (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -7676,14 +6031,14 @@
   local.get $1
   call $~lib/array/Array<u32>#sort
  )
- (func $~lib/array/Array.create<i32> (; 150 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.create<i32> (; 134 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 268435452
   i32.gt_u
   if
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 45
    i32.const 61
    call $~lib/builtins/abort
@@ -7693,8 +6048,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $1
   local.get $1
   i32.const 0
@@ -7707,7 +6062,7 @@
   call $~lib/memory/memory.fill
   local.get $1
  )
- (func $std/array/createReverseOrderedArray (; 151 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createReverseOrderedArray (; 135 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -7741,15 +6096,15 @@
   end
   local.get $1
  )
- (func $~lib/math/NativeMath.random (; 152 ;) (type $FUNCSIG$d) (result f64)
+ (func $~lib/math/NativeMath.random (; 136 ;) (type $FUNCSIG$d) (result f64)
   (local $0 i64)
   (local $1 i64)
   (local $2 i64)
   global.get $~lib/math/random_seeded
   i32.eqz
   if
-   i32.const 3904
-   i32.const 3128
+   i32.const 3744
+   i32.const 2968
    i32.const 1030
    i32.const 24
    call $~lib/builtins/abort
@@ -7798,7 +6153,7 @@
   f64.const 1
   f64.sub
  )
- (func $std/array/createRandomOrderedArray (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createRandomOrderedArray (; 137 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -7832,17 +6187,17 @@
   end
   local.get $1
  )
- (func $~lib/util/sort/COMPARATOR<i32>~anonymous|1 (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<i32>~anonymous|1 (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.sub
  )
- (func $std/array/isSorted<i32> (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<i32> (; 139 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $break|0
    block
@@ -7878,7 +6233,7 @@
      i32.const 0
      local.set $4
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
      return
     end
@@ -7894,13 +6249,13 @@
   i32.const 1
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $std/array/assertSorted<i32> (; 156 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<i32> (; 140 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -7911,20 +6266,20 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/assertSortedDefault<i32> (; 157 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $std/array/assertSortedDefault<i32> (; 141 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   block $~lib/util/sort/COMPARATOR<i32>|inlined.1 (result i32)
@@ -7933,36 +6288,36 @@
   end
   call $std/array/assertSorted<i32>
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/array~anonymous|43 (; 158 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|43 (; 142 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.sub
  )
- (func $start:std/array~anonymous|44 (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|44 (; 143 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.sub
  )
- (func $start:std/array~anonymous|45 (; 160 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|45 (; 144 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.sub
  )
- (func $start:std/array~anonymous|46 (; 161 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|46 (; 145 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.sub
  )
- (func $~lib/array/Array.create<~lib/array/Array<i32>> (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.create<~lib/array/Array<i32>> (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 268435452
   i32.gt_u
   if
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 45
    i32.const 61
    call $~lib/builtins/abort
@@ -7972,8 +6327,8 @@
   i32.const 2
   i32.const 24
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $1
   local.get $1
   i32.const 0
@@ -7986,237 +6341,10 @@
   call $~lib/memory/memory.fill
   local.get $1
  )
- (func $~lib/rt/common/__typeinfo (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 400
-   i32.const 4120
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 164 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
-  local.tee $2
-  i32.const 64
-  i32.const 2
-  i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
-  i32.gt_u
-  select
-  local.set $4
-  local.get $4
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 165 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 166 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.and
-  local.set $2
-  local.get $0
-  call $~lib/rt/purerc/onDecrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 320
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-   if
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
-   end
-  else   
-   local.get $2
-   i32.const 0
-   i32.gt_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 320
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   i32.eqz
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-    local.get $1
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-   end
-  end
- )
- (func $~lib/rt/purerc/__retainRelease (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  local.get $1
-  i32.ne
-  if
-   global.get $~lib/builtins/HEAP_BASE
-   local.set $2
-   local.get $0
-   local.get $2
-   i32.gt_u
-   if
-    local.get $0
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/increment
-   end
-   local.get $1
-   local.get $2
-   i32.gt_u
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/decrement
-   end
-  end
-  local.get $0
- )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_set (; 168 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_set (; 147 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=4
@@ -8229,15 +6357,15 @@
   local.get $2
   local.get $3
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__set (; 169 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__set (; 148 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -8247,10 +6375,10 @@
   i32.gt_u
   if
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    block
-    i32.const 4008
-    i32.const 456
+    i32.const 3848
+    i32.const 296
     i32.const 112
     i32.const 38
     call $~lib/builtins/abort
@@ -8280,9 +6408,9 @@
    i32.store offset=12
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/createReverseOrderedNestedArray (; 170 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createReverseOrderedNestedArray (; 149 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8314,7 +6442,7 @@
     local.get $3
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $3
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -8326,13 +6454,13 @@
   end
   local.get $1
  )
- (func $start:std/array~anonymous|47 (; 171 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|47 (; 150 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -8343,12 +6471,12 @@
   i32.sub
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/util/sort/insertionSort<~lib/array/Array<i32>> (; 172 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<~lib/array/Array<i32>> (; 151 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -8369,7 +6497,7 @@
     i32.shl
     i32.add
     i32.load
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $3
     i32.const 1
@@ -8387,7 +6515,7 @@
        i32.shl
        i32.add
        i32.load
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        local.set $6
        block (result i32)
         i32.const 2
@@ -8418,11 +6546,11 @@
         i32.store
        else        
         local.get $6
-        call $~lib/rt/purerc/__release
+        call $~lib/rt/pure/__release
         br $break|1
        end
        local.get $6
-       call $~lib/rt/purerc/__release
+       call $~lib/rt/pure/__release
        br $continue|1
       end
      end
@@ -8437,7 +6565,7 @@
     local.get $4
     i32.store
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -8448,7 +6576,7 @@
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#sort (; 173 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#sort (; 152 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8462,7 +6590,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -8474,11 +6602,11 @@
   if
    local.get $3
    i32.load offset=4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    local.get $3
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    block (result i32)
     i32.const 2
@@ -8499,12 +6627,12 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -8521,13 +6649,13 @@
    call $~lib/util/sort/insertionSort<~lib/array/Array<i32>>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#get:length (; 174 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#get:length (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get (; 175 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get (; 154 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -8535,16 +6663,16 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__get (; 176 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__get (; 155 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 4008
-   i32.const 456
+   i32.const 3848
+   i32.const 296
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -8557,8 +6685,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -8568,14 +6696,14 @@
   local.get $1
   call $~lib/array/Array<~lib/array/Array<i32>>#__unchecked_get
  )
- (func $std/array/isSorted<~lib/array/Array<i32>> (; 177 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<~lib/array/Array<i32>> (; 156 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $break|0
    block
@@ -8613,18 +6741,18 @@
      i32.const 0
      local.set $6
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -8637,13 +6765,13 @@
   i32.const 1
   local.set $5
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $std/array/assertSorted<~lib/array/Array<i32>> (; 178 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/array/Array<i32>> (; 157 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -8654,25 +6782,25 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array.create<std/array/Proxy<i32>> (; 179 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.create<std/array/Proxy<i32>> (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 268435452
   i32.gt_u
   if
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 45
    i32.const 61
    call $~lib/builtins/abort
@@ -8682,8 +6810,8 @@
   i32.const 2
   i32.const 26
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $1
   local.get $1
   i32.const 0
@@ -8696,14 +6824,14 @@
   call $~lib/memory/memory.fill
   local.get $1
  )
- (func $std/array/Proxy<i32>#constructor (; 180 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/Proxy<i32>#constructor (; 159 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.eqz
   if
    i32.const 4
    i32.const 25
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
@@ -8711,10 +6839,10 @@
   i32.store
   local.get $0
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#__unchecked_set (; 181 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#__unchecked_set (; 160 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=4
@@ -8727,15 +6855,15 @@
   local.get $2
   local.get $3
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#__set (; 182 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#__set (; 161 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -8745,10 +6873,10 @@
   i32.gt_u
   if
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    block
-    i32.const 4008
-    i32.const 456
+    i32.const 3848
+    i32.const 296
     i32.const 112
     i32.const 38
     call $~lib/builtins/abort
@@ -8778,9 +6906,9 @@
    i32.store offset=12
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/createReverseOrderedElementsArray (; 183 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createReverseOrderedElementsArray (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8808,7 +6936,7 @@
     local.tee $3
     call $~lib/array/Array<std/array/Proxy<i32>>#__set
     local.get $3
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -8820,13 +6948,13 @@
   end
   local.get $1
  )
- (func $start:std/array~anonymous|48 (; 184 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $start:std/array~anonymous|48 (; 163 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load
@@ -8835,12 +6963,12 @@
   i32.sub
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/util/sort/insertionSort<std/array/Proxy<i32>> (; 185 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<std/array/Proxy<i32>> (; 164 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -8861,7 +6989,7 @@
     i32.shl
     i32.add
     i32.load
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $3
     i32.const 1
@@ -8879,7 +7007,7 @@
        i32.shl
        i32.add
        i32.load
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        local.set $6
        block (result i32)
         i32.const 2
@@ -8910,11 +7038,11 @@
         i32.store
        else        
         local.get $6
-        call $~lib/rt/purerc/__release
+        call $~lib/rt/pure/__release
         br $break|1
        end
        local.get $6
-       call $~lib/rt/purerc/__release
+       call $~lib/rt/pure/__release
        br $continue|1
       end
      end
@@ -8929,7 +7057,7 @@
     local.get $4
     i32.store
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -8940,7 +7068,7 @@
    unreachable
   end
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#sort (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#sort (; 165 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8954,7 +7082,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -8966,11 +7094,11 @@
   if
    local.get $3
    i32.load offset=4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    local.get $3
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    block (result i32)
     i32.const 2
@@ -8991,12 +7119,12 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -9013,13 +7141,13 @@
    call $~lib/util/sort/insertionSort<std/array/Proxy<i32>>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#get:length (; 187 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#get:length (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#__unchecked_get (; 188 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#__unchecked_get (; 167 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -9027,16 +7155,16 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<std/array/Proxy<i32>>#__get (; 189 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<std/array/Proxy<i32>>#__get (; 168 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 4008
-   i32.const 456
+   i32.const 3848
+   i32.const 296
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -9049,8 +7177,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -9060,14 +7188,14 @@
   local.get $1
   call $~lib/array/Array<std/array/Proxy<i32>>#__unchecked_get
  )
- (func $std/array/isSorted<std/array/Proxy<i32>> (; 190 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<std/array/Proxy<i32>> (; 169 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $break|0
    block
@@ -9105,18 +7233,18 @@
      i32.const 0
      local.set $6
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -9129,13 +7257,13 @@
   i32.const 1
   local.set $5
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $std/array/assertSorted<std/array/Proxy<i32>> (; 191 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<std/array/Proxy<i32>> (; 170 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -9146,18 +7274,18 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/util/sort/insertionSort<~lib/string/String | null> (; 192 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<~lib/string/String | null> (; 171 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -9178,7 +7306,7 @@
     i32.shl
     i32.add
     i32.load
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $3
     i32.const 1
@@ -9196,7 +7324,7 @@
        i32.shl
        i32.add
        i32.load
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        local.set $6
        block (result i32)
         i32.const 2
@@ -9227,11 +7355,11 @@
         i32.store
        else        
         local.get $6
-        call $~lib/rt/purerc/__release
+        call $~lib/rt/pure/__release
         br $break|1
        end
        local.get $6
-       call $~lib/rt/purerc/__release
+       call $~lib/rt/pure/__release
        br $continue|1
       end
      end
@@ -9246,7 +7374,7 @@
     local.get $4
     i32.store
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -9257,7 +7385,7 @@
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/string/String | null>#sort (; 193 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#sort (; 172 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9271,7 +7399,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -9283,11 +7411,11 @@
   if
    local.get $3
    i32.load offset=4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    local.get $3
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    block (result i32)
     i32.const 2
@@ -9308,12 +7436,12 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -9330,13 +7458,13 @@
    call $~lib/util/sort/insertionSort<~lib/string/String | null>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String | null>#get:length (; 194 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#get:length (; 173 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<~lib/string/String | null>#__unchecked_get (; 195 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#__unchecked_get (; 174 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -9344,9 +7472,9 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String | null>#__get (; 196 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#__get (; 175 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=8
@@ -9354,8 +7482,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -9365,14 +7493,14 @@
   local.get $1
   call $~lib/array/Array<~lib/string/String | null>#__unchecked_get
  )
- (func $std/array/isSorted<~lib/string/String | null> (; 197 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<~lib/string/String | null> (; 176 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $break|0
    block
@@ -9410,18 +7538,18 @@
      i32.const 0
      local.set $6
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -9434,13 +7562,13 @@
   i32.const 1
   local.set $5
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $std/array/assertSorted<~lib/string/String | null> (; 198 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/string/String | null> (; 177 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -9451,18 +7579,18 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/string/String#get:length (; 199 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String#get:length (; 178 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 16
   i32.sub
@@ -9470,16 +7598,16 @@
   i32.const 1
   i32.shr_u
  )
- (func $~lib/util/string/compareImpl (; 200 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
+ (func $~lib/util/string/compareImpl (; 179 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 0
   local.set $5
@@ -9529,21 +7657,21 @@
   local.get $5
   local.set $8
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
  )
- (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 201 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 (; 180 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -9566,9 +7694,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9590,9 +7718,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9602,9 +7730,9 @@
    i32.const -1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9614,9 +7742,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9635,12 +7763,12 @@
   call $~lib/util/string/compareImpl
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/assertSorted<~lib/string/String | null>|trampoline (; 202 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/string/String | null>|trampoline (; 181 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -9661,14 +7789,14 @@
   local.get $1
   call $std/array/assertSorted<~lib/string/String | null>
  )
- (func $~lib/string/String.__eq (; 203 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__eq (; 182 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -9677,9 +7805,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9697,9 +7825,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9714,9 +7842,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -9729,18 +7857,18 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__ne (; 204 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__ne (; 183 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -9748,21 +7876,21 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/isArraysEqual<~lib/string/String | null> (; 205 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/array/isArraysEqual<~lib/string/String | null> (; 184 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
   i32.eqz
@@ -9778,9 +7906,9 @@
     i32.const 0
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -9791,9 +7919,9 @@
     i32.const 1
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -9820,20 +7948,20 @@
      i32.const 0
      local.set $6
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -9846,19 +7974,19 @@
   i32.const 1
   local.set $5
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/array/Array.create<~lib/string/String> (; 206 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array.create<~lib/string/String> (; 185 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 268435452
   i32.gt_u
   if
    i32.const 24
-   i32.const 456
+   i32.const 296
    i32.const 45
    i32.const 61
    call $~lib/builtins/abort
@@ -9868,8 +7996,8 @@
   i32.const 2
   i32.const 28
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $1
   local.get $1
   i32.const 0
@@ -9882,7 +8010,7 @@
   call $~lib/memory/memory.fill
   local.get $1
  )
- (func $~lib/string/String#charAt (; 207 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#charAt (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   i32.const 0
@@ -9890,7 +8018,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 4384
+   i32.const 4168
    i32.const 40
    i32.const 4
    call $~lib/builtins/abort
@@ -9901,8 +8029,8 @@
   call $~lib/string/String#get:length
   i32.ge_u
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 2
@@ -9918,24 +8046,24 @@
   i32.load16_u
   i32.store16
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#concat (; 208 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (; 187 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   i32.const 0
   i32.eq
   if
-   i32.const 4432
+   i32.const 4216
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $0
@@ -9956,18 +8084,18 @@
   i32.const 0
   i32.eq
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
   local.get $4
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $6
   local.get $6
   local.get $0
@@ -9982,19 +8110,19 @@
   local.get $6
   local.set $5
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/string/String.__concat (; 209 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__concat (; 188 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  i32.const 4432
+  i32.const 4216
   local.get $0
   i32.const 0
   i32.ne
@@ -10003,19 +8131,19 @@
   call $~lib/string/String#concat
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/createRandomString (; 210 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createRandomString (; 189 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 f64)
   (local $4 i32)
   (local $5 i32)
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $1
   block $break|0
    i32.const 0
@@ -10044,12 +8172,12 @@
     call $~lib/string/String.__concat
     local.tee $5
     local.get $1
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $1
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -10061,10 +8189,10 @@
   end
   local.get $1
  )
- (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 211 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 190 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=4
@@ -10077,15 +8205,15 @@
   local.get $2
   local.get $3
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/array/Array<~lib/string/String>#__set (; 212 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<~lib/string/String>#__set (; 191 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10095,10 +8223,10 @@
   i32.gt_u
   if
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    block
-    i32.const 4008
-    i32.const 456
+    i32.const 3848
+    i32.const 296
     i32.const 112
     i32.const 38
     call $~lib/builtins/abort
@@ -10128,9 +8256,9 @@
    i32.store offset=12
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/createRandomStringArray (; 213 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/createRandomStringArray (; 192 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10156,7 +8284,7 @@
     local.tee $3
     call $~lib/array/Array<~lib/string/String>#__set
     local.get $3
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -10168,7 +8296,7 @@
   end
   local.get $1
  )
- (func $~lib/util/sort/insertionSort<~lib/string/String> (; 214 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/sort/insertionSort<~lib/string/String> (; 193 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -10189,7 +8317,7 @@
     i32.shl
     i32.add
     i32.load
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $3
     i32.const 1
@@ -10207,7 +8335,7 @@
        i32.shl
        i32.add
        i32.load
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        local.set $6
        block (result i32)
         i32.const 2
@@ -10238,11 +8366,11 @@
         i32.store
        else        
         local.get $6
-        call $~lib/rt/purerc/__release
+        call $~lib/rt/pure/__release
         br $break|1
        end
        local.get $6
-       call $~lib/rt/purerc/__release
+       call $~lib/rt/pure/__release
        br $continue|1
       end
      end
@@ -10257,7 +8385,7 @@
     local.get $4
     i32.store
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -10268,7 +8396,7 @@
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/string/String>#sort (; 215 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#sort (; 194 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10282,7 +8410,7 @@
   i32.le_s
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -10294,11 +8422,11 @@
   if
    local.get $3
    i32.load offset=4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    local.get $3
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    block (result i32)
     i32.const 2
@@ -10319,12 +8447,12 @@
     i32.store
    end
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -10341,13 +8469,13 @@
    call $~lib/util/sort/insertionSort<~lib/string/String>
   end
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String>#get:length (; 216 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#get:length (; 195 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 217 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 196 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -10355,16 +8483,16 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String>#__get (; 218 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#__get (; 197 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 4008
-   i32.const 456
+   i32.const 3848
+   i32.const 296
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -10377,8 +8505,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 400
-   i32.const 456
+   i32.const 240
+   i32.const 296
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -10388,14 +8516,14 @@
   local.get $1
   call $~lib/array/Array<~lib/string/String>#__unchecked_get
  )
- (func $std/array/isSorted<~lib/string/String> (; 219 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isSorted<~lib/string/String> (; 198 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $break|0
    block
@@ -10433,18 +8561,18 @@
      i32.const 0
      local.set $6
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $4
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $5
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
     local.get $4
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $5
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
     i32.add
@@ -10457,13 +8585,13 @@
   i32.const 1
   local.set $5
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $std/array/assertSorted<~lib/string/String> (; 220 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/string/String> (; 199 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -10474,27 +8602,27 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 832
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0 (; 221 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0 (; 200 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -10517,9 +8645,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10541,9 +8669,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10553,9 +8681,9 @@
    i32.const -1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10565,9 +8693,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -10586,12 +8714,12 @@
   call $~lib/util/string/compareImpl
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $std/array/assertSorted<~lib/string/String>|trampoline (; 222 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $std/array/assertSorted<~lib/string/String>|trampoline (; 201 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   block $1of1
    block $0of1
     block $outOfRange
@@ -10612,7 +8740,7 @@
   local.get $1
   call $std/array/assertSorted<~lib/string/String>
  )
- (func $~lib/string/String#substring (; 223 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#substring (; 202 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -10627,7 +8755,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 4384
+   i32.const 4168
    i32.const 196
    i32.const 4
    call $~lib/builtins/abort
@@ -10697,8 +8825,8 @@
   local.get $3
   i32.eqz
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $8
@@ -10715,7 +8843,7 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -10729,9 +8857,9 @@
   local.get $3
   call $~lib/memory/memory.copy
   local.get $10
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<bool>#join_bool (; 224 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<bool>#join_bool (; 203 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10742,7 +8870,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -10753,11 +8881,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -10767,15 +8895,15 @@
   local.get $2
   i32.eqz
   if
-   i32.const 4480
-   i32.const 4504
+   i32.const 4264
+   i32.const 4288
    local.get $4
    i32.load8_u
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -10797,7 +8925,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -10827,8 +8955,8 @@
     i32.const 1
     i32.shl
     i32.add
-    i32.const 4480
-    i32.const 4504
+    i32.const 4264
+    i32.const 4288
     local.get $10
     select
     local.get $6
@@ -10882,8 +9010,8 @@
   i32.const 1
   i32.shl
   i32.add
-  i32.const 4480
-  i32.const 4504
+  i32.const 4264
+  i32.const 4288
   local.get $10
   select
   local.get $6
@@ -10904,33 +9032,33 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<bool>#join (; 225 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<bool>#join (; 204 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<bool>#join_bool
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/util/number/decimalCount32 (; 226 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/decimalCount32 (; 205 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 100000
@@ -10999,7 +9127,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/utoa32_lut (; 227 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_lut (; 206 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -11007,7 +9135,7 @@
   (local $7 i32)
   (local $8 i64)
   (local $9 i64)
-  i32.const 5072
+  i32.const 4856
   i32.load offset=4
   local.set $3
   block $break|0
@@ -11140,7 +9268,7 @@
    i32.store16
   end
  )
- (func $~lib/util/number/itoa32 (; 228 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (; 207 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -11150,8 +9278,8 @@
   local.get $0
   i32.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -11195,14 +9323,14 @@
    i32.store16
   end
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa<i32> (; 229 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa<i32> (; 208 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   call $~lib/util/number/itoa32
   return
  )
- (func $~lib/util/number/itoa_stream<i32> (; 230 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<i32> (; 209 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -11261,7 +9389,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<i32>#join_int (; 231 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#join_int (; 210 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11272,7 +9400,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -11283,11 +9411,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -11301,12 +9429,12 @@
    i32.load
    call $~lib/util/number/itoa<i32>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -11326,7 +9454,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -11403,33 +9531,33 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i32>#join (; 232 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i32>#join (; 211 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<i32>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/util/number/utoa32 (; 233 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/utoa32 (; 212 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -11438,8 +9566,8 @@
   local.get $0
   i32.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -11464,14 +9592,14 @@
    call $~lib/util/number/utoa32_lut
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa<u32> (; 234 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa<u32> (; 213 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   call $~lib/util/number/utoa32
   return
  )
- (func $~lib/util/number/itoa_stream<u32> (; 235 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u32> (; 214 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -11510,7 +9638,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<u32>#join_int (; 236 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#join_int (; 215 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11521,7 +9649,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -11532,11 +9660,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -11550,12 +9678,12 @@
    i32.load
    call $~lib/util/number/itoa<u32>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -11575,7 +9703,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -11652,40 +9780,40 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<u32>#join (; 237 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u32>#join (; 216 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<u32>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/builtins/isFinite<f64> (; 238 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/builtins/isFinite<f64> (; 217 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   local.get $0
   local.get $0
   f64.sub
   f64.const 0
   f64.eq
  )
- (func $~lib/array/Array<u64>#__unchecked_get (; 239 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64)
+ (func $~lib/array/Array<u64>#__unchecked_get (; 218 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -11694,7 +9822,7 @@
   i32.add
   i64.load
  )
- (func $~lib/array/Array<i16>#__unchecked_get (; 240 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i16>#__unchecked_get (; 219 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -11703,7 +9831,7 @@
   i32.add
   i32.load16_s
  )
- (func $~lib/util/number/genDigits (; 241 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (; 220 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
   (local $9 i64)
@@ -11758,7 +9886,7 @@
   local.set $14
   local.get $6
   local.set $15
-  i32.const 6536
+  i32.const 6320
   i32.load offset=4
   local.set $16
   block $break|0
@@ -12259,7 +10387,7 @@
   end
   local.get $15
  )
- (func $~lib/util/number/prettify (; 242 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/prettify (; 221 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -12589,7 +10717,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/dtoa_core (; 243 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/util/number/dtoa_core (; 222 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 f64)
   (local $4 i32)
@@ -12758,11 +10886,11 @@
     i32.shl
     i32.sub
     global.set $~lib/util/number/_K
-    i32.const 6224
+    i32.const 6008
     local.get $13
     call $~lib/array/Array<u64>#__unchecked_get
     global.set $~lib/util/number/_frc_pow
-    i32.const 6448
+    i32.const 6232
     local.get $13
     call $~lib/array/Array<i16>#__unchecked_get
     global.set $~lib/util/number/_exp_pow
@@ -13027,7 +11155,7 @@
   local.get $2
   i32.add
  )
- (func $~lib/util/number/dtoa (; 244 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/util/number/dtoa (; 223 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -13035,8 +11163,8 @@
   f64.const 0
   f64.eq
   if
-   i32.const 5392
-   call $~lib/rt/purerc/__retain
+   i32.const 5176
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -13046,17 +11174,17 @@
    local.get $0
    call $~lib/builtins/isNaN<f64>
    if
-    i32.const 5416
-    call $~lib/rt/purerc/__retain
+    i32.const 5200
+    call $~lib/rt/pure/__retain
     return
    end
-   i32.const 5440
-   i32.const 5480
+   i32.const 5224
+   i32.const 5264
    local.get $0
    f64.const 0
    f64.lt
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 28
@@ -13074,7 +11202,7 @@
   i32.eq
   if
    local.get $1
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -13086,7 +11214,7 @@
   call $~lib/rt/tlsf/__free
   local.get $3
  )
- (func $~lib/util/number/dtoa_stream (; 245 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
+ (func $~lib/util/number/dtoa_stream (; 224 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
@@ -13139,8 +11267,8 @@
     i32.add
     local.set $4
     local.get $0
-    i32.const 5440
-    i32.const 5480
+    i32.const 5224
+    i32.const 5264
     local.get $3
     select
     local.get $4
@@ -13157,7 +11285,7 @@
   local.get $2
   call $~lib/util/number/dtoa_core
  )
- (func $~lib/array/Array<f64>#join_flt (; 246 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f64>#join_flt (; 225 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -13168,7 +11296,7 @@
   (local $9 i32)
   (local $10 f64)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -13179,11 +11307,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13197,12 +11325,12 @@
    f64.load
    call $~lib/util/number/dtoa
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -13222,7 +11350,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -13299,33 +11427,33 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<f64>#join (; 247 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<f64>#join (; 226 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<f64>#join_flt
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/string/String>#join_str (; 248 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#join_str (; 227 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -13336,7 +11464,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -13347,11 +11475,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13363,10 +11491,10 @@
   if
    local.get $4
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13399,7 +11527,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     i32.const 0
@@ -13431,7 +11559,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
   block $break|1
    i32.const 0
@@ -13449,7 +11577,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     i32.const 0
@@ -13506,7 +11634,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   i32.const 0
@@ -13527,38 +11655,38 @@
   local.get $10
   local.set $8
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
  )
- (func $~lib/array/Array<~lib/string/String>#join (; 249 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#join (; 228 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/string/String>#join_str
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $std/array/Ref#constructor (; 250 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $std/array/Ref#constructor (; 229 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.eqz
   if
    i32.const 0
    i32.const 32
    call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
  )
- (func $~lib/array/Array<std/array/Ref | null>#join_ref (; 251 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<std/array/Ref | null>#join_ref (; 230 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -13568,7 +11696,7 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -13579,11 +11707,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13593,11 +11721,11 @@
   local.get $2
   i32.eqz
   if
-   i32.const 6720
-   call $~lib/rt/purerc/__retain
+   i32.const 6504
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13617,7 +11745,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $7
   i32.const 0
   local.set $8
@@ -13639,7 +11767,7 @@
     i32.add
     i32.load
     local.get $9
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $9
     local.get $9
     if
@@ -13648,7 +11776,7 @@
      i32.const 1
      i32.shl
      i32.add
-     i32.const 6720
+     i32.const 6504
      i32.const 15
      i32.const 1
      i32.shl
@@ -13696,7 +11824,7 @@
    i32.const 1
    i32.shl
    i32.add
-   i32.const 6720
+   i32.const 6504
    i32.const 15
    i32.const 1
    i32.shl
@@ -13716,42 +11844,42 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $7
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<std/array/Ref | null>#join (; 252 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<std/array/Ref | null>#join (; 231 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<std/array/Ref | null>#join_ref
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<i32>#toString (; 253 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i32>#toString (; 232 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<i32>#join
  )
- (func $~lib/util/number/itoa<i8> (; 254 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa<i8> (; 233 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 24
   i32.shl
@@ -13760,7 +11888,7 @@
   call $~lib/util/number/itoa32
   return
  )
- (func $~lib/util/number/itoa_stream<i8> (; 255 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<i8> (; 234 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -13835,7 +11963,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<i8>#join_int (; 256 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i8>#join_int (; 235 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -13846,7 +11974,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -13857,11 +11985,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -13875,12 +12003,12 @@
    i32.load8_s
    call $~lib/util/number/itoa<i8>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -13900,7 +12028,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -13977,45 +12105,45 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i8>#join (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i8>#join (; 236 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<i8>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<i8>#toString (; 258 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i8>#toString (; 237 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<i8>#join
  )
- (func $~lib/util/number/itoa<u16> (; 259 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa<u16> (; 238 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 65535
   i32.and
   call $~lib/util/number/utoa32
   return
  )
- (func $~lib/util/number/itoa_stream<u16> (; 260 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u16> (; 239 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -14060,7 +12188,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<u16>#join_int (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u16>#join_int (; 240 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -14071,7 +12199,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -14082,11 +12210,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -14100,12 +12228,12 @@
    i32.load16_u
    call $~lib/util/number/itoa<u16>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -14125,7 +12253,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -14202,38 +12330,38 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<u16>#join (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u16>#join (; 241 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<u16>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<u16>#toString (; 263 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u16>#toString (; 242 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<u16>#join
  )
- (func $~lib/util/number/decimalCount64 (; 264 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/decimalCount64 (; 243 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   local.get $0
   i64.const 1000000000000000
@@ -14302,7 +12430,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/utoa64_lut (; 265 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_lut (; 244 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   (local $4 i64)
   (local $5 i32)
@@ -14314,7 +12442,7 @@
   (local $11 i32)
   (local $12 i64)
   (local $13 i64)
-  i32.const 5072
+  i32.const 4856
   i32.load offset=4
   local.set $3
   block $break|0
@@ -14428,7 +12556,7 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/utoa64 (; 266 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/utoa64 (; 245 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -14439,8 +12567,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -14495,14 +12623,14 @@
    end
   end
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa<u64> (; 267 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa<u64> (; 246 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   local.get $0
   call $~lib/util/number/utoa64
   return
  )
- (func $~lib/util/number/itoa_stream<u64> (; 268 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
+ (func $~lib/util/number/itoa_stream<u64> (; 247 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -14567,7 +12695,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<u64>#join_int (; 269 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u64>#join_int (; 248 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -14578,7 +12706,7 @@
   (local $9 i32)
   (local $10 i64)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -14589,11 +12717,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -14607,12 +12735,12 @@
    i64.load
    call $~lib/util/number/itoa<u64>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -14632,7 +12760,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -14709,38 +12837,38 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<u64>#join (; 270 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u64>#join (; 249 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<u64>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<u64>#toString (; 271 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<u64>#toString (; 250 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<u64>#join
  )
- (func $~lib/util/number/itoa64 (; 272 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa64 (; 251 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -14752,8 +12880,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 4632
-   call $~lib/rt/purerc/__retain
+   i32.const 4416
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -14829,14 +12957,14 @@
    i32.store16
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa<i64> (; 273 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa<i64> (; 252 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   local.get $0
   call $~lib/util/number/itoa64
   return
  )
- (func $~lib/util/number/itoa_stream<i64> (; 274 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
+ (func $~lib/util/number/itoa_stream<i64> (; 253 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -14923,7 +13051,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<i64>#join_int (; 275 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i64>#join_int (; 254 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -14934,7 +13062,7 @@
   (local $9 i32)
   (local $10 i64)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -14945,11 +13073,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -14963,12 +13091,12 @@
    i64.load
    call $~lib/util/number/itoa<i64>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -14988,7 +13116,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -15065,38 +13193,38 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<i64>#join (; 276 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i64>#join (; 255 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<i64>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<i64>#toString (; 277 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<i64>#toString (; 256 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<i64>#join
  )
- (func $~lib/array/Array<~lib/string/String | null>#join_str (; 278 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#join_str (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -15107,7 +13235,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -15118,11 +13246,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15134,10 +13262,10 @@
   if
    local.get $4
    i32.load
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15170,7 +13298,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     i32.const 0
@@ -15202,7 +13330,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
   block $break|1
    i32.const 0
@@ -15220,7 +13348,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     i32.const 0
@@ -15277,7 +13405,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   i32.const 0
@@ -15298,36 +13426,36 @@
   local.get $10
   local.set $8
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
  )
- (func $~lib/array/Array<~lib/string/String | null>#join (; 279 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#join (; 258 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/string/String | null>#join_str
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/string/String | null>#toString (; 280 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String | null>#toString (; 259 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/string/String | null>#join
  )
- (func $~lib/array/Array<~lib/string/String>#toString (; 281 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#toString (; 260 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/string/String>#join
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#join_arr (; 282 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#join_arr (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -15337,7 +13465,7 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -15348,16 +13476,16 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $4
   local.get $1
   call $~lib/string/String#get:length
@@ -15373,7 +13501,7 @@
    local.get $6
    i32.load
    local.get $7
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $7
    local.get $7
    if (result i32)
@@ -15381,16 +13509,16 @@
     local.get $1
     call $~lib/array/Array<i32>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15410,7 +13538,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     if
@@ -15422,12 +13550,12 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $8
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $5
     if
@@ -15436,10 +13564,10 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $3
     i32.const 1
@@ -15457,7 +13585,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   if
@@ -15469,48 +13597,48 @@
    call $~lib/string/String.__concat
    local.tee $9
    local.get $4
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $4
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   local.get $4
   local.set $9
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#join (; 283 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#join (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/array/Array<i32>>#join_arr
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#toString (; 284 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#toString (; 263 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/array/Array<i32>>#join
  )
- (func $~lib/util/number/itoa<u8> (; 285 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa<u8> (; 264 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 255
   i32.and
   call $~lib/util/number/utoa32
   return
  )
- (func $~lib/util/number/itoa_stream<u8> (; 286 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/itoa_stream<u8> (; 265 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -15555,7 +13683,7 @@
   end
   local.get $3
  )
- (func $~lib/array/Array<u8>#join_int (; 287 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u8>#join_int (; 266 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -15566,7 +13694,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -15577,11 +13705,11 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15595,12 +13723,12 @@
    i32.load8_u
    call $~lib/util/number/itoa<u8>
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -15620,7 +13748,7 @@
   i32.shl
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $8
   i32.const 0
   local.set $9
@@ -15697,33 +13825,33 @@
    call $~lib/string/String#substring
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
   local.get $8
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<u8>#join (; 288 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<u8>#join (; 267 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<u8>#join_int
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/array/Array<u8>>#join_arr (; 289 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u8>>#join_arr (; 268 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -15733,7 +13861,7 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -15744,16 +13872,16 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $4
   local.get $1
   call $~lib/string/String#get:length
@@ -15769,7 +13897,7 @@
    local.get $6
    i32.load
    local.get $7
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $7
    local.get $7
    if (result i32)
@@ -15777,16 +13905,16 @@
     local.get $1
     call $~lib/array/Array<u8>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15806,7 +13934,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     if
@@ -15818,12 +13946,12 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $8
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $5
     if
@@ -15832,10 +13960,10 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $3
     i32.const 1
@@ -15853,7 +13981,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   if
@@ -15865,41 +13993,41 @@
    call $~lib/string/String.__concat
    local.tee $9
    local.get $4
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $4
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   local.get $4
   local.set $9
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
  )
- (func $~lib/array/Array<~lib/array/Array<u8>>#join (; 290 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u8>>#join (; 269 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/array/Array<u8>>#join_arr
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/array/Array<u8>>#toString (; 291 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u8>>#toString (; 270 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/array/Array<u8>>#join
  )
- (func $~lib/array/Array<~lib/array/Array<u32>>#join_arr (; 292 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u32>>#join_arr (; 271 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -15909,7 +14037,7 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -15920,16 +14048,16 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $4
   local.get $1
   call $~lib/string/String#get:length
@@ -15945,7 +14073,7 @@
    local.get $6
    i32.load
    local.get $7
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $7
    local.get $7
    if (result i32)
@@ -15953,16 +14081,16 @@
     local.get $1
     call $~lib/array/Array<u32>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -15982,7 +14110,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     if
@@ -15994,12 +14122,12 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $8
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $5
     if
@@ -16008,10 +14136,10 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $3
     i32.const 1
@@ -16029,7 +14157,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   if
@@ -16041,36 +14169,36 @@
    call $~lib/string/String.__concat
    local.tee $9
    local.get $4
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $4
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   local.get $4
   local.set $9
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
  )
- (func $~lib/array/Array<~lib/array/Array<u32>>#join (; 293 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<u32>>#join (; 272 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/array/Array<u32>>#join_arr
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr (; 294 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr (; 273 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -16080,7 +14208,7 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -16091,16 +14219,16 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 4272
-   call $~lib/rt/purerc/__retain
+   i32.const 4056
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
-  i32.const 4272
-  call $~lib/rt/purerc/__retain
+  i32.const 4056
+  call $~lib/rt/pure/__retain
   local.set $4
   local.get $1
   call $~lib/string/String#get:length
@@ -16116,7 +14244,7 @@
    local.get $6
    i32.load
    local.get $7
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $7
    local.get $7
    if (result i32)
@@ -16124,16 +14252,16 @@
     local.get $1
     call $~lib/array/Array<~lib/array/Array<u32>>#join
    else    
-    i32.const 4272
-    call $~lib/rt/purerc/__retain
+    i32.const 4056
+    call $~lib/rt/pure/__retain
    end
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -16153,7 +14281,7 @@
     i32.add
     i32.load
     local.get $7
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $7
     local.get $7
     if
@@ -16165,12 +14293,12 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $8
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $5
     if
@@ -16179,10 +14307,10 @@
      call $~lib/string/String.__concat
      local.tee $9
      local.get $4
-     call $~lib/rt/purerc/__retainRelease
+     call $~lib/rt/pure/__retainRelease
      local.set $4
      local.get $9
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
     end
     local.get $3
     i32.const 1
@@ -16200,7 +14328,7 @@
   i32.add
   i32.load
   local.get $7
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   local.set $7
   local.get $7
   if
@@ -16212,52 +14340,41 @@
    call $~lib/string/String.__concat
    local.tee $9
    local.get $4
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $4
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   local.get $4
   local.set $9
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
  )
- (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join (; 295 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join (; 274 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join_arr
   local.set $2
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
   return
  )
- (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#toString (; 296 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#toString (; 275 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.const 4536
+  i32.const 4320
   call $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#join
  )
- (func $~lib/rt/purerc/__release (; 297 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $start:std/array (; 298 ;) (type $FUNCSIG$v)
+ (func $start:std/array (; 276 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -16327,7 +14444,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 37
     i32.const 2
     call $~lib/builtins/abort
@@ -16340,7 +14457,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 38
     i32.const 2
     call $~lib/builtins/abort
@@ -16355,7 +14472,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 39
     i32.const 2
     call $~lib/builtins/abort
@@ -16371,7 +14488,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 40
     i32.const 2
     call $~lib/builtins/abort
@@ -16384,60 +14501,60 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 41
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
-   i32.const 272
+   i32.const 168
    call $~lib/array/Array.isArray<~lib/string/String>
    i32.const 0
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 42
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 296
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 192
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $1
    i32.const 1
    i32.const 1
    i32.const 3
    call $~lib/array/Array<u8>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 376
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 216
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $3
    i32.const 0
    call $std/array/isArraysEqual<u8>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 50
     i32.const 2
     call $~lib/builtins/abort
@@ -16448,21 +14565,21 @@
    i32.const 0
    global.get $~lib/builtins/i32.MAX_VALUE
    call $~lib/array/Array<u8>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 504
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 344
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $4
    i32.const 0
    call $std/array/isArraysEqual<u8>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 53
     i32.const 2
     call $~lib/builtins/abort
@@ -16473,21 +14590,21 @@
    i32.const 0
    i32.const -3
    call $~lib/array/Array<u8>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 528
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 368
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $5
    i32.const 0
    call $std/array/isArraysEqual<u8>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 56
     i32.const 2
     call $~lib/builtins/abort
@@ -16498,21 +14615,21 @@
    i32.const -2
    global.get $~lib/builtins/i32.MAX_VALUE
    call $~lib/array/Array<u8>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 552
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 392
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $6
    i32.const 0
    call $std/array/isArraysEqual<u8>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 59
     i32.const 2
     call $~lib/builtins/abort
@@ -16523,71 +14640,71 @@
    i32.const 1
    i32.const 0
    call $~lib/array/Array<u8>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
    i32.const 5
    i32.const 0
    i32.const 20
-   i32.const 576
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 416
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $7
    i32.const 0
    call $std/array/isArraysEqual<u8>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 62
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 600
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 440
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $6
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $7
    local.get $7
    i32.const 1
    i32.const 1
    i32.const 3
    call $~lib/array/Array<u32>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 640
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 480
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $4
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 69
     i32.const 2
     call $~lib/builtins/abort
@@ -16598,21 +14715,21 @@
    i32.const 0
    global.get $~lib/builtins/i32.MAX_VALUE
    call $~lib/array/Array<u32>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 680
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 520
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $3
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 72
     i32.const 2
     call $~lib/builtins/abort
@@ -16623,21 +14740,21 @@
    i32.const 0
    i32.const -3
    call $~lib/array/Array<u32>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 720
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 560
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $1
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 75
     i32.const 2
     call $~lib/builtins/abort
@@ -16648,21 +14765,21 @@
    i32.const -2
    global.get $~lib/builtins/i32.MAX_VALUE
    call $~lib/array/Array<u32>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 760
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 600
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $0
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 78
     i32.const 2
     call $~lib/builtins/abort
@@ -16673,40 +14790,40 @@
    i32.const 1
    i32.const 0
    call $~lib/array/Array<u32>#fill
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 800
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 640
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $2
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 81
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    global.get $std/array/arr
@@ -16716,7 +14833,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 87
     i32.const 2
     call $~lib/builtins/abort
@@ -16729,7 +14846,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 88
     i32.const 2
     call $~lib/builtins/abort
@@ -16747,7 +14864,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 92
     i32.const 2
     call $~lib/builtins/abort
@@ -16760,7 +14877,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 93
     i32.const 2
     call $~lib/builtins/abort
@@ -16773,7 +14890,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 94
     i32.const 2
     call $~lib/builtins/abort
@@ -16788,7 +14905,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 98
     i32.const 2
     call $~lib/builtins/abort
@@ -16801,7 +14918,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 99
     i32.const 2
     call $~lib/builtins/abort
@@ -16814,7 +14931,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 100
     i32.const 2
     call $~lib/builtins/abort
@@ -16831,7 +14948,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 104
     i32.const 2
     call $~lib/builtins/abort
@@ -16844,7 +14961,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 105
     i32.const 2
     call $~lib/builtins/abort
@@ -16858,7 +14975,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 106
     i32.const 2
     call $~lib/builtins/abort
@@ -16875,7 +14992,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 110
     i32.const 2
     call $~lib/builtins/abort
@@ -16888,7 +15005,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 111
     i32.const 2
     call $~lib/builtins/abort
@@ -16902,7 +15019,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 112
     i32.const 2
     call $~lib/builtins/abort
@@ -16916,7 +15033,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 113
     i32.const 2
     call $~lib/builtins/abort
@@ -16933,7 +15050,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 117
     i32.const 2
     call $~lib/builtins/abort
@@ -16946,7 +15063,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 118
     i32.const 2
     call $~lib/builtins/abort
@@ -16960,7 +15077,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 119
     i32.const 2
     call $~lib/builtins/abort
@@ -16974,7 +15091,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 120
     i32.const 2
     call $~lib/builtins/abort
@@ -16988,7 +15105,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 121
     i32.const 2
     call $~lib/builtins/abort
@@ -17011,7 +15128,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 130
     i32.const 2
     call $~lib/builtins/abort
@@ -17024,7 +15141,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 131
     i32.const 2
     call $~lib/builtins/abort
@@ -17037,7 +15154,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 132
     i32.const 2
     call $~lib/builtins/abort
@@ -17047,12 +15164,12 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 888
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 728
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $3
    call $~lib/array/Array<i32>#concat
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/arr
    call $std/array/internalCapacity<i32>
    i32.const 3
@@ -17060,7 +15177,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 135
     i32.const 2
     call $~lib/builtins/abort
@@ -17074,7 +15191,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 137
     i32.const 2
     call $~lib/builtins/abort
@@ -17088,7 +15205,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 138
     i32.const 2
     call $~lib/builtins/abort
@@ -17102,7 +15219,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 139
     i32.const 2
     call $~lib/builtins/abort
@@ -17118,7 +15235,7 @@
    drop
    block (result i32)
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     global.get $std/array/arr
     local.get $2
     call $~lib/array/Array<i32>#concat
@@ -17131,7 +15248,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 146
     i32.const 2
     call $~lib/builtins/abort
@@ -17144,7 +15261,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 147
     i32.const 2
     call $~lib/builtins/abort
@@ -17157,7 +15274,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 148
     i32.const 2
     call $~lib/builtins/abort
@@ -17171,7 +15288,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 149
     i32.const 2
     call $~lib/builtins/abort
@@ -17185,7 +15302,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 150
     i32.const 2
     call $~lib/builtins/abort
@@ -17199,7 +15316,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 151
     i32.const 2
     call $~lib/builtins/abort
@@ -17213,7 +15330,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 152
     i32.const 2
     call $~lib/builtins/abort
@@ -17227,7 +15344,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 153
     i32.const 2
     call $~lib/builtins/abort
@@ -17243,7 +15360,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 156
     i32.const 2
     call $~lib/builtins/abort
@@ -17251,7 +15368,7 @@
    end
    block (result i32)
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     global.get $std/array/arr
     i32.const 0
     call $~lib/array/Array<i32>#concat
@@ -17264,7 +15381,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 159
     i32.const 2
     call $~lib/builtins/abort
@@ -17278,7 +15395,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 160
     i32.const 2
     call $~lib/builtins/abort
@@ -17287,11 +15404,11 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 904
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 744
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    local.get $1
    call $~lib/array/Array<i32>#get:length
@@ -17300,7 +15417,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 163
     i32.const 2
     call $~lib/builtins/abort
@@ -17308,7 +15425,7 @@
    end
    block (result i32)
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
     global.get $std/array/arr
     call $~lib/array/Array<i32>#concat
@@ -17321,7 +15438,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 165
     i32.const 2
     call $~lib/builtins/abort
@@ -17334,22 +15451,22 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 166
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 0
@@ -17357,12 +15474,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 920
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 760
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $3
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 0
@@ -17373,16 +15490,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 960
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 800
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $2
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 174
     i32.const 2
     call $~lib/builtins/abort
@@ -17391,12 +15508,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1000
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 840
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $7
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 1
@@ -17407,16 +15524,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1040
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 880
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $5
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 176
     i32.const 2
     call $~lib/builtins/abort
@@ -17425,12 +15542,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1080
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 920
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $8
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 1
@@ -17441,16 +15558,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1120
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 960
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $10
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 178
     i32.const 2
     call $~lib/builtins/abort
@@ -17459,12 +15576,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1160
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1000
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $11
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 2
@@ -17475,16 +15592,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1200
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1040
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $13
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 180
     i32.const 2
     call $~lib/builtins/abort
@@ -17493,12 +15610,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1240
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1080
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $14
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 0
@@ -17509,16 +15626,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1280
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1120
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $16
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 182
     i32.const 2
     call $~lib/builtins/abort
@@ -17527,12 +15644,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1320
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1160
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $17
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 1
@@ -17543,16 +15660,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1360
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1200
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $19
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 184
     i32.const 2
     call $~lib/builtins/abort
@@ -17561,12 +15678,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1400
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1240
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $20
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 1
@@ -17577,16 +15694,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1440
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1280
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $22
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 186
     i32.const 2
     call $~lib/builtins/abort
@@ -17595,12 +15712,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1480
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1320
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $23
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 0
@@ -17611,16 +15728,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1520
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1360
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $25
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 188
     i32.const 2
     call $~lib/builtins/abort
@@ -17629,12 +15746,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1560
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1400
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $26
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const 0
@@ -17645,16 +15762,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1600
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1440
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $28
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 190
     i32.const 2
     call $~lib/builtins/abort
@@ -17663,12 +15780,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1640
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1480
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $29
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const -4
@@ -17679,16 +15796,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1680
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1520
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $31
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 192
     i32.const 2
     call $~lib/builtins/abort
@@ -17697,12 +15814,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1720
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1560
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $32
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const -4
@@ -17713,16 +15830,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1760
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1600
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $34
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 194
     i32.const 2
     call $~lib/builtins/abort
@@ -17731,12 +15848,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1800
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1640
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $35
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
    local.get $1
    i32.const -4
@@ -17747,95 +15864,95 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1840
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1680
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $37
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 196
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $10
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $11
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $12
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $16
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $17
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $15
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $19
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $20
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $18
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $22
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $23
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $21
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $25
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $26
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $24
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $28
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $29
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $27
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $31
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $32
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $30
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $34
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $35
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $33
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $37
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    global.get $std/array/arr
@@ -17849,7 +15966,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 204
     i32.const 2
     call $~lib/builtins/abort
@@ -17862,7 +15979,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 205
     i32.const 2
     call $~lib/builtins/abort
@@ -17876,7 +15993,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 206
     i32.const 2
     call $~lib/builtins/abort
@@ -17890,7 +16007,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 207
     i32.const 2
     call $~lib/builtins/abort
@@ -17904,7 +16021,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 208
     i32.const 2
     call $~lib/builtins/abort
@@ -17918,7 +16035,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 209
     i32.const 2
     call $~lib/builtins/abort
@@ -17935,7 +16052,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 213
     i32.const 2
     call $~lib/builtins/abort
@@ -17948,7 +16065,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 214
     i32.const 2
     call $~lib/builtins/abort
@@ -17962,7 +16079,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 215
     i32.const 2
     call $~lib/builtins/abort
@@ -17976,7 +16093,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 216
     i32.const 2
     call $~lib/builtins/abort
@@ -17990,7 +16107,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 217
     i32.const 2
     call $~lib/builtins/abort
@@ -18004,7 +16121,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 218
     i32.const 2
     call $~lib/builtins/abort
@@ -18018,7 +16135,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 219
     i32.const 2
     call $~lib/builtins/abort
@@ -18035,7 +16152,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 228
     i32.const 2
     call $~lib/builtins/abort
@@ -18048,7 +16165,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 229
     i32.const 2
     call $~lib/builtins/abort
@@ -18061,7 +16178,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 230
     i32.const 2
     call $~lib/builtins/abort
@@ -18075,7 +16192,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 231
     i32.const 2
     call $~lib/builtins/abort
@@ -18089,7 +16206,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 232
     i32.const 2
     call $~lib/builtins/abort
@@ -18103,7 +16220,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 233
     i32.const 2
     call $~lib/builtins/abort
@@ -18117,7 +16234,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 234
     i32.const 2
     call $~lib/builtins/abort
@@ -18132,7 +16249,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 238
     i32.const 2
     call $~lib/builtins/abort
@@ -18145,7 +16262,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 239
     i32.const 2
     call $~lib/builtins/abort
@@ -18158,7 +16275,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 240
     i32.const 2
     call $~lib/builtins/abort
@@ -18172,7 +16289,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 241
     i32.const 2
     call $~lib/builtins/abort
@@ -18186,7 +16303,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 242
     i32.const 2
     call $~lib/builtins/abort
@@ -18200,7 +16317,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 243
     i32.const 2
     call $~lib/builtins/abort
@@ -18210,7 +16327,7 @@
   block
    global.get $std/array/arr
    call $~lib/array/Array<i32>#reverse
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/arr
    call $~lib/array/Array<i32>#get:length
    i32.const 3
@@ -18218,7 +16335,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 251
     i32.const 2
     call $~lib/builtins/abort
@@ -18231,7 +16348,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 252
     i32.const 2
     call $~lib/builtins/abort
@@ -18245,7 +16362,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 253
     i32.const 2
     call $~lib/builtins/abort
@@ -18259,7 +16376,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 254
     i32.const 2
     call $~lib/builtins/abort
@@ -18273,7 +16390,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 255
     i32.const 2
     call $~lib/builtins/abort
@@ -18300,7 +16417,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 265
     i32.const 2
     call $~lib/builtins/abort
@@ -18317,7 +16434,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 268
     i32.const 2
     call $~lib/builtins/abort
@@ -18334,7 +16451,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 271
     i32.const 2
     call $~lib/builtins/abort
@@ -18351,7 +16468,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 274
     i32.const 2
     call $~lib/builtins/abort
@@ -18368,7 +16485,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 277
     i32.const 2
     call $~lib/builtins/abort
@@ -18385,7 +16502,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 280
     i32.const 2
     call $~lib/builtins/abort
@@ -18402,7 +16519,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 283
     i32.const 2
     call $~lib/builtins/abort
@@ -18419,7 +16536,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 286
     i32.const 2
     call $~lib/builtins/abort
@@ -18436,7 +16553,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 289
     i32.const 2
     call $~lib/builtins/abort
@@ -18453,7 +16570,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 292
     i32.const 2
     call $~lib/builtins/abort
@@ -18472,7 +16589,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 299
     i32.const 2
     call $~lib/builtins/abort
@@ -18489,7 +16606,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 302
     i32.const 2
     call $~lib/builtins/abort
@@ -18506,7 +16623,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 305
     i32.const 2
     call $~lib/builtins/abort
@@ -18523,7 +16640,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 308
     i32.const 2
     call $~lib/builtins/abort
@@ -18540,7 +16657,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 311
     i32.const 2
     call $~lib/builtins/abort
@@ -18557,7 +16674,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 314
     i32.const 2
     call $~lib/builtins/abort
@@ -18574,7 +16691,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 317
     i32.const 2
     call $~lib/builtins/abort
@@ -18591,7 +16708,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 320
     i32.const 2
     call $~lib/builtins/abort
@@ -18608,7 +16725,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 323
     i32.const 2
     call $~lib/builtins/abort
@@ -18625,7 +16742,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 326
     i32.const 2
     call $~lib/builtins/abort
@@ -18635,7 +16752,7 @@
    i32.const 1
    i32.const 1
    call $~lib/array/Array<i32>#splice
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/arr
    call $~lib/array/Array<i32>#get:length
    i32.const 4
@@ -18643,7 +16760,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 330
     i32.const 2
     call $~lib/builtins/abort
@@ -18656,7 +16773,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 331
     i32.const 2
     call $~lib/builtins/abort
@@ -18670,7 +16787,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 332
     i32.const 2
     call $~lib/builtins/abort
@@ -18684,7 +16801,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 333
     i32.const 2
     call $~lib/builtins/abort
@@ -18695,11 +16812,11 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1880
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1720
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $33
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $37
    local.get $37
    i32.const 0
@@ -18709,16 +16826,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1920
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1760
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $30
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 340
     i32.const 2
     call $~lib/builtins/abort
@@ -18728,16 +16845,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 1960
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1800
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $32
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 341
     i32.const 2
     call $~lib/builtins/abort
@@ -18746,12 +16863,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 1976
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1816
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $31
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 2
@@ -18761,16 +16878,16 @@
    i32.const 3
    i32.const 2
    i32.const 17
-   i32.const 2016
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1856
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $29
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 344
     i32.const 2
     call $~lib/builtins/abort
@@ -18780,16 +16897,16 @@
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 2048
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1888
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $28
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 345
     i32.const 2
     call $~lib/builtins/abort
@@ -18798,12 +16915,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2072
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1912
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $24
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 2
@@ -18813,16 +16930,16 @@
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 2112
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1952
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $25
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 348
     i32.const 2
     call $~lib/builtins/abort
@@ -18832,16 +16949,16 @@
    i32.const 3
    i32.const 2
    i32.const 17
-   i32.const 2136
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 1976
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $21
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 349
     i32.const 2
     call $~lib/builtins/abort
@@ -18850,12 +16967,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2168
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2008
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $23
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 0
@@ -18865,16 +16982,16 @@
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 2208
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2048
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $18
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 352
     i32.const 2
     call $~lib/builtins/abort
@@ -18884,16 +17001,16 @@
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 2232
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2072
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $20
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 353
     i32.const 2
     call $~lib/builtins/abort
@@ -18902,12 +17019,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2264
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2104
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $19
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const -1
@@ -18917,16 +17034,16 @@
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 2304
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2144
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $17
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 356
     i32.const 2
     call $~lib/builtins/abort
@@ -18936,16 +17053,16 @@
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 2328
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2168
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $16
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 357
     i32.const 2
     call $~lib/builtins/abort
@@ -18954,12 +17071,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2360
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2200
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $12
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const -2
@@ -18969,16 +17086,16 @@
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 2400
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2240
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $13
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 360
     i32.const 2
     call $~lib/builtins/abort
@@ -18988,16 +17105,16 @@
    i32.const 3
    i32.const 2
    i32.const 17
-   i32.const 2424
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2264
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $9
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 361
     i32.const 2
     call $~lib/builtins/abort
@@ -19006,12 +17123,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2456
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2296
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $11
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const -2
@@ -19021,16 +17138,16 @@
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 2496
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2336
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $6
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 364
     i32.const 2
     call $~lib/builtins/abort
@@ -19040,16 +17157,16 @@
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 2520
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2360
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $8
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 365
     i32.const 2
     call $~lib/builtins/abort
@@ -19058,12 +17175,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2552
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2392
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $5
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const -7
@@ -19073,16 +17190,16 @@
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 2592
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2432
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $7
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 368
     i32.const 2
     call $~lib/builtins/abort
@@ -19092,16 +17209,16 @@
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 2616
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2456
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $2
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 369
     i32.const 2
     call $~lib/builtins/abort
@@ -19110,12 +17227,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2648
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2488
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $4
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const -2
@@ -19125,16 +17242,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 2688
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2528
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $1
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 372
     i32.const 2
     call $~lib/builtins/abort
@@ -19144,16 +17261,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2704
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2544
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $36
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 373
     i32.const 2
     call $~lib/builtins/abort
@@ -19162,12 +17279,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2744
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2584
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $38
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 1
@@ -19177,16 +17294,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 2784
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2624
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $40
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 376
     i32.const 2
     call $~lib/builtins/abort
@@ -19196,16 +17313,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2800
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2640
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $41
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 377
     i32.const 2
     call $~lib/builtins/abort
@@ -19214,12 +17331,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2840
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2680
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $42
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 4
@@ -19229,16 +17346,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 2880
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2720
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $44
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 380
     i32.const 2
     call $~lib/builtins/abort
@@ -19248,16 +17365,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2896
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2736
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $45
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 381
     i32.const 2
     call $~lib/builtins/abort
@@ -19266,12 +17383,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2936
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2776
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $46
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 7
@@ -19281,16 +17398,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 2976
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2816
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $48
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 384
     i32.const 2
     call $~lib/builtins/abort
@@ -19300,16 +17417,16 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 2992
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2832
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $49
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 385
     i32.const 2
     call $~lib/builtins/abort
@@ -19318,12 +17435,12 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 3032
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2872
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $50
    local.get $37
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $37
    local.get $37
    i32.const 7
@@ -19333,16 +17450,16 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 3072
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2912
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $52
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 388
     i32.const 2
     call $~lib/builtins/abort
@@ -19352,127 +17469,127 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 3088
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 2928
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $53
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 389
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $33
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $37
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $35
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $30
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $32
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $31
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $34
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $29
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $28
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $24
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $27
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $25
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $21
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $23
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $26
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $18
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $20
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $19
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $22
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $17
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $16
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $12
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $15
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $11
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $10
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $36
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $38
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $40
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $41
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $42
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $39
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $44
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $45
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $46
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $43
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $48
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $49
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $50
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $47
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $52
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $53
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    global.get $std/array/arr
@@ -19501,7 +17618,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 402
     i32.const 2
     call $~lib/builtins/abort
@@ -19517,7 +17634,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 405
     i32.const 2
     call $~lib/builtins/abort
@@ -19533,7 +17650,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 408
     i32.const 2
     call $~lib/builtins/abort
@@ -19549,7 +17666,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 416
     i32.const 2
     call $~lib/builtins/abort
@@ -19562,7 +17679,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 417
     i32.const 2
     call $~lib/builtins/abort
@@ -19578,7 +17695,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 419
     i32.const 2
     call $~lib/builtins/abort
@@ -19606,7 +17723,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 432
     i32.const 2
     call $~lib/builtins/abort
@@ -19619,7 +17736,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 433
     i32.const 2
     call $~lib/builtins/abort
@@ -19645,7 +17762,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 443
     i32.const 2
     call $~lib/builtins/abort
@@ -19661,7 +17778,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 446
     i32.const 2
     call $~lib/builtins/abort
@@ -19677,7 +17794,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 454
     i32.const 2
     call $~lib/builtins/abort
@@ -19690,7 +17807,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 455
     i32.const 2
     call $~lib/builtins/abort
@@ -19706,7 +17823,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 457
     i32.const 2
     call $~lib/builtins/abort
@@ -19734,7 +17851,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 470
     i32.const 2
     call $~lib/builtins/abort
@@ -19747,7 +17864,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 471
     i32.const 2
     call $~lib/builtins/abort
@@ -19773,7 +17890,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 481
     i32.const 2
     call $~lib/builtins/abort
@@ -19789,7 +17906,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 484
     i32.const 2
     call $~lib/builtins/abort
@@ -19805,7 +17922,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 492
     i32.const 2
     call $~lib/builtins/abort
@@ -19818,7 +17935,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 493
     i32.const 2
     call $~lib/builtins/abort
@@ -19834,7 +17951,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 495
     i32.const 2
     call $~lib/builtins/abort
@@ -19862,7 +17979,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 508
     i32.const 2
     call $~lib/builtins/abort
@@ -19875,7 +17992,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 509
     i32.const 2
     call $~lib/builtins/abort
@@ -19902,7 +18019,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 520
     i32.const 2
     call $~lib/builtins/abort
@@ -19919,7 +18036,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 529
     i32.const 2
     call $~lib/builtins/abort
@@ -19932,7 +18049,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 530
     i32.const 2
     call $~lib/builtins/abort
@@ -19949,7 +18066,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 533
     i32.const 2
     call $~lib/builtins/abort
@@ -19978,7 +18095,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 547
     i32.const 2
     call $~lib/builtins/abort
@@ -19991,7 +18108,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 548
     i32.const 2
     call $~lib/builtins/abort
@@ -20015,7 +18132,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 573
     i32.const 2
     call $~lib/builtins/abort
@@ -20071,7 +18188,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 587
     i32.const 2
     call $~lib/builtins/abort
@@ -20088,7 +18205,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 588
     i32.const 2
     call $~lib/builtins/abort
@@ -20099,14 +18216,14 @@
    global.get $std/array/arr
    i32.const 23
    call $~lib/array/Array<i32>#map<i32>
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 6
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 597
     i32.const 2
     call $~lib/builtins/abort
@@ -20119,7 +18236,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 598
     i32.const 2
     call $~lib/builtins/abort
@@ -20130,14 +18247,14 @@
    global.get $std/array/arr
    i32.const 24
    call $~lib/array/Array<i32>#map<i32>
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 406
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 605
     i32.const 2
     call $~lib/builtins/abort
@@ -20160,14 +18277,14 @@
    global.get $std/array/arr
    i32.const 25
    call $~lib/array/Array<i32>#map<i32>
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 1
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 620
     i32.const 2
     call $~lib/builtins/abort
@@ -20180,7 +18297,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 621
     i32.const 2
     call $~lib/builtins/abort
@@ -20195,7 +18312,7 @@
    call $~lib/array/Array<i32>#push
    drop
    local.get $53
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    global.get $std/array/arr
@@ -20209,7 +18326,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 631
     i32.const 2
     call $~lib/builtins/abort
@@ -20220,14 +18337,14 @@
    global.get $std/array/arr
    i32.const 27
    call $~lib/array/Array<i32>#filter
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 6
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 640
     i32.const 2
     call $~lib/builtins/abort
@@ -20240,7 +18357,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 641
     i32.const 2
     call $~lib/builtins/abort
@@ -20251,14 +18368,14 @@
    global.get $std/array/arr
    i32.const 28
    call $~lib/array/Array<i32>#filter
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 406
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 648
     i32.const 2
     call $~lib/builtins/abort
@@ -20281,14 +18398,14 @@
    global.get $std/array/arr
    i32.const 29
    call $~lib/array/Array<i32>#filter
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    global.get $std/array/i
    i32.const 1
    i32.eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 663
     i32.const 2
     call $~lib/builtins/abort
@@ -20301,7 +18418,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 664
     i32.const 2
     call $~lib/builtins/abort
@@ -20316,7 +18433,7 @@
    call $~lib/array/Array<i32>#push
    drop
    local.get $53
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    global.get $std/array/arr
@@ -20330,7 +18447,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 674
     i32.const 2
     call $~lib/builtins/abort
@@ -20347,7 +18464,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 678
     i32.const 2
     call $~lib/builtins/abort
@@ -20366,7 +18483,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 681
     i32.const 2
     call $~lib/builtins/abort
@@ -20385,7 +18502,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 684
     i32.const 2
     call $~lib/builtins/abort
@@ -20402,7 +18519,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 692
     i32.const 2
     call $~lib/builtins/abort
@@ -20415,7 +18532,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 693
     i32.const 2
     call $~lib/builtins/abort
@@ -20432,7 +18549,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 695
     i32.const 2
     call $~lib/builtins/abort
@@ -20461,7 +18578,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 708
     i32.const 2
     call $~lib/builtins/abort
@@ -20474,7 +18591,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 709
     i32.const 2
     call $~lib/builtins/abort
@@ -20501,7 +18618,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 719
     i32.const 2
     call $~lib/builtins/abort
@@ -20518,7 +18635,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 723
     i32.const 2
     call $~lib/builtins/abort
@@ -20537,7 +18654,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 726
     i32.const 2
     call $~lib/builtins/abort
@@ -20556,7 +18673,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 729
     i32.const 2
     call $~lib/builtins/abort
@@ -20573,7 +18690,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 737
     i32.const 2
     call $~lib/builtins/abort
@@ -20586,7 +18703,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 738
     i32.const 2
     call $~lib/builtins/abort
@@ -20603,7 +18720,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 740
     i32.const 2
     call $~lib/builtins/abort
@@ -20632,7 +18749,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 753
     i32.const 2
     call $~lib/builtins/abort
@@ -20645,7 +18762,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 754
     i32.const 2
     call $~lib/builtins/abort
@@ -20675,32 +18792,32 @@
    i32.const 8
    i32.const 2
    i32.const 22
-   i32.const 3360
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3200
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $52
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $53
    i32.const 0
    global.set $~lib/argc
    local.get $53
    i32.const 0
    call $~lib/array/Array<f32>#sort|trampoline
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $53
    i32.const 8
    i32.const 2
    i32.const 22
-   i32.const 3408
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3248
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $50
    i32.const 0
    call $std/array/isArraysEqual<f32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 843
     i32.const 2
     call $~lib/builtins/abort
@@ -20709,32 +18826,32 @@
    i32.const 8
    i32.const 3
    i32.const 23
-   i32.const 3456
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3296
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $49
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $47
    i32.const 0
    global.set $~lib/argc
    local.get $47
    i32.const 0
    call $~lib/array/Array<f64>#sort|trampoline
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $47
    i32.const 8
    i32.const 3
    i32.const 23
-   i32.const 3536
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3376
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $43
    i32.const 0
    call $std/array/isArraysEqual<f64>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 847
     i32.const 2
     call $~lib/builtins/abort
@@ -20743,32 +18860,32 @@
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 3616
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3456
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $46
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $48
    i32.const 0
    global.set $~lib/argc
    local.get $48
    i32.const 0
    call $~lib/array/Array<i32>#sort|trampoline
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $48
    i32.const 5
    i32.const 2
    i32.const 17
-   i32.const 3656
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3496
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $44
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 851
     i32.const 2
     call $~lib/builtins/abort
@@ -20777,32 +18894,32 @@
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 3696
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3536
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $39
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $45
    i32.const 0
    global.set $~lib/argc
    local.get $45
    i32.const 0
    call $~lib/array/Array<u32>#sort|trampoline
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $45
    i32.const 5
    i32.const 2
    i32.const 21
-   i32.const 3736
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3576
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $41
    i32.const 0
    call $std/array/isArraysEqual<u32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 855
     i32.const 2
     call $~lib/builtins/abort
@@ -20811,47 +18928,47 @@
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 3776
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3616
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $40
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $42
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 3792
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3632
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $38
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $3
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 3816
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3656
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $1
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $36
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 3840
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3680
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 3872
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3712
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $7
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $2
    i32.const 64
    call $std/array/createReverseOrderedArray
@@ -20876,16 +18993,16 @@
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 3960
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3800
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $9
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 875
     i32.const 2
     call $~lib/builtins/abort
@@ -20897,16 +19014,16 @@
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 3984
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 3824
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $13
    i32.const 0
    call $std/array/isArraysEqual<i32>
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 878
     i32.const 2
     call $~lib/builtins/abort
@@ -20921,7 +19038,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 881
     i32.const 2
     call $~lib/builtins/abort
@@ -20936,7 +19053,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 884
     i32.const 2
     call $~lib/builtins/abort
@@ -20951,7 +19068,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 887
     i32.const 2
     call $~lib/builtins/abort
@@ -20966,7 +19083,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 890
     i32.const 2
     call $~lib/builtins/abort
@@ -20981,7 +19098,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 893
     i32.const 2
     call $~lib/builtins/abort
@@ -20990,63 +19107,63 @@
    local.get $14
    call $std/array/assertSortedDefault<i32>
    local.get $52
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $53
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $50
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $49
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $47
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $43
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $46
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $48
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $44
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $39
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $45
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $41
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $40
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $42
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $38
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $36
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $10
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 64
@@ -21068,9 +19185,9 @@
    i32.const 52
    call $std/array/assertSorted<i32>
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 2
@@ -21080,7 +19197,7 @@
    i32.const 53
    call $std/array/assertSorted<~lib/array/Array<i32>>
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 512
@@ -21090,26 +19207,26 @@
    i32.const 54
    call $std/array/assertSorted<std/array/Proxy<i32>>
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 7
    i32.const 2
    i32.const 27
-   i32.const 4288
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4072
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $13
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $9
    i32.const 7
    i32.const 2
    i32.const 27
-   i32.const 4336
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4120
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $6
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $14
    i32.const 1
    global.set $~lib/argc
@@ -21123,7 +19240,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 930
     i32.const 2
     call $~lib/builtins/abort
@@ -21138,33 +19255,33 @@
    i32.const 0
    call $std/array/assertSorted<~lib/string/String>|trampoline
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 2
    i32.const 0
    i32.const 29
-   i32.const 4456
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4240
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $14
-   i32.const 4536
+   i32.const 4320
    call $~lib/array/Array<bool>#join
    local.tee $8
-   i32.const 4560
+   i32.const 4344
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 941
     i32.const 2
     call $~lib/builtins/abort
@@ -21173,19 +19290,19 @@
    i32.const 3
    i32.const 2
    i32.const 17
-   i32.const 4600
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4384
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $9
-   i32.const 4272
+   i32.const 4056
    call $~lib/array/Array<i32>#join
    local.tee $6
-   i32.const 5104
+   i32.const 4888
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 942
     i32.const 2
     call $~lib/builtins/abort
@@ -21194,19 +19311,19 @@
    i32.const 3
    i32.const 2
    i32.const 21
-   i32.const 5136
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4920
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $5
-   i32.const 5168
+   i32.const 4952
    call $~lib/array/Array<u32>#join
    local.tee $13
-   i32.const 5104
+   i32.const 4888
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 943
     i32.const 2
     call $~lib/builtins/abort
@@ -21215,19 +19332,19 @@
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 5192
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 4976
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $2
-   i32.const 5216
+   i32.const 5000
    call $~lib/array/Array<i32>#join
    local.tee $10
-   i32.const 5240
+   i32.const 5024
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 944
     i32.const 2
     call $~lib/builtins/abort
@@ -21236,19 +19353,19 @@
    i32.const 6
    i32.const 3
    i32.const 23
-   i32.const 5304
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 5088
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $0
-   i32.const 5368
+   i32.const 5152
    call $~lib/array/Array<f64>#join
    local.tee $7
-   i32.const 6568
+   i32.const 6352
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 945
     i32.const 2
     call $~lib/builtins/abort
@@ -21257,19 +19374,19 @@
    i32.const 3
    i32.const 2
    i32.const 28
-   i32.const 6688
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6472
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $36
-   i32.const 4272
+   i32.const 4056
    call $~lib/array/Array<~lib/string/String>#join
    local.tee $4
-   i32.const 6664
+   i32.const 6448
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 946
     i32.const 2
     call $~lib/builtins/abort
@@ -21280,7 +19397,7 @@
     i32.const 2
     i32.const 33
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $1
     local.get $1
     i32.load offset=4
@@ -21289,116 +19406,116 @@
     i32.const 0
     call $std/array/Ref#constructor
     local.tee $38
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $3
     i32.const 0
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store offset=4
     local.get $3
     i32.const 0
     call $std/array/Ref#constructor
     local.tee $42
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store offset=8
     local.get $1
    end
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $3
-   i32.const 4536
+   i32.const 4320
    call $~lib/array/Array<std/array/Ref | null>#join
    local.tee $1
-   i32.const 6768
+   i32.const 6552
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 948
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $10
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $36
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $38
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $42
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   block
    i32.const 0
    i32.const 2
    i32.const 17
-   i32.const 6848
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6632
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $3
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $1
    i32.const 1
    i32.const 2
    i32.const 17
-   i32.const 6864
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6648
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $38
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $42
    i32.const 2
    i32.const 2
    i32.const 17
-   i32.const 6888
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6672
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $36
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    i32.const 4
    i32.const 2
    i32.const 17
-   i32.const 6912
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6696
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $7
    local.get $1
    call $~lib/array/Array<i32>#toString
    local.tee $10
-   i32.const 4272
+   i32.const 4056
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 958
     i32.const 2
     call $~lib/builtins/abort
@@ -21407,12 +19524,12 @@
    local.get $42
    call $~lib/array/Array<i32>#toString
    local.tee $2
-   i32.const 6664
+   i32.const 6448
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 959
     i32.const 2
     call $~lib/builtins/abort
@@ -21421,12 +19538,12 @@
    local.get $4
    call $~lib/array/Array<i32>#toString
    local.tee $13
-   i32.const 6944
+   i32.const 6728
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 960
     i32.const 2
     call $~lib/builtins/abort
@@ -21435,12 +19552,12 @@
    local.get $7
    call $~lib/array/Array<i32>#toString
    local.tee $5
-   i32.const 6968
+   i32.const 6752
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 961
     i32.const 2
     call $~lib/builtins/abort
@@ -21449,18 +19566,18 @@
    i32.const 3
    i32.const 0
    i32.const 34
-   i32.const 7000
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6784
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $9
    call $~lib/array/Array<i8>#toString
    local.tee $6
-   i32.const 7024
+   i32.const 6808
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 963
     i32.const 2
     call $~lib/builtins/abort
@@ -21469,18 +19586,18 @@
    i32.const 3
    i32.const 1
    i32.const 35
-   i32.const 7056
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6840
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $14
    call $~lib/array/Array<u16>#toString
    local.tee $8
-   i32.const 7080
+   i32.const 6864
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 964
     i32.const 2
     call $~lib/builtins/abort
@@ -21489,18 +19606,18 @@
    i32.const 3
    i32.const 3
    i32.const 30
-   i32.const 7120
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 6904
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $41
    call $~lib/array/Array<u64>#toString
    local.tee $40
-   i32.const 7160
+   i32.const 6944
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 965
     i32.const 2
     call $~lib/builtins/abort
@@ -21509,18 +19626,18 @@
    i32.const 4
    i32.const 3
    i32.const 36
-   i32.const 7224
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 7008
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $39
    call $~lib/array/Array<i64>#toString
    local.tee $45
-   i32.const 7272
+   i32.const 7056
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 966
     i32.const 2
     call $~lib/builtins/abort
@@ -21529,21 +19646,21 @@
    i32.const 7
    i32.const 2
    i32.const 27
-   i32.const 7376
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 7160
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $48
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $44
    local.get $44
    call $~lib/array/Array<~lib/string/String | null>#toString
    local.tee $46
-   i32.const 7424
+   i32.const 7208
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 970
     i32.const 2
     call $~lib/builtins/abort
@@ -21552,18 +19669,18 @@
    i32.const 4
    i32.const 2
    i32.const 28
-   i32.const 7520
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   i32.const 7304
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.tee $47
    call $~lib/array/Array<~lib/string/String>#toString
    local.tee $43
-   i32.const 7552
+   i32.const 7336
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 971
     i32.const 2
     call $~lib/builtins/abort
@@ -21574,7 +19691,7 @@
     i32.const 2
     i32.const 24
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $49
     local.get $49
     i32.load offset=4
@@ -21583,35 +19700,35 @@
     i32.const 2
     i32.const 2
     i32.const 17
-    i32.const 7584
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    i32.const 7368
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
     local.tee $52
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $50
     i32.const 2
     i32.const 2
     i32.const 17
-    i32.const 7608
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    i32.const 7392
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
     local.tee $11
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store offset=4
     local.get $49
    end
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $54
    local.get $54
    call $~lib/array/Array<~lib/array/Array<i32>>#toString
    local.tee $50
-   i32.const 7632
+   i32.const 7416
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 974
     i32.const 2
     call $~lib/builtins/abort
@@ -21622,7 +19739,7 @@
     i32.const 2
     i32.const 37
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $49
     local.get $49
     i32.load offset=4
@@ -21631,35 +19748,35 @@
     i32.const 2
     i32.const 0
     i32.const 20
-    i32.const 7664
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    i32.const 7448
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
     local.tee $12
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $53
     i32.const 2
     i32.const 0
     i32.const 20
-    i32.const 7688
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    i32.const 7472
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
     local.tee $16
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store offset=4
     local.get $49
    end
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $55
    local.get $55
    call $~lib/array/Array<~lib/array/Array<u8>>#toString
    local.tee $53
-   i32.const 7632
+   i32.const 7416
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 977
     i32.const 2
     call $~lib/builtins/abort
@@ -21670,7 +19787,7 @@
     i32.const 2
     i32.const 39
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $49
     local.get $49
     i32.load offset=4
@@ -21681,7 +19798,7 @@
      i32.const 2
      i32.const 38
      i32.const 0
-     call $~lib/rt/common/__allocArray
+     call $~lib/rt/__allocArray
      local.set $17
      local.get $17
      i32.load offset=4
@@ -21690,111 +19807,111 @@
      i32.const 1
      i32.const 2
      i32.const 21
-     i32.const 7712
-     call $~lib/rt/common/__allocArray
-     call $~lib/rt/purerc/__retain
+     i32.const 7496
+     call $~lib/rt/__allocArray
+     call $~lib/rt/pure/__retain
      local.tee $20
-     call $~lib/rt/purerc/__retain
+     call $~lib/rt/pure/__retain
      i32.store
      local.get $17
     end
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $49
    end
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $56
    local.get $56
    call $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#toString
    local.tee $15
-   i32.const 6664
+   i32.const 6448
    call $~lib/string/String.__eq
    i32.eqz
    if
     i32.const 0
-    i32.const 232
+    i32.const 128
     i32.const 980
     i32.const 2
     call $~lib/builtins/abort
     unreachable
    end
    local.get $3
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $38
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $42
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $36
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $10
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $13
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $14
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $41
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $40
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $39
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $45
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $48
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $44
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $46
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $47
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $43
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $52
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $11
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $50
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $12
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $16
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $53
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $20
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $15
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   global.get $std/array/arr
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $54
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $55
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $56
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/array/main (; 299 ;) (type $FUNCSIG$v)
+ (func $std/array/main (; 277 ;) (type $FUNCSIG$v)
   global.get $~lib/started
   i32.eqz
   if
@@ -21803,7 +19920,7 @@
    global.set $~lib/started
   end
  )
- (func $~lib/rt/purerc/markGray (; 300 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/markGray (; 278 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -21827,10 +19944,621 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 301 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 279 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $4
+   local.get $3
+   i32.const 4
+   i32.shr_u
+   local.set $5
+  else   
+   i32.const 31
+   local.get $3
+   i32.clz
+   i32.sub
+   local.set $4
+   local.get $3
+   local.get $4
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $5
+   local.get $4
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $4
+  end
+  local.get $4
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $5
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=16
+  local.set $6
+  local.get $1
+  i32.load offset=20
+  local.set $7
+  local.get $6
+  if
+   local.get $6
+   local.get $7
+   i32.store offset=20
+  end
+  local.get $7
+  if
+   local.get $7
+   local.get $6
+   i32.store offset=16
+  end
+  local.get $1
+  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
+   local.get $0
+   local.set $10
+   local.get $4
+   local.set $9
+   local.get $5
+   local.set $8
+   local.get $10
+   local.get $9
+   i32.const 4
+   i32.shl
+   local.get $8
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  i32.eq
+  if
+   block $~lib/rt/tlsf/SETHEAD|inlined.0
+    local.get $0
+    local.set $11
+    local.get $4
+    local.set $10
+    local.get $5
+    local.set $9
+    local.get $7
+    local.set $8
+    local.get $11
+    local.get $10
+    i32.const 4
+    i32.shl
+    local.get $9
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $8
+    i32.store offset=96
+   end
+   local.get $7
+   i32.eqz
+   if
+    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
+     local.get $0
+     local.set $9
+     local.get $4
+     local.set $8
+     local.get $9
+     local.get $8
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $8
+    block $~lib/rt/tlsf/SETSL|inlined.0
+     local.get $0
+     local.set $11
+     local.get $4
+     local.set $10
+     local.get $8
+     i32.const 1
+     local.get $5
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     local.tee $8
+     local.set $9
+     local.get $11
+     local.get $10
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $9
+     i32.store offset=4
+    end
+    local.get $8
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $4
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 280 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
+   local.get $1
+   local.set $3
+   local.get $3
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.load
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+  end
+  local.set $4
+  local.get $4
+  i32.load
+  local.set $5
+  local.get $5
+  i32.const 1
+  i32.and
+  if
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $3
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $2
+    i32.const 3
+    i32.and
+    local.get $3
+    i32.or
+    local.tee $2
+    i32.store
+    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
+     local.get $1
+     local.set $6
+     local.get $6
+     i32.const 16
+     i32.add
+     local.get $6
+     i32.load
+     i32.const 3
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.add
+    end
+    local.set $4
+    local.get $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $2
+  i32.const 2
+  i32.and
+  if
+   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
+    local.get $1
+    local.set $3
+    local.get $3
+    i32.const 4
+    i32.sub
+    i32.load
+   end
+   local.set $3
+   local.get $3
+   i32.load
+   local.set $6
+   local.get $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $7
+   local.get $7
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $3
+    call $~lib/rt/tlsf/removeBlock
+    local.get $3
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $2
+    i32.store
+    local.get $3
+    local.set $1
+   end
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $8
+  local.get $8
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $8
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $8
+  i32.add
+  local.get $4
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $8
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $9
+   local.get $8
+   i32.const 4
+   i32.shr_u
+   local.set $10
+  else   
+   i32.const 31
+   local.get $8
+   i32.clz
+   i32.sub
+   local.set $9
+   local.get $8
+   local.get $9
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $10
+   local.get $9
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $9
+  end
+  local.get $9
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $10
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   local.get $10
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 4
+   i32.shl
+   local.get $7
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  local.set $11
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $11
+  i32.store offset=20
+  local.get $11
+  if
+   local.get $11
+   local.get $1
+   i32.store offset=16
+  end
+  block $~lib/rt/tlsf/SETHEAD|inlined.1
+   local.get $0
+   local.set $12
+   local.get $9
+   local.set $3
+   local.get $10
+   local.set $6
+   local.get $1
+   local.set $7
+   local.get $12
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $6
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=96
+  end
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $9
+  i32.shl
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETSL|inlined.1
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
+    local.get $0
+    local.set $13
+    local.get $9
+    local.set $12
+    local.get $13
+    local.get $12
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=4
+   end
+   i32.const 1
+   local.get $10
+   i32.shl
+   i32.or
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=4
+  end
+ )
+ (func $~lib/rt/tlsf/freeBlock (; 281 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 530
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+ )
+ (func $~lib/rt/pure/scanBlack (; 282 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -21845,9 +20573,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 302 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 283 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -21865,7 +20593,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -21880,11 +20608,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 303 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 284 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -21907,20 +20635,20 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__collect (; 304 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/__collect (; 285 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
   local.get $0
   local.set $1
@@ -21928,7 +20656,7 @@
    block
     local.get $1
     local.set $2
-    global.get $~lib/rt/purerc/CUR
+    global.get $~lib/rt/pure/CUR
     local.set $3
    end
    loop $repeat|0
@@ -21959,7 +20687,7 @@
     end
     if
      local.get $4
-     call $~lib/rt/purerc/markGray
+     call $~lib/rt/pure/markGray
      local.get $1
      local.get $4
      i32.store
@@ -22005,7 +20733,7 @@
    unreachable
   end
   local.get $1
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   block $break|1
    local.get $0
    local.set $5
@@ -22017,7 +20745,7 @@
     br_if $break|1
     local.get $5
     i32.load
-    call $~lib/rt/purerc/scan
+    call $~lib/rt/pure/scan
     local.get $5
     i32.const 4
     i32.add
@@ -22048,7 +20776,7 @@
     i32.and
     i32.store offset=4
     local.get $4
-    call $~lib/rt/purerc/collectWhite
+    call $~lib/rt/pure/collectWhite
     local.get $5
     i32.const 4
     i32.add
@@ -22059,9 +20787,9 @@
    unreachable
   end
   local.get $0
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/common/__instanceof (; 305 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/__instanceof (; 286 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -22069,7 +20797,7 @@
   i32.sub
   i32.load offset=8
   local.set $2
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $3
   local.get $2
   if (result i32)
@@ -22101,9 +20829,1281 @@
   end
   i32.const 0
  )
- (func $start (; 306 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/__typeinfo (; 287 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  global.get $~lib/rt/RTTI_BASE
+  local.set $1
+  local.get $0
+  i32.eqz
+  if (result i32)
+   i32.const 1
+  else   
+   local.get $0
+   local.get $1
+   i32.load
+   i32.gt_u
+  end
+  if
+   i32.const 240
+   i32.const 7568
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $0
+  i32.const 8
+  i32.mul
+  i32.add
+  i32.load
+ )
+ (func $start (; 288 ;) (type $FUNCSIG$v)
   call $start:std/array
  )
+ (func $~lib/rt/tlsf/addMemory (; 289 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 290 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.2
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.2
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 291 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 7608
+   i32.const 7520
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 292 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 7520
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 293 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 294 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 295 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7520
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 296 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/reallocateBlock (; 297 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
+  local.set $3
+  local.get $1
+  i32.load
+  local.set $4
+  local.get $4
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 491
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  local.get $4
+  i32.const -4
+  i32.and
+  i32.le_u
+  if
+   local.get $0
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
+   local.get $1
+   local.get $2
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
+   local.get $1
+   local.set $5
+   local.get $5
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.load
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+  end
+  local.set $6
+  local.get $6
+  i32.load
+  local.set $7
+  local.get $7
+  i32.const 1
+  i32.and
+  if
+   local.get $4
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $7
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $3
+   i32.ge_u
+   if
+    local.get $0
+    local.get $6
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    i32.const 3
+    i32.and
+    local.get $5
+    i32.or
+    i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
+    local.get $0
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
+   end
+  end
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $8
+  local.get $8
+  local.get $1
+  i32.load offset=4
+  i32.store offset=4
+  local.get $8
+  local.get $1
+  i32.load offset=8
+  i32.store offset=8
+  local.get $8
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  call $~lib/memory/memory.copy
+  local.get $1
+  local.get $4
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+  local.get $8
+ )
+ (func $~lib/rt/tlsf/__realloc (; 298 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 552
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 0
+  i32.ne
+  if (result i32)
+   local.get $0
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 553
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/__free (; 299 ;) (type $FUNCSIG$vi) (param $0 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 560
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 0
+  i32.ne
+  if (result i32)
+   local.get $0
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7520
+   i32.const 561
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/increment (; 300 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 301 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/growRoots (; 302 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  global.get $~lib/rt/pure/ROOTS
+  local.set $0
+  global.get $~lib/rt/pure/CUR
+  local.get $0
+  i32.sub
+  local.set $1
+  local.get $1
+  i32.const 2
+  i32.mul
+  local.tee $2
+  i32.const 64
+  i32.const 2
+  i32.shl
+  local.tee $3
+  local.get $2
+  local.get $3
+  i32.gt_u
+  select
+  local.set $4
+  local.get $4
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.set $5
+  local.get $5
+  local.get $0
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $5
+  global.set $~lib/rt/pure/ROOTS
+  local.get $5
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $5
+  local.get $4
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 303 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.set $1
+  local.get $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 304 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.and
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/onDecrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 7664
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $1
+   i32.const -2147483648
+   i32.and
+   i32.eqz
+   if
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   else    
+    local.get $0
+    i32.const -2147483648
+    i32.const 0
+    i32.or
+    i32.const 0
+    i32.or
+    i32.store offset=4
+   end
+  else   
+   local.get $2
+   i32.const 0
+   i32.gt_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 7664
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   i32.eqz
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.const 805306368
+    i32.or
+    local.get $2
+    i32.const 1
+    i32.sub
+    i32.or
+    i32.store offset=4
+    local.get $1
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   else    
+    local.get $0
+    local.get $1
+    i32.const 268435455
+    i32.const -1
+    i32.xor
+    i32.and
+    local.get $2
+    i32.const 1
+    i32.sub
+    i32.or
+    i32.store offset=4
+   end
+  end
+ )
+ (func $~lib/rt/pure/__retainRelease (; 305 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.ne
+  if
+   global.get $~lib/heap/HEAP_BASE
+   local.set $2
+   local.get $0
+   local.get $2
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/increment
+   end
+   local.get $1
+   local.get $2
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (; 306 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
  (func $~lib/array/Array<i32>#__visit_impl (; 307 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   nop
  )
@@ -22119,11 +22119,317 @@
  (func $~lib/array/Array<f64>#__visit_impl (; 311 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   nop
  )
- (func $~lib/rt/purerc/__visit (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<~lib/array/Array<i32>>#__visit_impl (; 312 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<std/array/Proxy<i32>>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<bool>#__visit_impl (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<u64>#__visit_impl (; 317 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<i16>#__visit_impl (; 318 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<std/array/Ref | null>#__visit_impl (; 319 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<i8>#__visit_impl (; 320 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<u16>#__visit_impl (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<i64>#__visit_impl (; 322 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<~lib/array/Array<u8>>#__visit_impl (; 323 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<~lib/array/Array<u32>>#__visit_impl (; 324 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#__visit_impl (; 325 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/__visit (; 326 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -22165,7 +22471,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -22181,7 +22487,7 @@
         i32.eqz
         if
          i32.const 0
-         i32.const 320
+         i32.const 7664
          i32.const 74
          i32.const 17
          call $~lib/builtins/abort
@@ -22194,7 +22500,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -22202,7 +22508,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -22228,7 +22534,7 @@
       i32.eqz
       if
        i32.const 0
-       i32.const 320
+       i32.const 7664
        i32.const 85
        i32.const 6
        call $~lib/builtins/abort
@@ -22246,7 +22552,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -22255,7 +22561,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -22265,7 +22571,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 320
+    i32.const 7664
     i32.const 96
     i32.const 24
     call $~lib/builtins/abort
@@ -22273,313 +22579,7 @@
    end
   end
  )
- (func $~lib/array/Array<~lib/array/Array<i32>>#__visit_impl (; 313 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<std/array/Proxy<i32>>#__visit_impl (; 314 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<~lib/string/String | null>#__visit_impl (; 315 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 316 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<bool>#__visit_impl (; 317 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<u64>#__visit_impl (; 318 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<i16>#__visit_impl (; 319 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<std/array/Ref | null>#__visit_impl (; 320 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<i8>#__visit_impl (; 321 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<u16>#__visit_impl (; 322 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<i64>#__visit_impl (; 323 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<~lib/array/Array<u8>>#__visit_impl (; 324 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<~lib/array/Array<u32>>#__visit_impl (; 325 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<~lib/array/Array<~lib/array/Array<u32>>>#__visit_impl (; 326 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/builtins/__visit_members (; 327 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 327 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block $block$16$break
    block
@@ -22971,7 +22971,7 @@
     if
      local.get $2
      local.get $1
-     call $~lib/rt/purerc/__visit
+     call $~lib/rt/pure/__visit
     end
     return
     unreachable
diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat
index 710fc46e..ab50eff2 100644
--- a/tests/compiler/std/mod.optimized.wat
+++ b/tests/compiler/std/mod.optimized.wat
@@ -1,52 +1,38 @@
 (module
  (type $FUNCSIG$iddd (func (param f64 f64 f64) (result i32)))
  (type $FUNCSIG$ddd (func (param f64 f64) (result f64)))
- (type $FUNCSIG$id (func (param f64) (result i32)))
  (type $FUNCSIG$idd (func (param f64 f64) (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$ifff (func (param f32 f32 f32) (result i32)))
  (type $FUNCSIG$fff (func (param f32 f32) (result f32)))
- (type $FUNCSIG$if (func (param f32) (result i32)))
  (type $FUNCSIG$iff (func (param f32 f32) (result i32)))
  (type $FUNCSIG$v (func))
  (import "math" "mod" (func $std/mod/mod (param f64 f64) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
- (global $std/mod/js i32 (i32.const 1))
+ (data (i32.const 8) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00m\00o\00d\00.\00t\00s")
  (export "memory" (memory $0))
  (export "mod" (func $std/mod/mod))
  (start $start)
- (func $~lib/builtins/isNaN<f64> (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
-  local.get $0
-  local.get $0
-  f64.ne
- )
- (func $~lib/math/NativeMath.mod (; 3 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64)
+ (func $~lib/math/NativeMath.mod (; 2 ;) (type $FUNCSIG$ddd) (param $0 f64) (param $1 f64) (result f64)
   (local $2 i64)
   (local $3 i64)
   (local $4 i64)
   (local $5 i64)
   (local $6 i64)
   (local $7 i64)
-  (local $8 f64)
-  (local $9 i64)
-  (local $10 i64)
+  (local $8 i64)
   local.get $0
   i64.reinterpret_f64
-  local.set $2
-  local.get $1
-  i64.reinterpret_f64
-  local.set $3
-  local.get $2
+  local.tee $2
   i64.const 52
   i64.shr_u
   i64.const 2047
   i64.and
   local.set $4
-  local.get $3
+  local.get $1
+  i64.reinterpret_f64
+  local.tee $3
   i64.const 52
   i64.shr_u
   i64.const 2047
@@ -55,12 +41,11 @@
   local.get $2
   i64.const 63
   i64.shr_u
-  local.set $6
+  local.set $7
   local.get $3
   i64.const 1
   i64.shl
-  local.set $7
-  local.get $7
+  local.tee $6
   i64.const 0
   i64.eq
   if (result i32)
@@ -74,103 +59,81 @@
    i32.const 1
   else   
    local.get $1
-   call $~lib/builtins/isNaN<f64>
+   local.get $1
+   f64.ne
   end
   if
    local.get $0
    local.get $1
    f64.mul
-   local.set $8
-   local.get $8
-   local.get $8
+   local.tee $0
+   local.get $0
    f64.div
    return
   end
-  local.get $2
-  i64.const 1
-  i64.shl
-  local.set $9
-  local.get $9
-  local.get $7
-  i64.le_u
-  if
-   local.get $9
-   local.get $7
-   i64.eq
+  block $folding-inner0
+   local.get $2
+   i64.const 1
+   i64.shl
+   local.tee $8
+   local.get $6
+   i64.le_u
    if
-    f64.const 0
+    local.get $6
+    local.get $8
+    i64.eq
+    br_if $folding-inner0
     local.get $0
-    f64.mul
     return
    end
-   local.get $0
-   return
-  end
-  local.get $4
-  i64.eqz
-  if
    local.get $4
-   local.get $2
-   i64.const 12
-   i64.shl
-   i64.clz
-   i64.sub
-   local.set $4
-   local.get $2
-   i64.const 0
-   local.get $4
-   i64.sub
-   i64.const 1
-   i64.add
-   i64.shl
+   i64.eqz
+   if (result i64)
+    local.get $2
+    i64.const 0
+    local.get $4
+    local.get $2
+    i64.const 12
+    i64.shl
+    i64.clz
+    i64.sub
+    local.tee $4
+    i64.sub
+    i64.const 1
+    i64.add
+    i64.shl
+   else    
+    local.get $2
+    i64.const 4503599627370495
+    i64.and
+    i64.const 4503599627370496
+    i64.or
+   end
    local.set $2
-  else   
-   local.get $2
-   i64.const -1
-   i64.const 12
-   i64.shr_u
-   i64.and
-   local.set $2
-   local.get $2
-   i64.const 1
-   i64.const 52
-   i64.shl
-   i64.or
-   local.set $2
-  end
-  local.get $5
-  i64.eqz
-  if
    local.get $5
-   local.get $3
-   i64.const 12
-   i64.shl
-   i64.clz
-   i64.sub
-   local.set $5
-   local.get $3
-   i64.const 0
-   local.get $5
-   i64.sub
-   i64.const 1
-   i64.add
-   i64.shl
+   i64.eqz
+   if (result i64)
+    local.get $3
+    i64.const 0
+    local.get $5
+    local.get $3
+    i64.const 12
+    i64.shl
+    i64.clz
+    i64.sub
+    local.tee $5
+    i64.sub
+    i64.const 1
+    i64.add
+    i64.shl
+   else    
+    local.get $3
+    i64.const 4503599627370495
+    i64.and
+    i64.const 4503599627370496
+    i64.or
+   end
    local.set $3
-  else   
-   local.get $3
-   i64.const -1
-   i64.const 12
-   i64.shr_u
-   i64.and
-   local.set $3
-   local.get $3
-   i64.const 1
-   i64.const 52
-   i64.shl
-   i64.or
-   local.set $3
-  end
-  block $break|0
    loop $continue|0
     local.get $4
     local.get $5
@@ -183,12 +146,7 @@
       local.get $2
       local.get $3
       i64.eq
-      if
-       f64.const 0
-       local.get $0
-       f64.mul
-       return
-      end
+      br_if $folding-inner0
       local.get $2
       local.get $3
       i64.sub
@@ -205,87 +163,76 @@
      br $continue|0
     end
    end
-  end
-  local.get $2
-  local.get $3
-  i64.ge_u
-  if
    local.get $2
    local.get $3
-   i64.eq
+   i64.ge_u
    if
-    f64.const 0
-    local.get $0
-    f64.mul
-    return
+    local.get $2
+    local.get $3
+    i64.eq
+    br_if $folding-inner0
+    local.get $2
+    local.get $3
+    i64.sub
+    local.set $2
    end
    local.get $2
+   local.get $2
+   i64.const 11
+   i64.shl
+   i64.clz
+   local.tee $3
+   i64.shl
+   local.set $2
+   local.get $4
    local.get $3
    i64.sub
-   local.set $2
-  end
-  local.get $2
-  i64.const 11
-  i64.shl
-  i64.clz
-  local.set $10
-  local.get $4
-  local.get $10
-  i64.sub
-  local.set $4
-  local.get $2
-  local.get $10
-  i64.shl
-  local.set $2
-  local.get $4
-  i64.const 0
-  i64.gt_s
-  if
-   local.get $2
-   i64.const 1
-   i64.const 52
-   i64.shl
-   i64.sub
-   local.set $2
-   local.get $2
-   local.get $4
-   i64.const 52
+   local.tee $3
+   i64.const 0
+   i64.gt_s
+   if (result i64)
+    local.get $2
+    i64.const 4503599627370496
+    i64.sub
+    local.get $3
+    i64.const 52
+    i64.shl
+    i64.or
+   else    
+    local.get $2
+    i64.const 0
+    local.get $3
+    i64.sub
+    i64.const 1
+    i64.add
+    i64.shr_u
+   end
+   local.get $7
+   i64.const 63
    i64.shl
    i64.or
-   local.set $2
-  else   
-   local.get $2
-   i64.const 0
-   local.get $4
-   i64.sub
-   i64.const 1
-   i64.add
-   i64.shr_u
-   local.set $2
+   f64.reinterpret_i64
+   return
   end
-  local.get $2
-  local.get $6
-  i64.const 63
-  i64.shl
-  i64.or
-  local.set $2
-  local.get $2
-  f64.reinterpret_i64
+  f64.const 0
+  local.get $0
+  f64.mul
  )
- (func $std/mod/check<f64> (; 4 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
+ (func $std/mod/check<f64> (; 3 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
   local.get $1
-  call $~lib/builtins/isNaN<f64>
+  local.get $1
+  f64.ne
   if
    local.get $0
-   call $~lib/builtins/isNaN<f64>
+   local.get $0
+   f64.ne
    return
   end
   local.get $1
   f64.const 0
   f64.eq
   if
-   i32.const 1
-   f64.convert_i32_u
+   f64.const 1
    local.get $1
    f64.div
    f64.const 1
@@ -298,56 +245,41 @@
   local.get $1
   f64.eq
  )
- (func $std/mod/test_fmod (; 5 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
+ (func $std/mod/test_fmod (; 4 ;) (type $FUNCSIG$iddd) (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   local.get $1
   call $~lib/math/NativeMath.mod
   local.get $2
   call $std/mod/check<f64>
   if (result i32)
-   global.get $std/mod/js
-   i32.eqz
-   if (result i32)
-    i32.const 1
-   else    
-    local.get $0
-    local.get $1
-    call $std/mod/mod
-    local.get $2
-    call $std/mod/check<f64>
-   end
+   local.get $0
+   local.get $1
+   call $std/mod/mod
+   local.get $2
+   call $std/mod/check<f64>
   else   
    i32.const 0
   end
  )
- (func $~lib/builtins/isNaN<f32> (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
-  local.get $0
-  local.get $0
-  f32.ne
- )
- (func $~lib/math/NativeMathf.mod (; 7 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32)
+ (func $~lib/math/NativeMathf.mod (; 5 ;) (type $FUNCSIG$fff) (param $0 f32) (param $1 f32) (result f32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 i32)
-  (local $10 i32)
+  (local $8 i32)
   local.get $0
   i32.reinterpret_f32
-  local.set $2
-  local.get $1
-  i32.reinterpret_f32
-  local.set $3
-  local.get $2
+  local.tee $2
   i32.const 23
   i32.shr_u
   i32.const 255
   i32.and
   local.set $4
-  local.get $3
+  local.get $1
+  i32.reinterpret_f32
+  local.tee $3
   i32.const 23
   i32.shr_u
   i32.const 255
@@ -356,122 +288,91 @@
   local.get $2
   i32.const -2147483648
   i32.and
-  local.set $6
+  local.set $7
   local.get $3
   i32.const 1
   i32.shl
-  local.set $7
-  local.get $7
-  i32.const 0
-  i32.eq
+  local.tee $6
   if (result i32)
-   i32.const 1
-  else   
    local.get $4
    i32.const 255
    i32.eq
+  else   
+   i32.const 1
   end
   if (result i32)
    i32.const 1
   else   
    local.get $1
-   call $~lib/builtins/isNaN<f32>
+   local.get $1
+   f32.ne
   end
   if
    local.get $0
    local.get $1
    f32.mul
-   local.set $8
-   local.get $8
-   local.get $8
+   local.tee $0
+   local.get $0
    f32.div
    return
   end
-  local.get $2
-  i32.const 1
-  i32.shl
-  local.set $9
-  local.get $9
-  local.get $7
-  i32.le_u
-  if
-   local.get $9
-   local.get $7
-   i32.eq
+  block $folding-inner0
+   local.get $2
+   i32.const 1
+   i32.shl
+   local.tee $8
+   local.get $6
+   i32.le_u
    if
-    f32.const 0
+    local.get $6
+    local.get $8
+    i32.eq
+    br_if $folding-inner0
     local.get $0
-    f32.mul
     return
    end
-   local.get $0
-   return
-  end
-  local.get $4
-  i32.eqz
-  if
    local.get $4
-   local.get $2
-   i32.const 9
-   i32.shl
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $2
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shl
+   if (result i32)
+    local.get $2
+    i32.const 8388607
+    i32.and
+    i32.const 8388608
+    i32.or
+   else    
+    local.get $2
+    i32.const 1
+    local.get $4
+    local.get $2
+    i32.const 9
+    i32.shl
+    i32.clz
+    i32.sub
+    local.tee $4
+    i32.sub
+    i32.shl
+   end
    local.set $2
-  else   
-   local.get $2
-   i32.const -1
-   i32.const 9
-   i32.shr_u
-   i32.and
-   local.set $2
-   local.get $2
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $2
-  end
-  local.get $5
-  i32.eqz
-  if
    local.get $5
-   local.get $3
-   i32.const 9
-   i32.shl
-   i32.clz
-   i32.sub
-   local.set $5
-   local.get $3
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shl
+   if (result i32)
+    local.get $3
+    i32.const 8388607
+    i32.and
+    i32.const 8388608
+    i32.or
+   else    
+    local.get $3
+    i32.const 1
+    local.get $5
+    local.get $3
+    i32.const 9
+    i32.shl
+    i32.clz
+    i32.sub
+    local.tee $5
+    i32.sub
+    i32.shl
+   end
    local.set $3
-  else   
-   local.get $3
-   i32.const -1
-   i32.const 9
-   i32.shr_u
-   i32.and
-   local.set $3
-   local.get $3
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $3
-  end
-  block $break|0
    loop $continue|0
     local.get $4
     local.get $5
@@ -484,12 +385,7 @@
       local.get $2
       local.get $3
       i32.eq
-      if
-       f32.const 0
-       local.get $0
-       f32.mul
-       return
-      end
+      br_if $folding-inner0
       local.get $2
       local.get $3
       i32.sub
@@ -506,85 +402,72 @@
      br $continue|0
     end
    end
-  end
-  local.get $2
-  local.get $3
-  i32.ge_u
-  if
    local.get $2
    local.get $3
-   i32.eq
+   i32.ge_u
    if
-    f32.const 0
-    local.get $0
-    f32.mul
-    return
+    local.get $2
+    local.get $3
+    i32.eq
+    br_if $folding-inner0
+    local.get $2
+    local.get $3
+    i32.sub
+    local.set $2
    end
    local.get $2
+   local.get $2
+   i32.const 8
+   i32.shl
+   i32.clz
+   local.tee $3
+   i32.shl
+   local.set $2
+   local.get $4
    local.get $3
    i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 8
-  i32.shl
-  i32.clz
-  local.set $10
-  local.get $4
-  local.get $10
-  i32.sub
-  local.set $4
-  local.get $2
-  local.get $10
-  i32.shl
-  local.set $2
-  local.get $4
-  i32.const 0
-  i32.gt_s
-  if
-   local.get $2
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.sub
-   local.set $2
-   local.get $2
-   local.get $4
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $2
-  else   
-   local.get $2
+   local.tee $3
    i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shr_u
-   local.set $2
+   i32.gt_s
+   if (result i32)
+    local.get $2
+    i32.const 8388608
+    i32.sub
+    local.get $3
+    i32.const 23
+    i32.shl
+    i32.or
+   else    
+    local.get $2
+    i32.const 1
+    local.get $3
+    i32.sub
+    i32.shr_u
+   end
+   local.get $7
+   i32.or
+   f32.reinterpret_i32
+   return
   end
-  local.get $2
-  local.get $6
-  i32.or
-  local.set $2
-  local.get $2
-  f32.reinterpret_i32
+  f32.const 0
+  local.get $0
+  f32.mul
  )
- (func $std/mod/check<f32> (; 8 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
+ (func $std/mod/check<f32> (; 6 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
   local.get $1
-  call $~lib/builtins/isNaN<f32>
+  local.get $1
+  f32.ne
   if
    local.get $0
-   call $~lib/builtins/isNaN<f32>
+   local.get $0
+   f32.ne
    return
   end
   local.get $1
   f32.const 0
   f32.eq
   if
-   i32.const 1
-   f32.convert_i32_u
+   f32.const 1
    local.get $1
    f32.div
    f32.const 1
@@ -597,14 +480,14 @@
   local.get $1
   f32.eq
  )
- (func $std/mod/test_fmodf (; 9 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
+ (func $std/mod/test_fmodf (; 7 ;) (type $FUNCSIG$ifff) (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
   local.get $0
   local.get $1
   call $~lib/math/NativeMathf.mod
   local.get $2
   call $std/mod/check<f32>
  )
- (func $start:std/mod (; 10 ;) (type $FUNCSIG$v)
+ (func $start:std/mod (; 8 ;) (type $FUNCSIG$v)
   f64.const 3
   f64.const 2
   f64.const 1
@@ -1282,8 +1165,7 @@
    unreachable
   end
   f64.const 0
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const 0
   call $std/mod/test_fmod
   i32.eqz
@@ -1296,8 +1178,7 @@
    unreachable
   end
   f64.const -0
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const -0
   call $std/mod/test_fmod
   i32.eqz
@@ -1336,8 +1217,7 @@
    unreachable
   end
   f64.const 1
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const 1
   call $std/mod/test_fmod
   i32.eqz
@@ -1350,8 +1230,7 @@
    unreachable
   end
   f64.const -1
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const -1
   call $std/mod/test_fmod
   i32.eqz
@@ -1389,8 +1268,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const 0
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1403,8 +1281,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const -0
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1443,8 +1320,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const 1
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1457,8 +1333,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const -1
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1484,8 +1359,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const inf
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1499,8 +1373,7 @@
    unreachable
   end
   f64.const inf
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
   i32.eqz
@@ -1512,10 +1385,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
-  f64.const inf
-  f64.neg
+  f64.const -inf
+  f64.const -inf
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
   i32.eqz
@@ -1540,8 +1411,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const nan:0x8000000000000
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
@@ -1568,8 +1438,7 @@
    unreachable
   end
   f64.const nan:0x8000000000000
-  f64.const inf
-  f64.neg
+  f64.const -inf
   f64.const nan:0x8000000000000
   call $std/mod/test_fmod
   i32.eqz
@@ -2089,8 +1958,7 @@
    unreachable
   end
   f32.const 0
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const 0
   call $std/mod/test_fmodf
   i32.eqz
@@ -2103,8 +1971,7 @@
    unreachable
   end
   f32.const -0
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const -0
   call $std/mod/test_fmodf
   i32.eqz
@@ -2143,8 +2010,7 @@
    unreachable
   end
   f32.const 1
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const 1
   call $std/mod/test_fmodf
   i32.eqz
@@ -2157,8 +2023,7 @@
    unreachable
   end
   f32.const -1
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const -1
   call $std/mod/test_fmodf
   i32.eqz
@@ -2196,8 +2061,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const 0
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2210,8 +2074,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const -0
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2250,8 +2113,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const 1
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2264,8 +2126,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const -1
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2291,8 +2152,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const inf
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2306,8 +2166,7 @@
    unreachable
   end
   f32.const inf
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const nan:0x400000
   call $std/mod/test_fmodf
   i32.eqz
@@ -2319,10 +2178,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
-  f32.const inf
-  f32.neg
+  f32.const -inf
+  f32.const -inf
   f32.const nan:0x400000
   call $std/mod/test_fmodf
   i32.eqz
@@ -2347,8 +2204,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const nan:0x400000
   f32.const nan:0x400000
   call $std/mod/test_fmodf
@@ -2375,8 +2231,7 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const inf
-  f32.neg
+  f32.const -inf
   f32.const nan:0x400000
   call $std/mod/test_fmodf
   i32.eqz
@@ -2389,9 +2244,10 @@
    unreachable
   end
  )
- (func $start (; 11 ;) (type $FUNCSIG$v)
+ (func $start (; 9 ;) (type $FUNCSIG$v)
   call $start:std/mod
  )
- (func $null (; 12 ;) (type $FUNCSIG$v)
+ (func $null (; 10 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat
index 87ae76e2..bd96d9f0 100644
--- a/tests/compiler/std/set.optimized.wat
+++ b/tests/compiler/std/set.optimized.wat
@@ -4,9 +4,9 @@
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iij (func (param i32 i64) (result i32)))
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$iiji (func (param i32 i64 i32) (result i32)))
@@ -17,1639 +17,241 @@
  (type $FUNCSIG$iid (func (param i32 f64) (result i32)))
  (type $FUNCSIG$iidi (func (param i32 f64 i32) (result i32)))
  (type $FUNCSIG$vid (func (param i32 f64)))
+ (type $FUNCSIG$i (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
- (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00")
- (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
- (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 160) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 216) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00")
- (data (i32.const 256) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 312) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 368) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 424) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h")
+ (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 256) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 304) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 360) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 400) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a")
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 424))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 640))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $start)
- (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/memory/memory.fill (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
-  local.get $3
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.const 4
-   i32.shr_u
-   local.set $5
-  else   
-   i32.const 31
-   local.get $3
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $4
-  end
-  local.get $4
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $5
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
-  i32.load offset=20
-  local.set $7
-  local.get $6
-  if
-   local.get $6
-   local.get $7
-   i32.store offset=20
-  end
-  local.get $7
-  if
-   local.get $7
-   local.get $6
-   i32.store offset=16
-  end
-  local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
-   i32.const 4
-   i32.shl
-   local.get $8
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
-   i32.eqz
-   if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $4
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
-  i32.load
-  local.set $5
-  local.get $5
-  i32.const 1
-  i32.and
-  if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $3
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $2
-    i32.const 3
-    i32.and
-    local.get $3
-    i32.or
-    local.tee $2
-    i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $2
-  i32.const 2
-  i32.and
-  if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
-   i32.load
-   local.set $6
-   local.get $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $7
-   local.get $7
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $3
-    call $~lib/rt/tlsf/removeBlock
-    local.get $3
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $2
-    i32.store
-    local.get $3
-    local.set $1
-   end
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $8
-  local.get $8
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $8
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $8
-  i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $8
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
-   i32.const 4
-   i32.shr_u
-   local.set $10
-  else   
-   i32.const 31
-   local.get $8
-   i32.clz
-   i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $9
-  end
-  local.get $9
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $10
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $11
-  i32.store offset=20
-  local.get $11
-  if
-   local.get $11
-   local.get $1
-   i32.store offset=16
-  end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
-  i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 6 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 7 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 176
-   i32.const 128
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 128
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.fill (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
   block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
    local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $3
    i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $0
+   i32.const 0
    i32.store8
-   local.get $5
-   local.get $3
+   local.get $0
+   local.get $1
    i32.add
    i32.const 1
    i32.sub
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $3
+   local.get $1
    i32.const 2
    i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $0
    i32.const 1
    i32.add
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $5
+   local.get $0
    i32.const 2
    i32.add
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $5
-   local.get $3
+   local.get $0
+   local.get $1
    i32.add
+   local.tee $2
    i32.const 2
    i32.sub
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $5
-   local.get $3
-   i32.add
+   local.get $2
    i32.const 3
    i32.sub
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $3
+   local.get $1
    i32.const 6
    i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $0
    i32.const 3
    i32.add
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $5
-   local.get $3
+   local.get $0
+   local.get $1
    i32.add
    i32.const 4
    i32.sub
-   local.get $4
+   i32.const 0
    i32.store8
-   local.get $3
+   local.get $1
    i32.const 8
    i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $1
    i32.const 0
-   local.get $5
+   local.get $0
    i32.sub
    i32.const 3
    i32.and
-   local.set $6
-   local.get $5
-   local.get $6
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $6
+   local.tee $1
    i32.sub
-   local.set $3
-   local.get $3
+   local.set $2
+   local.get $0
+   local.get $1
+   i32.add
+   local.tee $0
+   i32.const 0
+   i32.store
+   local.get $2
    i32.const -4
    i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.store
-   local.get $5
-   local.get $3
+   local.tee $1
+   local.get $0
    i32.add
    i32.const 4
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $3
+   local.get $1
    i32.const 8
    i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $0
    i32.const 4
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
+   local.get $0
    i32.const 8
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
+   local.get $0
+   local.get $1
    i32.add
+   local.tee $2
    i32.const 12
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
-   i32.add
+   local.get $2
    i32.const 8
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $3
+   local.get $1
    i32.const 24
    i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
+   br_if $~lib/util/memory/memset|inlined.0
+   local.get $0
    i32.const 12
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
+   local.get $0
    i32.const 16
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
+   local.get $0
    i32.const 20
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
+   local.get $0
    i32.const 24
    i32.add
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
+   local.get $0
+   local.get $1
    i32.add
+   local.tee $2
    i32.const 28
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
-   i32.add
+   local.get $2
    i32.const 24
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
-   i32.add
+   local.get $2
    i32.const 20
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   local.get $5
-   local.get $3
-   i32.add
+   local.get $2
    i32.const 16
    i32.sub
-   local.get $7
+   i32.const 0
    i32.store
-   i32.const 24
-   local.get $5
+   local.get $0
    i32.const 4
    i32.and
+   i32.const 24
    i32.add
-   local.set $6
-   local.get $5
-   local.get $6
+   local.tee $2
+   local.get $0
    i32.add
-   local.set $5
-   local.get $3
-   local.get $6
+   local.set $0
+   local.get $1
+   local.get $2
    i32.sub
-   local.set $3
-   local.get $7
-   i64.extend_i32_u
-   local.get $7
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $8
-   block $break|0
-    loop $continue|0
-     local.get $3
+   local.set $1
+   loop $continue|0
+    local.get $1
+    i32.const 32
+    i32.ge_u
+    if
+     local.get $0
+     i64.const 0
+     i64.store
+     local.get $0
+     i32.const 8
+     i32.add
+     i64.const 0
+     i64.store
+     local.get $0
+     i32.const 16
+     i32.add
+     i64.const 0
+     i64.store
+     local.get $0
+     i32.const 24
+     i32.add
+     i64.const 0
+     i64.store
+     local.get $1
      i32.const 32
-     i32.ge_u
-     if
-      local.get $5
-      local.get $8
-      i64.store
-      local.get $5
-      i32.const 8
-      i32.add
-      local.get $8
-      i64.store
-      local.get $5
-      i32.const 16
-      i32.add
-      local.get $8
-      i64.store
-      local.get $5
-      i32.const 24
-      i32.add
-      local.get $8
-      i64.store
-      local.get $3
-      i32.const 32
-      i32.sub
-      local.set $3
-      local.get $5
-      i32.const 32
-      i32.add
-      local.set $5
-      br $continue|0
-     end
+     i32.sub
+     local.set $1
+     local.get $0
+     i32.const 32
+     i32.add
+     local.set $0
+     br $continue|0
     end
    end
   end
  )
- (func $~lib/arraybuffer/ArrayBuffer#constructor (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $1
+ (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
   i32.const 1073741808
   i32.gt_u
   if
@@ -1660,45 +262,32 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 15
   call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $2
-  i32.const 0
-  local.get $1
-  call $~lib/memory/memory.fill
-  local.get $2
-  call $~lib/rt/purerc/__retain
- )
- (func $~lib/set/Set<i8>#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
   local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  local.get $0
+  call $~lib/memory/memory.fill
+  local.get $1
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/set/Set<i8>#clear (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  i32.load
+  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 16
+  call $~lib/arraybuffer/ArrayBuffer#constructor
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 3
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.load offset=8
+  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 32
+  call $~lib/arraybuffer/ArrayBuffer#constructor
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -1710,118 +299,94 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i8>#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 17
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
+ (func $~lib/set/Set<i8>#constructor (; 7 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 17
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash8 (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  i32.const -2128831035
-  local.get $0
-  i32.xor
-  i32.const 16777619
-  i32.mul
- )
- (func $~lib/set/Set<i8>#find (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/set/Set<i8>#find (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   i32.load
-  local.get $2
   local.get $0
   i32.load offset=4
+  local.get $2
   i32.and
-  i32.const 4
-  i32.mul
+  i32.const 2
+  i32.shl
   i32.add
   i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
+  local.set $0
+  loop $continue|0
+   local.get $0
+   if
+    local.get $0
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     i32.load8_u
+     local.get $1
+     i32.const 255
      i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load8_s
-      local.get $1
-      i32.const 24
-      i32.shl
-      i32.const 24
-      i32.shr_s
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
+     i32.eq
     end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=4
+    i32.const -2
+    i32.and
+    local.set $0
+    br $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/set/Set<i8>#has (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/set/Set<i8>#has (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.0
-  end
+  local.get $1
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/set/Set<i8>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i8>#rehash (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i8>#rehash (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -1829,160 +394,127 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<i8>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $6
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $3
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<i8>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $2
+  loop $continue|0
+   local.get $3
+   local.get $7
+   i32.ne
+   if
+    local.get $3
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $2
+     local.get $3
+     i32.load8_s
+     i32.store8
+     local.get $2
+     local.get $3
+     i32.load8_s
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load8_s
-      i32.store8
-      block $~lib/util/hash/HASH<i8>|inlined.2 (result i32)
-       local.get $9
-       i32.load8_s
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash8
-       br $~lib/util/hash/HASH<i8>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<i8>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<i8>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=4
+     local.get $8
+     local.get $2
+     i32.store
+     local.get $2
+     i32.const 8
+     i32.add
+     local.set $2
     end
+    local.get $3
+    i32.const 8
+    i32.add
+    local.set $3
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i8>#add (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i8>#add (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<i8>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.1
-  end
+  local.get $1
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
   local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<i8>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -2016,23 +548,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<i8>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i32.store8
    local.get $0
@@ -2041,57 +570,45 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $2
-   local.get $4
-   local.get $2
+   local.tee $0
    i32.load
    i32.store offset=4
+   local.get $0
    local.get $2
-   local.get $4
    i32.store
   end
  )
- (func $~lib/set/Set<i8>#get:size (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<i8>#delete (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i8>#delete (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.3
-  end
+  local.get $1
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/set/Set<i8>#find
-  local.set $3
-  local.get $3
+  local.tee $1
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $1
+  local.get $1
   i32.load offset=4
   i32.const 1
   i32.or
@@ -2106,17 +623,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $2
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
   local.get $0
   i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
+  local.tee $1
+  i32.const 4
+  local.get $1
   i32.gt_u
   select
   i32.ge_u
@@ -2135,319 +650,274 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $2
    call $~lib/set/Set<i8>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<i8> (; 25 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i8> (; 13 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
-  i32.const 0
   call $~lib/set/Set<i8>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<i8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<i8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<i8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<i8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $1
   call $~lib/set/Set<i8>#clear
-  local.get $0
-  call $~lib/set/Set<i8>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u8>#clear (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<u8>#constructor (; 14 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 18
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -2455,108 +925,25 @@
   local.get $0
   i32.const 0
   i32.store offset=20
- )
- (func $~lib/set/Set<u8>#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 18
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<u8>#clear
+  local.get $0
+  call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u8>#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  i32.load
-  local.get $2
-  local.get $0
-  i32.load offset=4
-  i32.and
-  i32.const 4
-  i32.mul
-  i32.add
-  i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load8_u
-      local.get $1
-      i32.const 255
-      i32.and
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
-    end
-   end
-  end
-  i32.const 0
- )
- (func $~lib/set/Set<u8>#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/set/Set<u8>#has (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.0
-  end
-  call $~lib/set/Set<u8>#find
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  call $~lib/set/Set<i8>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u8>#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u8>#rehash (; 16 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2564,158 +951,125 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<u8>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $6
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $3
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<u8>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $2
+  loop $continue|0
+   local.get $3
+   local.get $7
+   i32.ne
+   if
+    local.get $3
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $2
+     local.get $3
+     i32.load8_u
+     i32.store8
+     local.get $2
+     local.get $3
+     i32.load8_u
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load8_u
-      i32.store8
-      block $~lib/util/hash/HASH<u8>|inlined.2 (result i32)
-       local.get $9
-       i32.load8_u
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash8
-       br $~lib/util/hash/HASH<u8>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<u8>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<u8>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=4
+     local.get $8
+     local.get $2
+     i32.store
+     local.get $2
+     i32.const 8
+     i32.add
+     local.set $2
     end
+    local.get $3
+    i32.const 8
+    i32.add
+    local.set $3
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u8>#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u8>#add (; 17 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<u8>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.1
-  end
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
   local.set $3
   local.get $0
   local.get $1
-  local.get $3
-  call $~lib/set/Set<u8>#find
-  local.set $4
-  local.get $4
+  local.get $2
+  call $~lib/set/Set<i8>#find
   i32.eqz
   if
    local.get $0
@@ -2749,23 +1103,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<u8>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i32.store8
    local.get $0
@@ -2774,55 +1125,43 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $2
-   local.get $4
-   local.get $2
+   local.tee $0
    i32.load
    i32.store offset=4
+   local.get $0
    local.get $2
-   local.get $4
    i32.store
   end
  )
- (func $~lib/set/Set<u8>#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<u8>#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u8>#delete (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.3
-  end
-  call $~lib/set/Set<u8>#find
-  local.set $3
-  local.get $3
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  call $~lib/set/Set<i8>#find
+  local.tee $1
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $1
+  local.get $1
   i32.load offset=4
   i32.const 1
   i32.or
@@ -2837,17 +1176,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $2
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
   local.get $0
   i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
+  local.tee $1
+  i32.const 4
+  local.get $1
   i32.gt_u
   select
   i32.ge_u
@@ -2866,319 +1203,274 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $2
    call $~lib/set/Set<u8>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<u8> (; 34 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u8> (; 19 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
-  i32.const 0
   call $~lib/set/Set<u8>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<u8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<u8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<u8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<u8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u8>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u8>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u8>#clear
-  local.get $0
-  call $~lib/set/Set<u8>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i16>#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<i16>#constructor (; 20 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 19
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -3186,134 +1478,79 @@
   local.get $0
   i32.const 0
   i32.store offset=20
+  local.get $0
+  call $~lib/set/Set<i8>#clear
+  local.get $0
  )
- (func $~lib/set/Set<i16>#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
+ (func $~lib/set/Set<i16>#find (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.load
+  local.get $0
+  i32.load offset=4
+  local.get $2
+  i32.and
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+  local.set $0
+  loop $continue|0
    local.get $0
-   i32.eqz
    if
-    i32.const 24
-    i32.const 19
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    local.get $0
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     i32.load16_u
+     local.get $1
+     i32.const 65535
+     i32.and
+     i32.eq
+    end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=4
+    i32.const -2
+    i32.and
     local.set $0
+    br $continue|0
    end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
   end
-  call $~lib/set/Set<i16>#clear
-  local.get $0
+  i32.const 0
  )
- (func $~lib/util/hash/hash16 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  i32.const -2128831035
-  local.set $1
-  local.get $1
+ (func $~lib/set/Set<i16>#has (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
+  local.get $1
+  local.get $1
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  local.tee $0
   i32.const 255
   i32.and
+  i32.const -2128831035
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
   local.get $0
   i32.const 8
   i32.shr_u
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
- )
- (func $~lib/set/Set<i16>#find (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  i32.load
-  local.get $2
-  local.get $0
-  i32.load offset=4
-  i32.and
-  i32.const 4
-  i32.mul
-  i32.add
-  i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load16_s
-      local.get $1
-      i32.const 16
-      i32.shl
-      i32.const 16
-      i32.shr_s
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
-    end
-   end
-  end
-  i32.const 0
- )
- (func $~lib/set/Set<i16>#has (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.0
-  end
   call $~lib/set/Set<i16>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i16>#rehash (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i16>#rehash (; 23 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3321,160 +1558,145 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<i16>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $7
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $3
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<i16>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
-  local.set $7
-  local.get $5
   local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.get $5
+  local.set $2
+  loop $continue|0
+   local.get $3
+   local.get $8
+   i32.ne
+   if
+    local.get $3
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $2
+     local.get $3
+     i32.load16_s
+     i32.store16
+     local.get $2
+     local.get $3
+     i32.load16_s
+     local.tee $6
+     i32.const 255
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load16_s
-      i32.store16
-      block $~lib/util/hash/HASH<i16>|inlined.2 (result i32)
-       local.get $9
-       i32.load16_s
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash16
-       br $~lib/util/hash/HASH<i16>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<i16>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      local.get $6
-     block $~lib/set/ENTRY_SIZE<i16>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 8
+     i32.shr_u
+     i32.xor
+     i32.const 16777619
+     i32.mul
+     local.get $1
+     i32.and
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $6
+     i32.load
+     i32.store offset=4
+     local.get $6
+     local.get $2
+     i32.store
+     local.get $2
+     i32.const 8
+     i32.add
+     local.set $2
     end
+    local.get $3
+    i32.const 8
+    i32.add
+    local.set $3
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $7
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i16>#add (; 41 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i16>#add (; 24 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<i16>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.1
-  end
+  local.get $1
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  local.tee $2
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $2
+  i32.const 8
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
   local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<i16>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -3508,23 +1730,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<i16>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i32.store16
    local.get $0
@@ -3533,57 +1752,54 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $2
-   local.get $4
-   local.get $2
+   local.tee $0
    i32.load
    i32.store offset=4
+   local.get $0
    local.get $2
-   local.get $4
    i32.store
   end
  )
- (func $~lib/set/Set<i16>#get:size (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<i16>#delete (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i16>#delete (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.3
-  end
+  local.get $1
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  local.tee $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $1
+  i32.const 8
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/set/Set<i16>#find
-  local.set $3
-  local.get $3
+  local.tee $1
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $1
+  local.get $1
   i32.load offset=4
   i32.const 1
   i32.or
@@ -3598,17 +1814,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $2
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
   local.get $0
   i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
+  local.tee $1
+  i32.const 4
+  local.get $1
   i32.gt_u
   select
   i32.ge_u
@@ -3627,319 +1841,274 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $2
    call $~lib/set/Set<i16>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<i16> (; 44 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i16> (; 26 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
-  i32.const 0
   call $~lib/set/Set<i16>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<i16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<i16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i16>#clear
-  local.get $0
-  call $~lib/set/Set<i16>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u16>#clear (; 45 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<u16>#constructor (; 27 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 20
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -3947,108 +2116,34 @@
   local.get $0
   i32.const 0
   i32.store offset=20
- )
- (func $~lib/set/Set<u16>#constructor (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 20
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<u16>#clear
+  local.get $0
+  call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u16>#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  i32.load
-  local.get $2
-  local.get $0
-  i32.load offset=4
-  i32.and
-  i32.const 4
-  i32.mul
-  i32.add
-  i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load16_u
-      local.get $1
-      i32.const 65535
-      i32.and
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
-    end
-   end
-  end
-  i32.const 0
- )
- (func $~lib/set/Set<u16>#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/set/Set<u16>#has (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.0
-  end
-  call $~lib/set/Set<u16>#find
+  local.get $1
+  i32.const 65535
+  i32.and
+  local.tee $0
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $0
+  i32.const 8
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  call $~lib/set/Set<i16>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u16>#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u16>#rehash (; 29 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4056,158 +2151,143 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<u16>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $7
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $3
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<u16>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
-  local.set $7
-  local.get $5
   local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.get $5
+  local.set $2
+  loop $continue|0
+   local.get $3
+   local.get $8
+   i32.ne
+   if
+    local.get $3
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $2
+     local.get $3
+     i32.load16_u
+     i32.store16
+     local.get $2
+     local.get $3
+     i32.load16_u
+     local.tee $6
+     i32.const 255
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load16_u
-      i32.store16
-      block $~lib/util/hash/HASH<u16>|inlined.2 (result i32)
-       local.get $9
-       i32.load16_u
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash16
-       br $~lib/util/hash/HASH<u16>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<u16>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      local.get $6
-     block $~lib/set/ENTRY_SIZE<u16>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 8
+     i32.shr_u
+     i32.xor
+     i32.const 16777619
+     i32.mul
+     local.get $1
+     i32.and
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $6
+     i32.load
+     i32.store offset=4
+     local.get $6
+     local.get $2
+     i32.store
+     local.get $2
+     i32.const 8
+     i32.add
+     local.set $2
     end
+    local.get $3
+    i32.const 8
+    i32.add
+    local.set $3
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $7
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u16>#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u16>#add (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<u16>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.1
-  end
+  local.get $1
+  i32.const 65535
+  i32.and
+  local.tee $2
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $2
+  i32.const 8
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
   local.set $3
   local.get $0
   local.get $1
-  local.get $3
-  call $~lib/set/Set<u16>#find
-  local.set $4
-  local.get $4
+  local.get $2
+  call $~lib/set/Set<i16>#find
   i32.eqz
   if
    local.get $0
@@ -4241,23 +2321,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<u16>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i32.store16
    local.get $0
@@ -4266,55 +2343,52 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $2
-   local.get $4
-   local.get $2
+   local.tee $0
    i32.load
    i32.store offset=4
+   local.get $0
    local.get $2
-   local.get $4
    i32.store
   end
  )
- (func $~lib/set/Set<u16>#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<u16>#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u16>#delete (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.3
-  end
-  call $~lib/set/Set<u16>#find
-  local.set $3
-  local.get $3
+  local.get $1
+  i32.const 65535
+  i32.and
+  local.tee $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $1
+  i32.const 8
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  call $~lib/set/Set<i16>#find
+  local.tee $1
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $1
+  local.get $1
   i32.load offset=4
   i32.const 1
   i32.or
@@ -4329,17 +2403,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $2
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
   local.get $0
   i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
+  local.tee $1
+  i32.const 4
+  local.get $1
   i32.gt_u
   select
   i32.ge_u
@@ -4358,319 +2430,274 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $2
    call $~lib/set/Set<u16>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<u16> (; 53 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u16> (; 32 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
-  i32.const 0
   call $~lib/set/Set<u16>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<u16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<u16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#has
-    i32.eqz
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<u16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<u16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<u16>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u16>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u16>#clear
-  local.get $0
-  call $~lib/set/Set<u16>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i32>#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<i32>#constructor (; 33 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 21
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -4678,54 +2705,18 @@
   local.get $0
   i32.const 0
   i32.store offset=20
- )
- (func $~lib/set/Set<i32>#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 21
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<i32>#clear
+  local.get $0
+  call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash32 (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  i32.const -2128831035
-  local.set $1
-  local.get $1
+ (func $~lib/util/hash/hash32 (; 34 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 255
   i32.and
+  i32.const -2128831035
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
   local.get $0
   i32.const 8
   i32.shr_u
@@ -4734,8 +2725,6 @@
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
   local.get $0
   i32.const 16
   i32.shr_u
@@ -4744,80 +2733,64 @@
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
   local.get $0
   i32.const 24
   i32.shr_u
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $1
-  local.get $1
  )
- (func $~lib/set/Set<i32>#find (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/set/Set<i32>#find (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   i32.load
-  local.get $2
   local.get $0
   i32.load offset=4
+  local.get $2
   i32.and
-  i32.const 4
-  i32.mul
+  i32.const 2
+  i32.shl
   i32.add
   i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load
-      local.get $1
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
+  local.set $0
+  loop $continue|0
+   local.get $0
+   if
+    local.get $0
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     i32.load
+     local.get $1
+     i32.eq
     end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=4
+    i32.const -2
+    i32.and
+    local.set $0
+    br $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/set/Set<i32>#has (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/set/Set<i32>#has (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/hash32
   call $~lib/set/Set<i32>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i32>#rehash (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i32>#rehash (; 37 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4825,156 +2798,115 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<i32>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $6
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $2
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<i32>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $3
+  loop $continue|0
+   local.get $2
+   local.get $7
+   i32.ne
+   if
+    local.get $2
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $3
+     local.get $2
+     i32.load
+     i32.store
+     local.get $3
+     local.get $2
+     i32.load
+     call $~lib/util/hash/hash32
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load
-      i32.store
-      block $~lib/util/hash/HASH<i32>|inlined.2 (result i32)
-       local.get $9
-       i32.load
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash32
-       br $~lib/util/hash/HASH<i32>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<i32>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<i32>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=4
+     local.get $8
+     local.get $3
+     i32.store
+     local.get $3
+     i32.const 8
+     i32.add
+     local.set $3
     end
+    local.get $2
+    i32.const 8
+    i32.add
+    local.set $2
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i32>#add (; 60 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i32>#add (; 38 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<i32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.1
-  end
-  local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $1
+  call $~lib/util/hash/hash32
+  local.tee $3
   call $~lib/set/Set<i32>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -5008,746 +2940,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<i32>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
-   i32.add
-   local.set $4
-   local.get $4
-   local.get $1
-   i32.store
-   local.get $0
-   local.get $0
-   i32.load offset=20
-   i32.const 1
-   i32.add
-   i32.store offset=20
-   local.get $0
-   i32.load
-   local.get $3
-   local.get $0
-   i32.load offset=4
-   i32.and
-   i32.const 4
-   i32.mul
-   i32.add
    local.set $2
-   local.get $4
-   local.get $2
-   i32.load
-   i32.store offset=4
-   local.get $2
-   local.get $4
-   i32.store
-  end
- )
- (func $~lib/set/Set<i32>#get:size (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<i32>#delete (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.3
-  end
-  call $~lib/set/Set<i32>#find
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   i32.const 0
-   return
-  end
-  local.get $3
-  local.get $3
-  i32.load offset=4
-  i32.const 1
-  i32.or
-  i32.store offset=4
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.const 1
-  i32.sub
-  i32.store offset=20
-  local.get $0
-  i32.load offset=4
-  i32.const 1
-  i32.shr_u
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.add
-  i32.const 4
-  local.tee $2
-  local.get $0
-  i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
-  i32.gt_u
-  select
-  i32.ge_u
-  if (result i32)
    local.get $0
-   i32.load offset=20
-   local.get $0
-   i32.load offset=12
-   f64.convert_i32_s
-   f64.const 0.75
-   f64.mul
-   i32.trunc_f64_s
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   local.get $0
-   local.get $4
-   call $~lib/set/Set<i32>#rehash
-  end
-  i32.const 1
- )
- (func $std/set/testNumeric<i32> (; 63 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  i32.const 0
-  call $~lib/set/Set<i32>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
-    local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|0
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 6
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#add
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 8
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i32>#get:size
-  i32.const 100
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 10
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
-    local.get $1
-    i32.const 100
-    i32.lt_s
-    i32.eqz
-    br_if $break|1
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 14
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#add
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 16
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i32>#get:size
-  i32.const 100
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 18
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
-    local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|2
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 22
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#delete
-    drop
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 24
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i32>#get:size
-  i32.const 50
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 26
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
-    local.get $1
-    i32.const 50
-    i32.lt_s
-    i32.eqz
-    br_if $break|3
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 30
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#add
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 32
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#delete
-    drop
-    local.get $0
-    local.get $1
-    call $~lib/set/Set<i32>#has
-    i32.eqz
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 232
-     i32.const 34
-     i32.const 4
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
-    unreachable
-   end
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i32>#get:size
-  i32.const 50
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 36
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i32>#clear
-  local.get $0
-  call $~lib/set/Set<i32>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 40
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/rt/purerc/__release
- )
- (func $~lib/set/Set<u32>#clear (; 64 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
-  i32.store
-  local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
-  i32.store offset=4
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
-  i32.store offset=8
-  local.get $0
-  i32.const 4
-  i32.store offset=12
-  local.get $0
-  i32.const 0
-  i32.store offset=16
-  local.get $0
-  i32.const 0
-  i32.store offset=20
- )
- (func $~lib/set/Set<u32>#constructor (; 65 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 22
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<u32>#clear
-  local.get $0
- )
- (func $~lib/set/Set<u32>#find (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  i32.load
-  local.get $2
-  local.get $0
-  i32.load offset=4
-  i32.and
-  i32.const 4
-  i32.mul
-  i32.add
-  i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i32.load
-      local.get $1
-      i32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
-    end
-   end
-  end
-  i32.const 0
- )
- (func $~lib/set/Set<u32>#has (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.0
-  end
-  call $~lib/set/Set<u32>#find
-  i32.const 0
-  i32.ne
- )
- (func $~lib/set/Set<u32>#rehash (; 68 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  local.get $1
-  i32.const 1
-  i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
-  local.get $2
-  f64.convert_i32_s
-  f64.const 2.6666666666666665
-  f64.mul
-  i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<u32>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $0
-  i32.load offset=8
-  local.set $6
-  local.get $6
-  local.get $0
-  i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<u32>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
-  i32.add
-  local.set $7
-  local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
-    if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i32.load
-      i32.store
-      block $~lib/util/hash/HASH<u32>|inlined.2 (result i32)
-       local.get $9
-       i32.load
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash32
-       br $~lib/util/hash/HASH<u32>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $11
-      local.get $3
-      local.get $11
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $12
-      local.get $10
-      local.get $12
-      i32.load
-      i32.store offset=4
-      local.get $12
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<u32>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<u32>|inlined.4 (result i32)
-      i32.const 8
-     end
-     i32.add
-     local.set $6
-     br $continue|0
-    end
-   end
-  end
-  local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
-  i32.load
-  call $~lib/rt/purerc/__retainRelease
-  i32.store
-  local.get $0
-  local.get $1
-  i32.store offset=4
-  local.get $0
-  local.tee $9
-  local.get $5
-  local.get $9
-  i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
-  i32.store offset=8
-  local.get $0
-  local.get $4
-  i32.store offset=12
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
-  local.get $5
-  call $~lib/rt/purerc/__release
- )
- (func $~lib/set/Set<u32>#add (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/hash/HASH<u32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.1
-  end
-  local.set $3
-  local.get $0
-  local.get $1
-  local.get $3
-  call $~lib/set/Set<u32>#find
-  local.set $4
-  local.get $4
-  i32.eqz
-  if
    local.get $0
    i32.load offset=16
-   local.get $0
-   i32.load offset=12
-   i32.eq
-   if
-    local.get $0
-    local.get $0
-    i32.load offset=20
-    local.get $0
-    i32.load offset=12
-    f64.convert_i32_s
-    f64.const 0.75
-    f64.mul
-    i32.trunc_f64_s
-    i32.lt_s
-    if (result i32)
-     local.get $0
-     i32.load offset=4
-    else     
-     local.get $0
-     i32.load offset=4
-     i32.const 1
-     i32.shl
-     i32.const 1
-     i32.or
-    end
-    call $~lib/set/Set<u32>#rehash
-   end
-   local.get $0
-   i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $2
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $2
-   end
-   block $~lib/set/ENTRY_SIZE<u32>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i32.store
    local.get $0
@@ -5756,53 +2962,38 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $2
-   local.get $4
-   local.get $2
+   local.tee $0
    i32.load
    i32.store offset=4
+   local.get $0
    local.get $2
-   local.get $4
    i32.store
   end
  )
- (func $~lib/set/Set<u32>#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<u32>#delete (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i32>#delete (; 39 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.3
-  end
-  call $~lib/set/Set<u32>#find
-  local.set $3
-  local.get $3
+  local.get $1
+  call $~lib/util/hash/hash32
+  call $~lib/set/Set<i32>#find
+  local.tee $1
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $1
+  local.get $1
   i32.load offset=4
   i32.const 1
   i32.or
@@ -5817,17 +3008,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $2
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
   local.get $0
   i32.load offset=20
-  local.tee $5
-  local.get $2
-  local.get $5
+  local.tee $1
+  i32.const 4
+  local.get $1
   i32.gt_u
   select
   i32.ge_u
@@ -5846,316 +3035,549 @@
   end
   if
    local.get $0
-   local.get $4
-   call $~lib/set/Set<u32>#rehash
+   local.get $2
+   call $~lib/set/Set<i32>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<u32> (; 72 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i32> (; 40 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
-  i32.const 0
-  call $~lib/set/Set<u32>#constructor
-  local.set $0
-  block $break|0
-   i32.const 0
-   local.set $1
-   loop $repeat|0
+  call $~lib/set/Set<i32>#constructor
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
-    i32.eqz
+    call $~lib/set/Set<i32>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u32>#add
     local.get $0
+    call $~lib/set/Set<i32>#add
     local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i32>#has
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i32.const 50
-   local.set $1
-   loop $repeat|1
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_s
+   if
     local.get $1
-    i32.const 100
-    i32.lt_u
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u32>#has
+    call $~lib/set/Set<i32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u32>#add
     local.get $0
+    call $~lib/set/Set<i32>#add
     local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i32>#has
     if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i32.const 0
-   local.set $1
-   loop $repeat|2
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u32>#has
+    call $~lib/set/Set<i32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u32>#delete
-    drop
     local.get $0
+    call $~lib/set/Set<i32>#delete
     local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i32>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i32.const 0
-   local.set $1
-   loop $repeat|3
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_s
+   if
     local.get $1
-    i32.const 50
-    i32.lt_u
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
-    i32.eqz
+    call $~lib/set/Set<i32>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u32>#add
     local.get $0
+    call $~lib/set/Set<i32>#add
     local.get $1
-    call $~lib/set/Set<u32>#has
+    local.get $0
+    call $~lib/set/Set<i32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u32>#delete
-    drop
     local.get $0
+    call $~lib/set/Set<i32>#delete
     local.get $1
-    call $~lib/set/Set<u32>#has
-    i32.eqz
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i32>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i32.const 1
-    i32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u32>#clear
-  local.get $0
-  call $~lib/set/Set<u32>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i64>#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<u32>#constructor (; 41 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 22
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 64
-   call $~lib/arraybuffer/ArrayBuffer#constructor
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  call $~lib/set/Set<i8>#clear
+  local.get $0
+ )
+ (func $std/set/testNumeric<u32> (; 42 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/Set<u32>#constructor
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 6
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#add
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|0
+    else     
+     i32.const 0
+     i32.const 128
+     i32.const 8
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    unreachable
+   end
   end
+  local.get $1
+  i32.load offset=20
+  i32.const 100
+  i32.ne
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 10
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 14
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#add
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|1
+    else     
+     i32.const 0
+     i32.const 128
+     i32.const 16
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    unreachable
+   end
+  end
+  local.get $1
+  i32.load offset=20
+  i32.const 100
+  i32.ne
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 18
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 22
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#delete
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 24
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|2
+    end
+    unreachable
+   end
+  end
+  local.get $1
+  i32.load offset=20
+  i32.const 50
+  i32.ne
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 26
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i32.const 50
+   i32.lt_u
+   if
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 30
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#add
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 32
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#delete
+    local.get $1
+    local.get $0
+    call $~lib/set/Set<i32>#has
+    if
+     i32.const 0
+     i32.const 128
+     i32.const 34
+     i32.const 4
+     call $~lib/builtins/abort
+     unreachable
+    else     
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $repeat|3
+    end
+    unreachable
+   end
+  end
+  local.get $1
+  i32.load offset=20
+  i32.const 50
+  i32.ne
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 36
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 40
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/set/Set<i64>#clear (; 43 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  i32.load
+  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 16
+  call $~lib/arraybuffer/ArrayBuffer#constructor
+  i32.store
+  local.get $0
+  i32.const 3
+  i32.store offset=4
+  local.get $0
+  i32.load offset=8
+  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 64
+  call $~lib/arraybuffer/ArrayBuffer#constructor
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -6167,63 +3589,77 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i64>#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 23
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
+ (func $~lib/set/Set<i64>#constructor (; 44 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 23
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
   call $~lib/set/Set<i64>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash64 (; 75 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/hash/hash64 (; 45 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
   local.get $0
   i32.wrap_i64
-  local.set $1
+  local.tee $1
+  i32.const 255
+  i32.and
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $1
+  i32.const 8
+  i32.shr_u
+  i32.const 255
+  i32.and
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $1
+  i32.const 16
+  i32.shr_u
+  i32.const 255
+  i32.and
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.get $1
+  i32.const 24
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
   local.get $0
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.set $2
-  i32.const -2128831035
-  local.set $3
-  local.get $3
-  local.get $1
+  local.tee $1
   i32.const 255
   i32.and
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $3
-  local.get $3
   local.get $1
   i32.const 8
   i32.shr_u
@@ -6232,8 +3668,6 @@
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $3
-  local.get $3
   local.get $1
   i32.const 16
   i32.shr_u
@@ -6242,116 +3676,64 @@
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $3
-  local.get $3
   local.get $1
   i32.const 24
   i32.shr_u
   i32.xor
   i32.const 16777619
   i32.mul
-  local.set $3
-  local.get $3
-  local.get $2
-  i32.const 255
-  i32.and
-  i32.xor
-  i32.const 16777619
-  i32.mul
-  local.set $3
-  local.get $3
-  local.get $2
-  i32.const 8
-  i32.shr_u
-  i32.const 255
-  i32.and
-  i32.xor
-  i32.const 16777619
-  i32.mul
-  local.set $3
-  local.get $3
-  local.get $2
-  i32.const 16
-  i32.shr_u
-  i32.const 255
-  i32.and
-  i32.xor
-  i32.const 16777619
-  i32.mul
-  local.set $3
-  local.get $3
-  local.get $2
-  i32.const 24
-  i32.shr_u
-  i32.xor
-  i32.const 16777619
-  i32.mul
-  local.set $3
-  local.get $3
  )
- (func $~lib/set/Set<i64>#find (; 76 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/set/Set<i64>#find (; 46 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   local.get $0
   i32.load
-  local.get $2
   local.get $0
   i32.load offset=4
+  local.get $2
   i32.and
-  i32.const 4
-  i32.mul
+  i32.const 2
+  i32.shl
   i32.add
   i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i64.load
-      local.get $1
-      i64.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
+  local.set $0
+  loop $continue|0
+   local.get $0
+   if
+    local.get $0
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     i64.load
+     local.get $1
+     i64.eq
     end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=8
+    i32.const -2
+    i32.and
+    local.set $0
+    br $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/set/Set<i64>#has (; 77 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+ (func $~lib/set/Set<i64>#has (; 47 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/hash64
   call $~lib/set/Set<i64>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i64>#rehash (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i64>#rehash (; 48 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -6359,158 +3741,115 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<i64>|inlined.1 (result i32)
-   i32.const 16
-  end
-  i32.mul
+  local.tee $6
+  i32.const 4
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $2
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<i64>|inlined.2 (result i32)
-   i32.const 16
-  end
-  i32.mul
+  i32.const 4
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $3
+  loop $continue|0
+   local.get $2
+   local.get $7
+   i32.ne
+   if
+    local.get $2
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=8
-     i32.const 1
+     local.get $3
+     local.get $2
+     i64.load
+     i64.store
+     local.get $3
+     local.get $2
+     i64.load
+     call $~lib/util/hash/hash64
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i64.load
-      i64.store
-      block $~lib/util/hash/HASH<i64>|inlined.2 (result i32)
-       local.get $9
-       i64.load
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash64
-       br $~lib/util/hash/HASH<i64>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $12
-      local.get $3
-      local.get $12
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $13
-      local.get $10
-      local.get $13
-      i32.load
-      i32.store offset=8
-      local.get $13
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<i64>|inlined.3 (result i32)
-       i32.const 16
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<i64>|inlined.4 (result i32)
-      i32.const 16
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=8
+     local.get $8
+     local.get $3
+     i32.store
+     local.get $3
+     i32.const 16
+     i32.add
+     local.set $3
     end
+    local.get $2
+    i32.const 16
+    i32.add
+    local.set $2
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i64>#add (; 79 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
-  (local $2 i64)
+ (func $~lib/set/Set<i64>#add (; 49 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<i64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.1
-  end
-  local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $1
+  call $~lib/util/hash/hash64
+  local.tee $3
   call $~lib/set/Set<i64>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -6544,23 +3883,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $5
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $5
-   end
-   block $~lib/set/ENTRY_SIZE<i64>|inlined.5 (result i32)
-    i32.const 16
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    i64.store
    local.get $0
@@ -6569,54 +3905,39 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $5
-   local.get $4
-   local.get $5
+   local.tee $0
    i32.load
    i32.store offset=8
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $2
    i32.store
   end
  )
- (func $~lib/set/Set<i64>#get:size (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<i64>#delete (; 81 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+ (func $~lib/set/Set<i64>#delete (; 50 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/hash64
   call $~lib/set/Set<i64>#find
-  local.set $3
-  local.get $3
+  local.tee $2
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -6631,17 +3952,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
   local.get $0
   i32.load offset=20
-  local.tee $6
-  local.get $5
-  local.get $6
+  local.tee $2
+  i32.const 4
+  local.get $2
   i32.gt_u
   select
   i32.ge_u
@@ -6660,1045 +3979,549 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<i64>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<i64> (; 82 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i64)
-  i32.const 0
+ (func $std/set/testNumeric<i64> (; 51 ;) (type $FUNCSIG$v)
+  (local $0 i64)
+  (local $1 i32)
   call $~lib/set/Set<i64>#constructor
-  local.set $0
-  block $break|0
-   i64.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i64.const 100
+   i64.lt_s
+   if
     local.get $1
-    i64.const 100
-    i64.lt_s
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<i64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#has
-    i32.eqz
     if
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i64.const 50
-   local.set $1
-   loop $repeat|1
+  i64.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i64.const 100
+   i64.lt_s
+   if
     local.get $1
-    i64.const 100
-    i64.lt_s
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#has
-    i32.eqz
     if
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i64.const 0
-   local.set $1
-   loop $repeat|2
+  i64.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i64.const 50
+   i64.lt_s
+   if
     local.get $1
-    i64.const 50
-    i64.lt_s
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i64.const 0
-   local.set $1
-   loop $repeat|3
+  i64.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i64.const 50
+   i64.lt_s
+   if
     local.get $1
-    i64.const 50
-    i64.lt_s
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<i64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<i64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<i64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $1
+  call $~lib/set/Set<i64>#clear
+  local.get $1
+  i32.load offset=20
+  if
+   i32.const 0
+   i32.const 128
+   i32.const 40
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/set/Set<u64>#constructor (; 52 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 24
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
   local.get $0
   call $~lib/set/Set<i64>#clear
   local.get $0
-  call $~lib/set/Set<i64>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 232
-   i32.const 40
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/rt/purerc/__release
  )
- (func $~lib/set/Set<u64>#clear (; 83 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $std/set/testNumeric<u64> (; 53 ;) (type $FUNCSIG$v)
+  (local $0 i64)
   (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
-  i32.store
-  local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
-  i32.store offset=4
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 64
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
-  i32.store offset=8
-  local.get $0
-  i32.const 4
-  i32.store offset=12
-  local.get $0
-  i32.const 0
-  i32.store offset=16
-  local.get $0
-  i32.const 0
-  i32.store offset=20
- )
- (func $~lib/set/Set<u64>#constructor (; 84 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 24
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<u64>#clear
-  local.get $0
- )
- (func $~lib/set/Set<u64>#find (; 85 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  i32.load
-  local.get $2
-  local.get $0
-  i32.load offset=4
-  i32.and
-  i32.const 4
-  i32.mul
-  i32.add
-  i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      i64.load
-      local.get $1
-      i64.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
-    end
-   end
-  end
-  i32.const 0
- )
- (func $~lib/set/Set<u64>#has (; 86 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.0
-  end
-  call $~lib/set/Set<u64>#find
-  i32.const 0
-  i32.ne
- )
- (func $~lib/set/Set<u64>#rehash (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.const 1
-  i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
-  local.get $2
-  f64.convert_i32_s
-  f64.const 2.6666666666666665
-  f64.mul
-  i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<u64>|inlined.1 (result i32)
-   i32.const 16
-  end
-  i32.mul
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $0
-  i32.load offset=8
-  local.set $6
-  local.get $6
-  local.get $0
-  i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<u64>|inlined.2 (result i32)
-   i32.const 16
-  end
-  i32.mul
-  i32.add
-  local.set $7
-  local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
-    if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=8
-     i32.const 1
-     i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      i64.load
-      i64.store
-      block $~lib/util/hash/HASH<u64>|inlined.2 (result i32)
-       local.get $9
-       i64.load
-       local.set $11
-       local.get $11
-       call $~lib/util/hash/hash64
-       br $~lib/util/hash/HASH<u64>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $12
-      local.get $3
-      local.get $12
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $13
-      local.get $10
-      local.get $13
-      i32.load
-      i32.store offset=8
-      local.get $13
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<u64>|inlined.3 (result i32)
-       i32.const 16
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<u64>|inlined.4 (result i32)
-      i32.const 16
-     end
-     i32.add
-     local.set $6
-     br $continue|0
-    end
-   end
-  end
-  local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
-  i32.load
-  call $~lib/rt/purerc/__retainRelease
-  i32.store
-  local.get $0
-  local.get $1
-  i32.store offset=4
-  local.get $0
-  local.tee $9
-  local.get $5
-  local.get $9
-  i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
-  i32.store offset=8
-  local.get $0
-  local.get $4
-  i32.store offset=12
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
-  local.get $5
-  call $~lib/rt/purerc/__release
- )
- (func $~lib/set/Set<u64>#add (; 88 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
-  (local $2 i64)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<u64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.1
-  end
-  local.set $3
-  local.get $0
-  local.get $1
-  local.get $3
-  call $~lib/set/Set<u64>#find
-  local.set $4
-  local.get $4
-  i32.eqz
-  if
-   local.get $0
-   i32.load offset=16
-   local.get $0
-   i32.load offset=12
-   i32.eq
-   if
-    local.get $0
-    local.get $0
-    i32.load offset=20
-    local.get $0
-    i32.load offset=12
-    f64.convert_i32_s
-    f64.const 0.75
-    f64.mul
-    i32.trunc_f64_s
-    i32.lt_s
-    if (result i32)
-     local.get $0
-     i32.load offset=4
-    else     
-     local.get $0
-     i32.load offset=4
-     i32.const 1
-     i32.shl
-     i32.const 1
-     i32.or
-    end
-    call $~lib/set/Set<u64>#rehash
-   end
-   local.get $0
-   i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $5
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $5
-   end
-   block $~lib/set/ENTRY_SIZE<u64>|inlined.5 (result i32)
-    i32.const 16
-   end
-   i32.mul
-   i32.add
-   local.set $4
-   local.get $4
-   local.get $1
-   i64.store
-   local.get $0
-   local.get $0
-   i32.load offset=20
-   i32.const 1
-   i32.add
-   i32.store offset=20
-   local.get $0
-   i32.load
-   local.get $3
-   local.get $0
-   i32.load offset=4
-   i32.and
-   i32.const 4
-   i32.mul
-   i32.add
-   local.set $5
-   local.get $4
-   local.get $5
-   i32.load
-   i32.store offset=8
-   local.get $5
-   local.get $4
-   i32.store
-  end
- )
- (func $~lib/set/Set<u64>#get:size (; 89 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<u64>#delete (; 90 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.3
-  end
-  call $~lib/set/Set<u64>#find
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   i32.const 0
-   return
-  end
-  local.get $3
-  local.get $3
-  i32.load offset=8
-  i32.const 1
-  i32.or
-  i32.store offset=8
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.const 1
-  i32.sub
-  i32.store offset=20
-  local.get $0
-  i32.load offset=4
-  i32.const 1
-  i32.shr_u
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.add
-  i32.const 4
-  local.tee $5
-  local.get $0
-  i32.load offset=20
-  local.tee $6
-  local.get $5
-  local.get $6
-  i32.gt_u
-  select
-  i32.ge_u
-  if (result i32)
-   local.get $0
-   i32.load offset=20
-   local.get $0
-   i32.load offset=12
-   f64.convert_i32_s
-   f64.const 0.75
-   f64.mul
-   i32.trunc_f64_s
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   local.get $0
-   local.get $4
-   call $~lib/set/Set<u64>#rehash
-  end
-  i32.const 1
- )
- (func $std/set/testNumeric<u64> (; 91 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i64)
-  i32.const 0
   call $~lib/set/Set<u64>#constructor
-  local.set $0
-  block $break|0
-   i64.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   i64.const 100
+   i64.lt_u
+   if
     local.get $1
-    i64.const 100
-    i64.lt_u
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
-    i32.eqz
+    call $~lib/set/Set<i64>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u64>#add
     local.get $0
+    call $~lib/set/Set<i64>#add
     local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i64>#has
     if
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   i64.const 50
-   local.set $1
-   loop $repeat|1
+  i64.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   i64.const 100
+   i64.lt_u
+   if
     local.get $1
-    i64.const 100
-    i64.lt_u
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u64>#has
+    call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u64>#add
     local.get $0
+    call $~lib/set/Set<i64>#add
     local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i64>#has
     if
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   i64.const 0
-   local.set $1
-   loop $repeat|2
+  i64.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   i64.const 50
+   i64.lt_u
+   if
     local.get $1
-    i64.const 50
-    i64.lt_u
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u64>#has
+    call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u64>#delete
-    drop
     local.get $0
+    call $~lib/set/Set<i64>#delete
     local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i64>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   i64.const 0
-   local.set $1
-   loop $repeat|3
+  i64.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   i64.const 50
+   i64.lt_u
+   if
     local.get $1
-    i64.const 50
-    i64.lt_u
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
-    i32.eqz
+    call $~lib/set/Set<i64>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u64>#add
     local.get $0
+    call $~lib/set/Set<i64>#add
     local.get $1
-    call $~lib/set/Set<u64>#has
+    local.get $0
+    call $~lib/set/Set<i64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
-    call $~lib/set/Set<u64>#delete
-    drop
     local.get $0
+    call $~lib/set/Set<i64>#delete
     local.get $1
-    call $~lib/set/Set<u64>#has
-    i32.eqz
-    i32.eqz
+    local.get $0
+    call $~lib/set/Set<i64>#has
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     i64.const 1
+     i64.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    i64.const 1
-    i64.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<u64>#clear
-  local.get $0
-  call $~lib/set/Set<u64>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i64>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f32>#clear (; 92 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<f32>#constructor (; 54 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 25
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 32
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -7706,105 +4529,62 @@
   local.get $0
   i32.const 0
   i32.store offset=20
- )
- (func $~lib/set/Set<f32>#constructor (; 93 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 25
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<f32>#clear
+  local.get $0
+  call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<f32>#find (; 94 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/set/Set<f32>#find (; 55 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   local.get $0
   i32.load
-  local.get $2
   local.get $0
   i32.load offset=4
+  local.get $2
   i32.and
-  i32.const 4
-  i32.mul
+  i32.const 2
+  i32.shl
   i32.add
   i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      f32.load
-      local.get $1
-      f32.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=4
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
+  local.set $0
+  loop $continue|0
+   local.get $0
+   if
+    local.get $0
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     f32.load
+     local.get $1
+     f32.eq
     end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=4
+    i32.const -2
+    i32.and
+    local.set $0
+    br $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/set/Set<f32>#has (; 95 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
+ (func $~lib/set/Set<f32>#has (; 56 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.0
-  end
+  local.get $1
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
   call $~lib/set/Set<f32>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<f32>#rehash (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<f32>#rehash (; 57 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7812,160 +4592,117 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<f32>|inlined.1 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  local.tee $6
+  i32.const 3
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $2
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<f32>|inlined.2 (result i32)
-   i32.const 8
-  end
-  i32.mul
+  i32.const 3
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $3
+  loop $continue|0
+   local.get $2
+   local.get $7
+   i32.ne
+   if
+    local.get $2
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=4
-     i32.const 1
+     local.get $3
+     local.get $2
+     f32.load
+     f32.store
+     local.get $3
+     local.get $2
+     f32.load
+     i32.reinterpret_f32
+     call $~lib/util/hash/hash32
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      f32.load
-      f32.store
-      block $~lib/util/hash/HASH<f32>|inlined.2 (result i32)
-       local.get $9
-       f32.load
-       local.set $11
-       local.get $11
-       i32.reinterpret_f32
-       call $~lib/util/hash/hash32
-       br $~lib/util/hash/HASH<f32>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $12
-      local.get $3
-      local.get $12
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $13
-      local.get $10
-      local.get $13
-      i32.load
-      i32.store offset=4
-      local.get $13
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<f32>|inlined.3 (result i32)
-       i32.const 8
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<f32>|inlined.4 (result i32)
-      i32.const 8
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=4
+     local.get $8
+     local.get $3
+     i32.store
+     local.get $3
+     i32.const 8
+     i32.add
+     local.set $3
     end
+    local.get $2
+    i32.const 8
+    i32.add
+    local.set $2
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f32>#add (; 97 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32)
-  (local $2 f32)
+ (func $~lib/set/Set<f32>#add (; 58 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<f32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.1
-  end
-  local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $1
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
+  local.tee $3
   call $~lib/set/Set<f32>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -7999,23 +4736,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $5
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $5
-   end
-   block $~lib/set/ENTRY_SIZE<f32>|inlined.5 (result i32)
-    i32.const 8
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 3
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    f32.store
    local.get $0
@@ -8024,55 +4758,40 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $5
-   local.get $4
-   local.get $5
+   local.tee $0
    i32.load
    i32.store offset=4
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $2
    i32.store
   end
  )
- (func $~lib/set/Set<f32>#get:size (; 98 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<f32>#delete (; 99 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
+ (func $~lib/set/Set<f32>#delete (; 59 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.3
-  end
+  local.get $1
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
   call $~lib/set/Set<f32>#find
-  local.set $3
-  local.get $3
+  local.tee $2
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -8087,17 +4806,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
   local.get $0
   i32.load offset=20
-  local.tee $6
-  local.get $5
-  local.get $6
+  local.tee $2
+  i32.const 4
+  local.get $2
   i32.gt_u
   select
   i32.ge_u
@@ -8116,319 +4833,274 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<f32>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<f32> (; 100 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 f32)
-  i32.const 0
+ (func $std/set/testNumeric<f32> (; 60 ;) (type $FUNCSIG$v)
+  (local $0 f32)
+  (local $1 i32)
   call $~lib/set/Set<f32>#constructor
-  local.set $0
-  block $break|0
-   f32.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   f32.const 100
+   f32.lt
+   if
     local.get $1
-    f32.const 100
-    f32.lt
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<f32>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#has
-    i32.eqz
     if
+     local.get $0
+     f32.const 1
+     f32.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    f32.const 1
-    f32.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   f32.const 50
-   local.set $1
-   loop $repeat|1
+  f32.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   f32.const 100
+   f32.lt
+   if
     local.get $1
-    f32.const 100
-    f32.lt
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<f32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#has
-    i32.eqz
     if
+     local.get $0
+     f32.const 1
+     f32.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    f32.const 1
-    f32.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   f32.const 0
-   local.set $1
-   loop $repeat|2
+  f32.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   f32.const 50
+   f32.lt
+   if
     local.get $1
-    f32.const 50
-    f32.lt
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<f32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     f32.const 1
+     f32.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    f32.const 1
-    f32.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   f32.const 0
-   local.set $1
-   loop $repeat|3
+  f32.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   f32.const 50
+   f32.lt
+   if
     local.get $1
-    f32.const 50
-    f32.lt
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<f32>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f32>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     f32.const 1
+     f32.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    f32.const 1
-    f32.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f32>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f32>#clear
-  local.get $0
-  call $~lib/set/Set<f32>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i8>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f64>#clear (; 101 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 16
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+ (func $~lib/set/Set<f64>#constructor (; 61 ;) (type $FUNCSIG$i) (result i32)
+  (local $0 i32)
+  i32.const 24
+  i32.const 26
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 0
   i32.store
   local.get $0
-  i32.const 4
-  i32.const 1
-  i32.sub
+  i32.const 0
   i32.store offset=4
   local.get $0
-  local.tee $1
-  block (result i32)
-   local.get $1
-   i32.load offset=8
-   call $~lib/rt/purerc/__release
-   i32.const 0
-   i32.const 64
-   call $~lib/arraybuffer/ArrayBuffer#constructor
-  end
+  i32.const 0
   i32.store offset=8
   local.get $0
-  i32.const 4
+  i32.const 0
   i32.store offset=12
   local.get $0
   i32.const 0
@@ -8436,105 +5108,62 @@
   local.get $0
   i32.const 0
   i32.store offset=20
- )
- (func $~lib/set/Set<f64>#constructor (; 102 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  block (result i32)
-   local.get $0
-   i32.eqz
-   if
-    i32.const 24
-    i32.const 26
-    call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
-    local.set $0
-   end
-   local.get $0
-   i32.const 0
-   i32.store
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-  end
-  call $~lib/set/Set<f64>#clear
+  local.get $0
+  call $~lib/set/Set<i64>#clear
   local.get $0
  )
- (func $~lib/set/Set<f64>#find (; 103 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/set/Set<f64>#find (; 62 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   local.get $0
   i32.load
-  local.get $2
   local.get $0
   i32.load offset=4
+  local.get $2
   i32.and
-  i32.const 4
-  i32.mul
+  i32.const 2
+  i32.shl
   i32.add
   i32.load
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $3
-    if
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.and
-     i32.eqz
-     if (result i32)
-      local.get $3
-      f64.load
-      local.get $1
-      f64.eq
-     else      
-      i32.const 0
-     end
-     if
-      local.get $3
-      return
-     end
-     local.get $3
-     i32.load offset=8
-     i32.const 1
-     i32.const -1
-     i32.xor
-     i32.and
-     local.set $3
-     br $continue|0
+  local.set $0
+  loop $continue|0
+   local.get $0
+   if
+    local.get $0
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    if (result i32)
+     i32.const 0
+    else     
+     local.get $0
+     f64.load
+     local.get $1
+     f64.eq
     end
+    if
+     local.get $0
+     return
+    end
+    local.get $0
+    i32.load offset=8
+    i32.const -2
+    i32.and
+    local.set $0
+    br $continue|0
    end
   end
   i32.const 0
  )
- (func $~lib/set/Set<f64>#has (; 104 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
+ (func $~lib/set/Set<f64>#has (; 63 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.0
-  end
+  local.get $1
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
   call $~lib/set/Set<f64>#find
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<f64>#rehash (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<f64>#rehash (; 64 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8542,160 +5171,117 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  (local $12 i32)
-  (local $13 i32)
   local.get $1
   i32.const 1
   i32.add
-  local.set $2
-  i32.const 0
-  local.get $2
-  i32.const 4
-  i32.mul
+  local.tee $2
+  i32.const 2
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $4
   local.get $2
   f64.convert_i32_s
   f64.const 2.6666666666666665
   f64.mul
   i32.trunc_f64_s
-  local.set $4
-  i32.const 0
-  local.get $4
-  block $~lib/set/ENTRY_SIZE<f64>|inlined.1 (result i32)
-   i32.const 16
-  end
-  i32.mul
+  local.tee $6
+  i32.const 4
+  i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
   local.get $0
   i32.load offset=8
-  local.set $6
-  local.get $6
+  local.tee $2
   local.get $0
   i32.load offset=16
-  block $~lib/set/ENTRY_SIZE<f64>|inlined.2 (result i32)
-   i32.const 16
-  end
-  i32.mul
+  i32.const 4
+  i32.shl
   i32.add
   local.set $7
   local.get $5
-  local.set $8
-  block $break|0
-   loop $continue|0
-    local.get $6
-    local.get $7
-    i32.ne
+  local.set $3
+  loop $continue|0
+   local.get $2
+   local.get $7
+   i32.ne
+   if
+    local.get $2
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
     if
-     local.get $6
-     local.set $9
-     local.get $9
-     i32.load offset=8
-     i32.const 1
+     local.get $3
+     local.get $2
+     f64.load
+     f64.store
+     local.get $3
+     local.get $2
+     f64.load
+     i64.reinterpret_f64
+     call $~lib/util/hash/hash64
+     local.get $1
      i32.and
-     i32.eqz
-     if
-      local.get $8
-      local.set $10
-      local.get $10
-      local.get $9
-      f64.load
-      f64.store
-      block $~lib/util/hash/HASH<f64>|inlined.2 (result i32)
-       local.get $9
-       f64.load
-       local.set $11
-       local.get $11
-       i64.reinterpret_f64
-       call $~lib/util/hash/hash64
-       br $~lib/util/hash/HASH<f64>|inlined.2
-      end
-      local.get $1
-      i32.and
-      local.set $12
-      local.get $3
-      local.get $12
-      i32.const 4
-      i32.mul
-      i32.add
-      local.set $13
-      local.get $10
-      local.get $13
-      i32.load
-      i32.store offset=8
-      local.get $13
-      local.get $8
-      i32.store
-      local.get $8
-      block $~lib/set/ENTRY_SIZE<f64>|inlined.3 (result i32)
-       i32.const 16
-      end
-      i32.add
-      local.set $8
-     end
-     local.get $6
-     block $~lib/set/ENTRY_SIZE<f64>|inlined.4 (result i32)
-      i32.const 16
-     end
+     i32.const 2
+     i32.shl
+     local.get $4
      i32.add
-     local.set $6
-     br $continue|0
+     local.tee $8
+     i32.load
+     i32.store offset=8
+     local.get $8
+     local.get $3
+     i32.store
+     local.get $3
+     i32.const 16
+     i32.add
+     local.set $3
     end
+    local.get $2
+    i32.const 16
+    i32.add
+    local.set $2
+    br $continue|0
    end
   end
   local.get $0
-  local.tee $9
-  local.get $3
-  local.get $9
+  local.get $4
+  local.get $0
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $9
   local.get $5
-  local.get $9
+  local.get $0
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
-  local.get $4
+  local.get $6
   i32.store offset=12
   local.get $0
   local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $3
-  call $~lib/rt/purerc/__release
+  local.get $4
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f64>#add (; 106 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64)
-  (local $2 f64)
+ (func $~lib/set/Set<f64>#add (; 65 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<f64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.1
-  end
-  local.set $3
   local.get $0
   local.get $1
-  local.get $3
+  local.get $1
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
+  local.tee $3
   call $~lib/set/Set<f64>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -8729,23 +5315,20 @@
    end
    local.get $0
    i32.load offset=8
-   block (result i32)
-    local.get $0
-    local.get $0
-    i32.load offset=16
-    local.tee $5
-    i32.const 1
-    i32.add
-    i32.store offset=16
-    local.get $5
-   end
-   block $~lib/set/ENTRY_SIZE<f64>|inlined.5 (result i32)
-    i32.const 16
-   end
-   i32.mul
+   local.set $2
+   local.get $0
+   local.get $0
+   i32.load offset=16
+   local.tee $4
+   i32.const 1
    i32.add
-   local.set $4
+   i32.store offset=16
    local.get $4
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   local.tee $2
    local.get $1
    f64.store
    local.get $0
@@ -8754,55 +5337,40 @@
    i32.const 1
    i32.add
    i32.store offset=20
+   local.get $2
    local.get $0
    i32.load
-   local.get $3
    local.get $0
    i32.load offset=4
+   local.get $3
    i32.and
-   i32.const 4
-   i32.mul
+   i32.const 2
+   i32.shl
    i32.add
-   local.set $5
-   local.get $4
-   local.get $5
+   local.tee $0
    i32.load
    i32.store offset=8
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $2
    i32.store
   end
  )
- (func $~lib/set/Set<f64>#get:size (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=20
- )
- (func $~lib/set/Set<f64>#delete (; 108 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
+ (func $~lib/set/Set<f64>#delete (; 66 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.3
-  end
+  local.get $1
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
   call $~lib/set/Set<f64>#find
-  local.set $3
-  local.get $3
+  local.tee $2
   i32.eqz
   if
-   i32.const 0
    return
   end
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -8817,17 +5385,15 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
   local.get $0
   i32.load offset=20
-  local.tee $6
-  local.get $5
-  local.get $6
+  local.tee $2
+  i32.const 4
+  local.get $2
   i32.gt_u
   select
   i32.ge_u
@@ -8846,289 +5412,258 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<f64>#rehash
   end
-  i32.const 1
  )
- (func $std/set/testNumeric<f64> (; 109 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 f64)
-  i32.const 0
+ (func $std/set/testNumeric<f64> (; 67 ;) (type $FUNCSIG$v)
+  (local $0 f64)
+  (local $1 i32)
   call $~lib/set/Set<f64>#constructor
-  local.set $0
-  block $break|0
-   f64.const 0
-   local.set $1
-   loop $repeat|0
+  local.set $1
+  loop $repeat|0
+   local.get $0
+   f64.const 100
+   f64.lt
+   if
     local.get $1
-    f64.const 100
-    f64.lt
-    i32.eqz
-    br_if $break|0
     local.get $0
-    local.get $1
     call $~lib/set/Set<f64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#has
-    i32.eqz
     if
+     local.get $0
+     f64.const 1
+     f64.add
+     local.set $0
+     br $repeat|0
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    f64.const 1
-    f64.add
-    local.set $1
-    br $repeat|0
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|1
-   f64.const 50
-   local.set $1
-   loop $repeat|1
+  f64.const 50
+  local.set $0
+  loop $repeat|1
+   local.get $0
+   f64.const 100
+   f64.lt
+   if
     local.get $1
-    f64.const 100
-    f64.lt
-    i32.eqz
-    br_if $break|1
     local.get $0
-    local.get $1
     call $~lib/set/Set<f64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#has
-    i32.eqz
     if
+     local.get $0
+     f64.const 1
+     f64.add
+     local.set $0
+     br $repeat|1
+    else     
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    f64.const 1
-    f64.add
-    local.set $1
-    br $repeat|1
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 100
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|2
-   f64.const 0
-   local.set $1
-   loop $repeat|2
+  f64.const 0
+  local.set $0
+  loop $repeat|2
+   local.get $0
+   f64.const 50
+   f64.lt
+   if
     local.get $1
-    f64.const 50
-    f64.lt
-    i32.eqz
-    br_if $break|2
     local.get $0
-    local.get $1
     call $~lib/set/Set<f64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     f64.const 1
+     f64.add
+     local.set $0
+     br $repeat|2
     end
-    local.get $1
-    f64.const 1
-    f64.add
-    local.set $1
-    br $repeat|2
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  block $break|3
-   f64.const 0
-   local.set $1
-   loop $repeat|3
+  f64.const 0
+  local.set $0
+  loop $repeat|3
+   local.get $0
+   f64.const 50
+   f64.lt
+   if
     local.get $1
-    f64.const 50
-    f64.lt
-    i32.eqz
-    br_if $break|3
     local.get $0
-    local.get $1
     call $~lib/set/Set<f64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#add
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#has
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#delete
-    drop
-    local.get $0
     local.get $1
+    local.get $0
     call $~lib/set/Set<f64>#has
-    i32.eqz
-    i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
      unreachable
+    else     
+     local.get $0
+     f64.const 1
+     f64.add
+     local.set $0
+     br $repeat|3
     end
-    local.get $1
-    f64.const 1
-    f64.add
-    local.set $1
-    br $repeat|3
     unreachable
    end
-   unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f64>#get:size
+  local.get $1
+  i32.load offset=20
   i32.const 50
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/set/Set<f64>#clear
-  local.get $0
-  call $~lib/set/Set<f64>#get:size
-  i32.const 0
-  i32.eq
-  i32.eqz
+  local.get $1
+  call $~lib/set/Set<i64>#clear
+  local.get $1
+  i32.load offset=20
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/purerc/__release
+  local.get $1
+  call $~lib/rt/pure/__release
  )
- (func $start:std/set (; 110 ;) (type $FUNCSIG$v)
+ (func $start (; 68 ;) (type $FUNCSIG$v)
   call $std/set/testNumeric<i8>
   call $std/set/testNumeric<u8>
   call $std/set/testNumeric<i16>
@@ -9140,28 +5675,1011 @@
   call $std/set/testNumeric<f32>
   call $std/set/testNumeric<f64>
  )
- (func $start (; 111 ;) (type $FUNCSIG$v)
-  call $start:std/set
+ (func $~lib/rt/tlsf/removeBlock (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $2
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $3
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $2
+   local.get $3
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=20
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  if
+   local.get $5
+   local.get $4
+   i32.store offset=20
+  end
+  local.get $4
+  if
+   local.get $4
+   local.get $5
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.get $1
+  i32.eq
+  if
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   local.get $4
+   i32.store offset=96
+   local.get $4
+   i32.eqz
+   if
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $3
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
  )
- (func $~lib/rt/purerc/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/insertBlock (; 70 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $2
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $3
+    i32.const 3
+    i32.and
+    local.get $2
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $3
+  i32.const 2
+  i32.and
+  if
+   local.get $1
+   i32.const 4
+   i32.sub
+   i32.load
+   local.tee $2
+   i32.load
+   local.tee $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $7
+   i32.const 1073741808
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    local.get $2
+    call $~lib/rt/tlsf/removeBlock
+    local.get $2
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $2
+   else    
+    local.get $1
+   end
+   local.set $1
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  i32.add
+  i32.ne
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $4
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $4
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $4
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $2
+  i32.store offset=20
+  local.get $2
+  if
+   local.get $2
+   local.get $1
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $3
+  i32.shl
+  i32.or
+  i32.store
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/addMemory (; 71 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
+  end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 72 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  i32.const 624
+  i32.const 0
+  i32.store
+  i32.const 2192
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 624
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 624
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 624
+  i32.const 2208
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 624
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 73 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 168
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 74 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 168
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 75 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 76 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 77 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 78 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/pure/increment (; 79 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
+  local.tee $1
+  i32.const -268435456
   i32.and
   local.get $1
   i32.const 1
   i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
+  i32.const -268435456
   i32.and
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 272
@@ -9176,13 +6694,11 @@
   i32.add
   i32.store offset=4
   local.get $0
-  call $~lib/rt/purerc/onIncrement
+  call $~lib/rt/pure/onIncrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 272
@@ -9192,31 +6708,28 @@
    unreachable
   end
  )
- (func $~lib/rt/purerc/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/pure/__retain (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 616
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/increment
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
- (func $~lib/rt/tlsf/freeBlock (; 114 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/tlsf/freeBlock (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
   i32.load
-  local.set $2
-  local.get $2
+  local.tee $2
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
-   i32.const 128
+   i32.const 168
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -9233,296 +6746,249 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
+ (func $~lib/rt/__typeinfo (; 82 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  i32.eqz
   if (result i32)
-   i32.const 1
-  else   
    local.get $0
-   local.get $1
+   i32.const 400
    i32.load
    i32.gt_u
+  else   
+   i32.const 1
   end
   if
-   i32.const 328
-   i32.const 384
-   i32.const 55
+   i32.const 320
+   i32.const 376
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
   local.get $0
-  i32.const 8
-  i32.mul
+  i32.const 3
+  i32.shl
+  i32.const 400
   i32.add
   i32.load
  )
- (func $~lib/memory/memory.copy (; 116 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 83 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
    local.get $2
    local.set $3
-   local.get $5
-   local.get $4
+   local.get $0
+   local.get $1
    i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
+   br_if $~lib/util/memory/memmove|inlined.0
+   local.get $0
+   local.get $1
    i32.lt_u
    if
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|0
-      loop $continue|0
-       local.get $5
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.set $3
-        block (result i32)
-         local.get $5
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $5
-         local.get $6
-        end
-        block (result i32)
-         local.get $4
-         local.tee $6
-         i32.const 1
-         i32.add
-         local.set $4
-         local.get $6
-        end
-        i32.load8_u
-        i32.store8
-        br $continue|0
-       end
-      end
-     end
-     block $break|1
-      loop $continue|1
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $5
-        local.get $4
-        i64.load
-        i64.store
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        i32.const 8
-        i32.add
-        local.set $5
-        local.get $4
-        i32.const 8
-        i32.add
-        local.set $4
-        br $continue|1
-       end
-      end
-     end
-    end
-    block $break|2
-     loop $continue|2
-      local.get $3
+     loop $continue|0
+      local.get $0
+      i32.const 7
+      i32.and
       if
-       block (result i32)
-        local.get $5
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $5
-        local.get $6
-       end
-       block (result i32)
-        local.get $4
-        local.tee $6
-        i32.const 1
-        i32.add
-        local.set $4
-        local.get $6
-       end
-       i32.load8_u
-       i32.store8
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
        local.get $3
        i32.const 1
        i32.sub
        local.set $3
-       br $continue|2
+       local.get $0
+       local.tee $2
+       i32.const 1
+       i32.add
+       local.set $0
+       local.get $1
+       local.tee $4
+       i32.const 1
+       i32.add
+       local.set $1
+       local.get $2
+       local.get $4
+       i32.load8_u
+       i32.store8
+       br $continue|0
+      end
+     end
+     loop $continue|1
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $1
+       i64.load
+       i64.store
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.set $3
+       local.get $0
+       i32.const 8
+       i32.add
+       local.set $0
+       local.get $1
+       i32.const 8
+       i32.add
+       local.set $1
+       br $continue|1
       end
      end
     end
+    loop $continue|2
+     local.get $3
+     if
+      local.get $0
+      local.tee $2
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $2
+      local.get $4
+      i32.load8_u
+      i32.store8
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.set $3
+      br $continue|2
+     end
+    end
    else    
-    local.get $4
+    local.get $1
     i32.const 7
     i32.and
-    local.get $5
+    local.get $0
     i32.const 7
     i32.and
     i32.eq
     if
-     block $break|3
-      loop $continue|3
-       local.get $5
-       local.get $3
-       i32.add
-       i32.const 7
-       i32.and
-       if
-        local.get $3
-        i32.eqz
-        if
-         br $~lib/util/memory/memmove|inlined.0
-        end
-        local.get $5
-        local.get $3
-        i32.const 1
-        i32.sub
-        local.tee $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i32.load8_u
-        i32.store8
-        br $continue|3
-       end
-      end
-     end
-     block $break|4
-      loop $continue|4
-       local.get $3
-       i32.const 8
-       i32.ge_u
-       if
-        local.get $3
-        i32.const 8
-        i32.sub
-        local.set $3
-        local.get $5
-        local.get $3
-        i32.add
-        local.get $4
-        local.get $3
-        i32.add
-        i64.load
-        i64.store
-        br $continue|4
-       end
-      end
-     end
-    end
-    block $break|5
-     loop $continue|5
+     loop $continue|3
+      local.get $0
       local.get $3
+      i32.add
+      i32.const 7
+      i32.and
       if
-       local.get $5
+       local.get $3
+       i32.eqz
+       br_if $~lib/util/memory/memmove|inlined.0
+       local.get $0
        local.get $3
        i32.const 1
        i32.sub
        local.tee $3
        i32.add
-       local.get $4
+       local.get $1
        local.get $3
        i32.add
        i32.load8_u
        i32.store8
-       br $continue|5
+       br $continue|3
       end
      end
+     loop $continue|4
+      local.get $3
+      i32.const 8
+      i32.ge_u
+      if
+       local.get $0
+       local.get $3
+       i32.const 8
+       i32.sub
+       local.tee $3
+       i32.add
+       local.get $1
+       local.get $3
+       i32.add
+       i64.load
+       i64.store
+       br $continue|4
+      end
+     end
+    end
+    loop $continue|5
+     local.get $3
+     if
+      local.get $0
+      local.get $3
+      i32.const 1
+      i32.sub
+      local.tee $3
+      i32.add
+      local.get $1
+      local.get $3
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $continue|5
+     end
     end
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 84 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
   local.tee $2
-  i32.const 64
-  i32.const 2
+  i32.sub
+  local.tee $1
+  i32.const 1
   i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
   i32.gt_u
   select
-  local.set $4
-  local.get $4
+  local.tee $3
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
+  local.tee $0
+  local.get $2
   local.get $1
   call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 85 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -9531,26 +6997,23 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 86 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $2
   i32.const 268435455
   i32.and
-  local.set $2
+  local.set $1
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
   i32.and
-  i32.eqz
-  i32.eqz
   if
    i32.const 0
    i32.const 272
@@ -9559,7 +7022,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $1
   i32.const 1
   i32.eq
   if
@@ -9567,29 +7030,23 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
+   call $~lib/rt/__visit_members
+   local.get $2
    i32.const -2147483648
    i32.and
-   i32.eqz
    if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
     global.get $~lib/rt/tlsf/ROOT
     local.get $0
     call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
    end
   else   
-   local.get $2
+   local.get $1
    i32.const 0
-   i32.gt_u
-   i32.eqz
+   i32.le_u
    if
     i32.const 0
     i32.const 272
@@ -9600,89 +7057,90 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
-   i32.eqz
    if
     local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
+    local.get $1
     i32.const 1
     i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
     i32.or
     i32.store offset=4
+   else    
+    local.get $0
     local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
     i32.const -2147483648
     i32.and
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
    end
   end
  )
- (func $~lib/rt/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/rt/pure/__retainRelease (; 87 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
   i32.ne
   if
-   global.get $~lib/builtins/HEAP_BASE
-   local.set $2
    local.get $0
-   local.get $2
+   i32.const 616
    i32.gt_u
    if
     local.get $0
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/increment
+    call $~lib/rt/pure/increment
    end
    local.get $1
-   local.get $2
+   i32.const 616
    i32.gt_u
    if
     local.get $1
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/decrement
+    call $~lib/rt/pure/decrement
    end
   end
   local.get $0
  )
- (func $~lib/rt/purerc/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 88 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 616
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $~lib/rt/purerc/markGray (; 122 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i8>#__visit_impl (; 89 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/rt/pure/markGray (; 90 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -9690,9 +7148,7 @@
   if
    local.get $0
    local.get $1
-   i32.const 1879048192
-   i32.const -1
-   i32.xor
+   i32.const -1879048193
    i32.and
    i32.const 268435456
    i32.or
@@ -9701,32 +7157,27 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 123 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 91 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
-  i32.const 1879048192
-  i32.const -1
-  i32.xor
+  i32.const -1879048193
   i32.and
-  i32.const 0
-  i32.or
   i32.store offset=4
   local.get $0
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 124 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 92 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 268435456
@@ -9739,13 +7190,11 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
-    i32.const 1879048192
-    i32.const -1
-    i32.xor
+    i32.const -1879048193
     i32.and
     i32.const 536870912
     i32.or
@@ -9754,16 +7203,15 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 125 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 93 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
-  local.set $1
-  local.get $1
+  local.tee $1
   i32.const 1879048192
   i32.and
   i32.const 536870912
@@ -9781,17 +7229,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/rt/pure/__visit (; 94 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  i32.const 616
   i32.lt_u
   if
    return
@@ -9799,515 +7245,148 @@
   local.get $0
   i32.const 16
   i32.sub
-  local.set $2
+  local.set $0
   block $break|0
    block $case5|0
     block $case4|0
      block $case3|0
       block $case2|0
        block $case1|0
-        block $case0|0
+        local.get $1
+        i32.const 1
+        i32.ne
+        if
          local.get $1
-         local.set $3
-         local.get $3
-         i32.const 1
-         i32.eq
-         br_if $case0|0
-         local.get $3
          i32.const 2
          i32.eq
          br_if $case1|0
-         local.get $3
-         i32.const 3
-         i32.eq
-         br_if $case2|0
-         local.get $3
-         i32.const 4
-         i32.eq
-         br_if $case3|0
-         local.get $3
-         i32.const 5
-         i32.eq
-         br_if $case4|0
+         block $tablify|0
+          local.get $1
+          i32.const 3
+          i32.sub
+          br_table $case2|0 $case3|0 $case4|0 $tablify|0
+         end
          br $case5|0
         end
-        block
-         local.get $2
-         call $~lib/rt/purerc/decrement
-         br $break|0
-         unreachable
-        end
-        unreachable
-       end
-       block
-        local.get $2
-        i32.load offset=4
-        i32.const 268435455
-        i32.and
-        i32.const 0
-        i32.gt_u
-        i32.eqz
-        if
-         i32.const 0
-         i32.const 272
-         i32.const 74
-         i32.const 17
-         call $~lib/builtins/abort
-         unreachable
-        end
-        local.get $2
-        local.get $2
-        i32.load offset=4
-        i32.const 1
-        i32.sub
-        i32.store offset=4
-        local.get $2
-        call $~lib/rt/purerc/markGray
+        local.get $0
+        call $~lib/rt/pure/decrement
         br $break|0
+       end
+       local.get $0
+       i32.load offset=4
+       i32.const 268435455
+       i32.and
+       i32.const 0
+       i32.le_u
+       if
+        i32.const 0
+        i32.const 272
+        i32.const 74
+        i32.const 17
+        call $~lib/builtins/abort
         unreachable
        end
-       unreachable
-      end
-      block
-       local.get $2
-       call $~lib/rt/purerc/scan
+       local.get $0
+       local.get $0
+       i32.load offset=4
+       i32.const 1
+       i32.sub
+       i32.store offset=4
+       local.get $0
+       call $~lib/rt/pure/markGray
        br $break|0
-       unreachable
-      end
-      unreachable
-     end
-     block
-      local.get $2
-      i32.load offset=4
-      local.set $3
-      local.get $3
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.const 268435455
-      i32.const -1
-      i32.xor
-      i32.and
-      i32.eq
-      i32.eqz
-      if
-       i32.const 0
-       i32.const 272
-       i32.const 85
-       i32.const 6
-       call $~lib/builtins/abort
-       unreachable
-      end
-      local.get $2
-      local.get $3
-      i32.const 1
-      i32.add
-      i32.store offset=4
-      local.get $3
-      i32.const 1879048192
-      i32.and
-      i32.const 0
-      i32.ne
-      if
-       local.get $2
-       call $~lib/rt/purerc/scanBlack
       end
+      local.get $0
+      call $~lib/rt/pure/scan
       br $break|0
+     end
+     local.get $0
+     i32.load offset=4
+     local.tee $1
+     i32.const -268435456
+     i32.and
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.const -268435456
+     i32.and
+     i32.ne
+     if
+      i32.const 0
+      i32.const 272
+      i32.const 85
+      i32.const 6
+      call $~lib/builtins/abort
       unreachable
      end
-     unreachable
-    end
-    block
-     local.get $2
-     call $~lib/rt/purerc/collectWhite
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.add
+     i32.store offset=4
+     local.get $1
+     i32.const 1879048192
+     i32.and
+     if
+      local.get $0
+      call $~lib/rt/pure/scanBlack
+     end
      br $break|0
-     unreachable
     end
-    unreachable
+    local.get $0
+    call $~lib/rt/pure/collectWhite
+    br $break|0
    end
    i32.const 0
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 272
-    i32.const 96
-    i32.const 24
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
- )
- (func $~lib/set/Set<i8>#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u8>#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i16>#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u16>#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i32>#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u32>#__visit_impl (; 132 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i64>#__visit_impl (; 133 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u64>#__visit_impl (; 134 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<f32>#__visit_impl (; 135 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<f64>#__visit_impl (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/builtins/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block
-  end
-  block $switch$1$leave
-   block $switch$1$case$28
-    block $switch$1$case$27
-     block $switch$1$case$26
-      block $switch$1$case$25
-       block $switch$1$case$24
-        block $switch$1$case$23
-         block $switch$1$case$22
-          block $switch$1$case$21
-           block $switch$1$case$20
-            block $switch$1$case$19
-             block $switch$1$case$16
-              block $switch$1$case$3
-               block $switch$1$default
-                local.get $0
-                i32.const 8
-                i32.sub
-                i32.load
-                br_table $switch$1$default $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $switch$1$case$19 $switch$1$case$20 $switch$1$case$21 $switch$1$case$22 $switch$1$case$23 $switch$1$case$24 $switch$1$case$25 $switch$1$case$26 $switch$1$case$27 $switch$1$case$28 $switch$1$default
-               end
-               block
-                block
-                 unreachable
-                 unreachable
-                end
-                unreachable
-                unreachable
-               end
-               unreachable
-              end
-              block
-               block
-                return
-                unreachable
-               end
-               unreachable
-               unreachable
-              end
-              unreachable
-             end
-             block
-              block
-               block
-                local.get $0
-                i32.load
-                local.tee $2
-                if
-                 local.get $2
-                 local.get $1
-                 call $~lib/rt/purerc/__visit
-                end
-                return
-                unreachable
-               end
-               unreachable
-               unreachable
-              end
-              unreachable
-              unreachable
-             end
-             unreachable
-            end
-            block
-             block
-              block
-               local.get $0
-               local.get $1
-               call $~lib/set/Set<i8>#__visit_impl
-               return
-               unreachable
-              end
-              unreachable
-              unreachable
-             end
-             unreachable
-             unreachable
-            end
-            unreachable
-           end
-           block
-            block
-             block
-              local.get $0
-              local.get $1
-              call $~lib/set/Set<u8>#__visit_impl
-              return
-              unreachable
-             end
-             unreachable
-             unreachable
-            end
-            unreachable
-            unreachable
-           end
-           unreachable
-          end
-          block
-           block
-            block
-             local.get $0
-             local.get $1
-             call $~lib/set/Set<i16>#__visit_impl
-             return
-             unreachable
-            end
-            unreachable
-            unreachable
-           end
-           unreachable
-           unreachable
-          end
-          unreachable
-         end
-         block
-          block
-           block
-            local.get $0
-            local.get $1
-            call $~lib/set/Set<u16>#__visit_impl
-            return
-            unreachable
-           end
-           unreachable
-           unreachable
-          end
-          unreachable
-          unreachable
-         end
-         unreachable
-        end
-        block
-         block
-          block
-           local.get $0
-           local.get $1
-           call $~lib/set/Set<i32>#__visit_impl
-           return
-           unreachable
-          end
-          unreachable
-          unreachable
-         end
-         unreachable
-         unreachable
-        end
-        unreachable
-       end
-       block
-        block
-         block
-          local.get $0
-          local.get $1
-          call $~lib/set/Set<u32>#__visit_impl
-          return
-          unreachable
-         end
-         unreachable
-         unreachable
-        end
-        unreachable
-        unreachable
-       end
-       unreachable
-      end
-      block
-       block
-        block
-         local.get $0
-         local.get $1
-         call $~lib/set/Set<i64>#__visit_impl
-         return
-         unreachable
-        end
-        unreachable
-        unreachable
-       end
-       unreachable
-       unreachable
-      end
-      unreachable
-     end
-     block
-      block
-       block
-        local.get $0
-        local.get $1
-        call $~lib/set/Set<u64>#__visit_impl
-        return
-        unreachable
-       end
-       unreachable
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-    end
-    block
-     block
-      block
-       local.get $0
-       local.get $1
-       call $~lib/set/Set<f32>#__visit_impl
-       return
-       unreachable
-      end
-      unreachable
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-   end
-   block
-    block
-     block
-      local.get $0
-      local.get $1
-      call $~lib/set/Set<f64>#__visit_impl
-      return
-      unreachable
-     end
-     unreachable
-     unreachable
-    end
-    unreachable
-    unreachable
-   end
+   i32.const 272
+   i32.const 96
+   i32.const 24
+   call $~lib/builtins/abort
    unreachable
   end
  )
- (func $null (; 138 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/__visit_members (; 95 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  block $folding-inner0
+   block $switch$1$case$28
+    block
+     block $switch$1$case$16
+      block $switch$1$case$3
+       block $switch$1$default
+        local.get $0
+        i32.const 8
+        i32.sub
+        i32.load
+        i32.const 1
+        i32.sub
+        br_table $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$3 $switch$1$case$16 $switch$1$case$3 $switch$1$case$3 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $switch$1$case$28 $switch$1$default
+       end
+       unreachable
+      end
+      return
+     end
+     local.get $0
+     i32.load
+     local.tee $0
+     if
+      local.get $0
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     return
+     unreachable
+    end
+    unreachable
+   end
+   local.get $0
+   local.get $1
+   call $~lib/set/Set<i8>#__visit_impl
+   return
+  end
+  local.get $0
+  local.get $1
+  call $~lib/set/Set<i8>#__visit_impl
+ )
+ (func $null (; 96 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat
index 87ae76e2..df257431 100644
--- a/tests/compiler/std/set.untouched.wat
+++ b/tests/compiler/std/set.untouched.wat
@@ -4,9 +4,9 @@
  (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
  (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iij (func (param i32 i64) (result i32)))
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$iiji (func (param i32 i64 i32) (result i32)))
@@ -18,1373 +18,30 @@
  (type $FUNCSIG$iidi (func (param i32 f64 i32) (result i32)))
  (type $FUNCSIG$vid (func (param i32 f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
  (memory $0 1)
  (data (i32.const 8) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00")
  (data (i32.const 56) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
- (data (i32.const 112) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 160) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 216) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00")
- (data (i32.const 256) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 312) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 368) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 424) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00")
+ (data (i32.const 112) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00s\00t\00d\00/\00s\00e\00t\00.\00t\00s\00")
+ (data (i32.const 152) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 200) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 256) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 304) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 360) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 400) "\1a\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00\1a\00\00\00\00\00\00\00*\00\00\00\00\00\00\00*\00\00\00\00\00\00\00J\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00J\00\00\00\00\00\00\00\8a\00\00\00\00\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 424))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 640))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 400))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 616))
  (export "memory" (memory $0))
  (start $start)
- (func $~lib/rt/tlsf/removeBlock (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
-  local.get $3
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.const 4
-   i32.shr_u
-   local.set $5
-  else   
-   i32.const 31
-   local.get $3
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $4
-  end
-  local.get $4
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $5
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
-  i32.load offset=20
-  local.set $7
-  local.get $6
-  if
-   local.get $6
-   local.get $7
-   i32.store offset=20
-  end
-  local.get $7
-  if
-   local.get $7
-   local.get $6
-   i32.store offset=16
-  end
-  local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
-   i32.const 4
-   i32.shl
-   local.get $8
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
-   i32.eqz
-   if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $4
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
-  i32.load
-  local.set $5
-  local.get $5
-  i32.const 1
-  i32.and
-  if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $3
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $2
-    i32.const 3
-    i32.and
-    local.get $3
-    i32.or
-    local.tee $2
-    i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $2
-  i32.const 2
-  i32.and
-  if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
-   i32.load
-   local.set $6
-   local.get $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $7
-   local.get $7
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $3
-    call $~lib/rt/tlsf/removeBlock
-    local.get $3
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $2
-    i32.store
-    local.get $3
-    local.set $1
-   end
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $8
-  local.get $8
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $8
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $8
-  i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $8
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
-   i32.const 4
-   i32.shr_u
-   local.set $10
-  else   
-   i32.const 31
-   local.get $8
-   i32.clz
-   i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $9
-  end
-  local.get $9
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $10
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $11
-  i32.store offset=20
-  local.get $11
-  if
-   local.get $11
-   local.get $1
-   i32.store offset=16
-  end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
-  i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 6 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 7 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 176
-   i32.const 128
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 128
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 10 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 128
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 128
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.fill (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.fill (; 4 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1647,7 +304,7 @@
    end
   end
  )
- (func $~lib/arraybuffer/ArrayBuffer#constructor (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/arraybuffer/ArrayBuffer#constructor (; 5 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
   i32.const 1073741808
@@ -1669,16 +326,16 @@
   local.get $1
   call $~lib/memory/memory.fill
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/set/Set<i8>#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i8>#clear (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -1694,7 +351,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -1710,7 +367,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i8>#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i8>#constructor (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -1718,7 +375,7 @@
     i32.const 24
     i32.const 17
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -1744,14 +401,14 @@
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash8 (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/hash/hash8 (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   i32.const -2128831035
   local.get $0
   i32.xor
   i32.const 16777619
   i32.mul
  )
- (func $~lib/set/Set<i8>#find (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<i8>#find (; 9 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -1802,7 +459,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i8>#has (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i8>#has (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -1821,7 +478,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i8>#rehash (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i8>#rehash (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -1937,7 +594,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -1947,7 +604,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -1957,11 +614,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i8>#add (; 22 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i8>#add (; 12 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2060,11 +717,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<i8>#get:size (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i8>#get:size (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<i8>#delete (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i8>#delete (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2140,7 +797,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<i8> (; 25 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i8> (; 15 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -2162,7 +819,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -2177,7 +834,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -2199,7 +856,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -2220,7 +877,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -2235,7 +892,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -2257,7 +914,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -2278,7 +935,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -2295,7 +952,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -2317,7 +974,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -2339,7 +996,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -2354,7 +1011,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -2371,7 +1028,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -2393,7 +1050,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -2408,23 +1065,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u8>#clear (; 26 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<u8>#clear (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -2440,7 +1097,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -2456,7 +1113,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<u8>#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u8>#constructor (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -2464,7 +1121,7 @@
     i32.const 24
     i32.const 18
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -2490,7 +1147,7 @@
   call $~lib/set/Set<u8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u8>#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<u8>#find (; 18 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -2539,7 +1196,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<u8>#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u8>#has (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -2556,7 +1213,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u8>#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u8>#rehash (; 20 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2672,7 +1329,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -2682,7 +1339,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -2692,11 +1349,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u8>#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u8>#add (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2793,11 +1450,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<u8>#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u8>#get:size (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<u8>#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u8>#delete (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2871,7 +1528,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<u8> (; 34 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u8> (; 24 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -2893,7 +1550,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -2908,7 +1565,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -2930,7 +1587,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -2951,7 +1608,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -2966,7 +1623,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -2988,7 +1645,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -3009,7 +1666,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -3026,7 +1683,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -3048,7 +1705,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -3070,7 +1727,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -3085,7 +1742,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -3102,7 +1759,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -3124,7 +1781,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -3139,23 +1796,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i16>#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i16>#clear (; 25 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -3171,7 +1828,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -3187,7 +1844,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i16>#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i16>#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -3195,7 +1852,7 @@
     i32.const 24
     i32.const 19
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -3221,7 +1878,7 @@
   call $~lib/set/Set<i16>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash16 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/hash/hash16 (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   i32.const -2128831035
   local.set $1
@@ -3243,7 +1900,7 @@
   local.set $1
   local.get $1
  )
- (func $~lib/set/Set<i16>#find (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<i16>#find (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -3294,7 +1951,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i16>#has (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i16>#has (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -3313,7 +1970,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i16>#rehash (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i16>#rehash (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3429,7 +2086,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -3439,7 +2096,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -3449,11 +2106,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i16>#add (; 41 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i16>#add (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3552,11 +2209,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<i16>#get:size (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i16>#get:size (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<i16>#delete (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i16>#delete (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3632,7 +2289,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<i16> (; 44 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i16> (; 34 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -3654,7 +2311,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -3669,7 +2326,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -3691,7 +2348,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -3712,7 +2369,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -3727,7 +2384,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -3749,7 +2406,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -3770,7 +2427,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -3787,7 +2444,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -3809,7 +2466,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -3831,7 +2488,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -3846,7 +2503,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -3863,7 +2520,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -3885,7 +2542,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -3900,23 +2557,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u16>#clear (; 45 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<u16>#clear (; 35 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -3932,7 +2589,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -3948,7 +2605,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<u16>#constructor (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u16>#constructor (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -3956,7 +2613,7 @@
     i32.const 24
     i32.const 20
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -3982,7 +2639,7 @@
   call $~lib/set/Set<u16>#clear
   local.get $0
  )
- (func $~lib/set/Set<u16>#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<u16>#find (; 37 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -4031,7 +2688,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<u16>#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u16>#has (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -4048,7 +2705,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u16>#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u16>#rehash (; 39 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4164,7 +2821,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -4174,7 +2831,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -4184,11 +2841,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u16>#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u16>#add (; 40 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4285,11 +2942,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<u16>#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u16>#get:size (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<u16>#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u16>#delete (; 42 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4363,7 +3020,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<u16> (; 53 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u16> (; 43 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -4385,7 +3042,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -4400,7 +3057,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -4422,7 +3079,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -4443,7 +3100,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -4458,7 +3115,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -4480,7 +3137,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -4501,7 +3158,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -4518,7 +3175,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -4540,7 +3197,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -4562,7 +3219,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -4577,7 +3234,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -4594,7 +3251,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -4616,7 +3273,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -4631,23 +3288,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i32>#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i32>#clear (; 44 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -4663,7 +3320,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -4679,7 +3336,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i32>#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i32>#constructor (; 45 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -4687,7 +3344,7 @@
     i32.const 24
     i32.const 21
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -4713,7 +3370,7 @@
   call $~lib/set/Set<i32>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash32 (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/hash/hash32 (; 46 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   i32.const -2128831035
   local.set $1
@@ -4755,7 +3412,7 @@
   local.set $1
   local.get $1
  )
- (func $~lib/set/Set<i32>#find (; 57 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<i32>#find (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -4802,7 +3459,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i32>#has (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i32>#has (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -4817,7 +3474,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i32>#rehash (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i32>#rehash (; 49 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -4933,7 +3590,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -4943,7 +3600,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -4953,11 +3610,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i32>#add (; 60 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i32>#add (; 50 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5052,11 +3709,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<i32>#get:size (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i32>#get:size (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<i32>#delete (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<i32>#delete (; 52 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5128,7 +3785,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<i32> (; 63 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i32> (; 53 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -5150,7 +3807,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -5165,7 +3822,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -5187,7 +3844,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -5208,7 +3865,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -5223,7 +3880,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -5245,7 +3902,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -5266,7 +3923,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -5283,7 +3940,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -5305,7 +3962,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -5327,7 +3984,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -5342,7 +3999,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -5359,7 +4016,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -5381,7 +4038,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -5396,23 +4053,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u32>#clear (; 64 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<u32>#clear (; 54 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -5428,7 +4085,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -5444,7 +4101,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<u32>#constructor (; 65 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u32>#constructor (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -5452,7 +4109,7 @@
     i32.const 24
     i32.const 22
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -5478,7 +4135,7 @@
   call $~lib/set/Set<u32>#clear
   local.get $0
  )
- (func $~lib/set/Set<u32>#find (; 66 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<u32>#find (; 56 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -5525,7 +4182,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<u32>#has (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u32>#has (; 57 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
@@ -5540,7 +4197,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u32>#rehash (; 68 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u32>#rehash (; 58 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5656,7 +4313,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -5666,7 +4323,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -5676,11 +4333,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u32>#add (; 69 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u32>#add (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5775,11 +4432,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<u32>#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u32>#get:size (; 60 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<u32>#delete (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/set/Set<u32>#delete (; 61 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -5851,7 +4508,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<u32> (; 72 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u32> (; 62 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   i32.const 0
@@ -5873,7 +4530,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -5888,7 +4545,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -5910,7 +4567,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -5931,7 +4588,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -5946,7 +4603,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -5968,7 +4625,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -5989,7 +4646,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -6006,7 +4663,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -6028,7 +4685,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -6050,7 +4707,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -6065,7 +4722,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -6082,7 +4739,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -6104,7 +4761,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -6119,23 +4776,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i64>#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i64>#clear (; 63 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -6151,7 +4808,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 64
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -6167,7 +4824,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<i64>#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i64>#constructor (; 64 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -6175,7 +4832,7 @@
     i32.const 24
     i32.const 23
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -6201,7 +4858,7 @@
   call $~lib/set/Set<i64>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash64 (; 75 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/hash/hash64 (; 65 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -6289,7 +4946,7 @@
   local.set $3
   local.get $3
  )
- (func $~lib/set/Set<i64>#find (; 76 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/set/Set<i64>#find (; 66 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -6336,7 +4993,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i64>#has (; 77 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
+ (func $~lib/set/Set<i64>#has (; 67 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
   (local $2 i64)
   local.get $0
   local.get $1
@@ -6351,7 +5008,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<i64>#rehash (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<i64>#rehash (; 68 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -6468,7 +5125,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -6478,7 +5135,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -6488,11 +5145,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<i64>#add (; 79 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
+ (func $~lib/set/Set<i64>#add (; 69 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
   (local $2 i64)
   (local $3 i32)
   (local $4 i32)
@@ -6588,11 +5245,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<i64>#get:size (; 80 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<i64>#get:size (; 70 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<i64>#delete (; 81 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
+ (func $~lib/set/Set<i64>#delete (; 71 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
   (local $2 i64)
   (local $3 i32)
   (local $4 i32)
@@ -6665,7 +5322,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<i64> (; 82 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<i64> (; 72 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i64)
   i32.const 0
@@ -6687,7 +5344,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -6702,7 +5359,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -6724,7 +5381,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -6745,7 +5402,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -6760,7 +5417,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -6782,7 +5439,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -6803,7 +5460,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -6820,7 +5477,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -6842,7 +5499,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -6864,7 +5521,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -6879,7 +5536,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -6896,7 +5553,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -6918,7 +5575,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -6933,23 +5590,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u64>#clear (; 83 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<u64>#clear (; 73 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -6965,7 +5622,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 64
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -6981,7 +5638,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<u64>#constructor (; 84 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u64>#constructor (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -6989,7 +5646,7 @@
     i32.const 24
     i32.const 24
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -7015,7 +5672,7 @@
   call $~lib/set/Set<u64>#clear
   local.get $0
  )
- (func $~lib/set/Set<u64>#find (; 85 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/set/Set<u64>#find (; 75 ;) (type $FUNCSIG$iiji) (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -7062,7 +5719,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<u64>#has (; 86 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
+ (func $~lib/set/Set<u64>#has (; 76 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
   (local $2 i64)
   local.get $0
   local.get $1
@@ -7077,7 +5734,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<u64>#rehash (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<u64>#rehash (; 77 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7194,7 +5851,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -7204,7 +5861,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -7214,11 +5871,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<u64>#add (; 88 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
+ (func $~lib/set/Set<u64>#add (; 78 ;) (type $FUNCSIG$vij) (param $0 i32) (param $1 i64)
   (local $2 i64)
   (local $3 i32)
   (local $4 i32)
@@ -7314,11 +5971,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<u64>#get:size (; 89 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<u64>#get:size (; 79 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<u64>#delete (; 90 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
+ (func $~lib/set/Set<u64>#delete (; 80 ;) (type $FUNCSIG$iij) (param $0 i32) (param $1 i64) (result i32)
   (local $2 i64)
   (local $3 i32)
   (local $4 i32)
@@ -7391,7 +6048,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<u64> (; 91 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<u64> (; 81 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i64)
   i32.const 0
@@ -7413,7 +6070,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -7428,7 +6085,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -7450,7 +6107,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -7471,7 +6128,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -7486,7 +6143,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -7508,7 +6165,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -7529,7 +6186,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -7546,7 +6203,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -7568,7 +6225,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -7590,7 +6247,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -7605,7 +6262,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -7622,7 +6279,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -7644,7 +6301,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -7659,23 +6316,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f32>#clear (; 92 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<f32>#clear (; 82 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -7691,7 +6348,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 32
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -7707,7 +6364,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<f32>#constructor (; 93 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<f32>#constructor (; 83 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -7715,7 +6372,7 @@
     i32.const 24
     i32.const 25
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -7741,7 +6398,7 @@
   call $~lib/set/Set<f32>#clear
   local.get $0
  )
- (func $~lib/set/Set<f32>#find (; 94 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/set/Set<f32>#find (; 84 ;) (type $FUNCSIG$iifi) (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -7788,7 +6445,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<f32>#has (; 95 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
+ (func $~lib/set/Set<f32>#has (; 85 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
   (local $2 f32)
   local.get $0
   local.get $1
@@ -7804,7 +6461,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<f32>#rehash (; 96 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<f32>#rehash (; 86 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7922,7 +6579,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -7932,7 +6589,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -7942,11 +6599,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f32>#add (; 97 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32)
+ (func $~lib/set/Set<f32>#add (; 87 ;) (type $FUNCSIG$vif) (param $0 i32) (param $1 f32)
   (local $2 f32)
   (local $3 i32)
   (local $4 i32)
@@ -8043,11 +6700,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<f32>#get:size (; 98 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<f32>#get:size (; 88 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<f32>#delete (; 99 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
+ (func $~lib/set/Set<f32>#delete (; 89 ;) (type $FUNCSIG$iif) (param $0 i32) (param $1 f32) (result i32)
   (local $2 f32)
   (local $3 i32)
   (local $4 i32)
@@ -8121,7 +6778,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<f32> (; 100 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<f32> (; 90 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 f32)
   i32.const 0
@@ -8143,7 +6800,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -8158,7 +6815,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -8180,7 +6837,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -8201,7 +6858,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -8216,7 +6873,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -8238,7 +6895,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -8259,7 +6916,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -8276,7 +6933,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -8298,7 +6955,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -8320,7 +6977,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -8335,7 +6992,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -8352,7 +7009,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -8374,7 +7031,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -8389,23 +7046,23 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f64>#clear (; 101 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<f64>#clear (; 91 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   local.tee $1
   block (result i32)
    local.get $1
    i32.load
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 16
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -8421,7 +7078,7 @@
   block (result i32)
    local.get $1
    i32.load offset=8
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    i32.const 64
    call $~lib/arraybuffer/ArrayBuffer#constructor
@@ -8437,7 +7094,7 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/set/Set<f64>#constructor (; 102 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<f64>#constructor (; 92 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   block (result i32)
    local.get $0
    i32.eqz
@@ -8445,7 +7102,7 @@
     i32.const 24
     i32.const 26
     call $~lib/rt/tlsf/__alloc
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $0
    end
    local.get $0
@@ -8471,7 +7128,7 @@
   call $~lib/set/Set<f64>#clear
   local.get $0
  )
- (func $~lib/set/Set<f64>#find (; 103 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+ (func $~lib/set/Set<f64>#find (; 93 ;) (type $FUNCSIG$iidi) (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.load
@@ -8518,7 +7175,7 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<f64>#has (; 104 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/set/Set<f64>#has (; 94 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 f64)
   local.get $0
   local.get $1
@@ -8534,7 +7191,7 @@
   i32.const 0
   i32.ne
  )
- (func $~lib/set/Set<f64>#rehash (; 105 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/set/Set<f64>#rehash (; 95 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8652,7 +7309,7 @@
   local.get $3
   local.get $9
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $1
@@ -8662,7 +7319,7 @@
   local.get $5
   local.get $9
   i32.load offset=8
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store offset=8
   local.get $0
   local.get $4
@@ -8672,11 +7329,11 @@
   i32.load offset=20
   i32.store offset=16
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/set/Set<f64>#add (; 106 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64)
+ (func $~lib/set/Set<f64>#add (; 96 ;) (type $FUNCSIG$vid) (param $0 i32) (param $1 f64)
   (local $2 f64)
   (local $3 i32)
   (local $4 i32)
@@ -8773,11 +7430,11 @@
    i32.store
   end
  )
- (func $~lib/set/Set<f64>#get:size (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/set/Set<f64>#get:size (; 97 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=20
  )
- (func $~lib/set/Set<f64>#delete (; 108 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/set/Set<f64>#delete (; 98 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 f64)
   (local $3 i32)
   (local $4 i32)
@@ -8851,7 +7508,7 @@
   end
   i32.const 1
  )
- (func $std/set/testNumeric<f64> (; 109 ;) (type $FUNCSIG$v)
+ (func $std/set/testNumeric<f64> (; 99 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 f64)
   i32.const 0
@@ -8873,7 +7530,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 6
      i32.const 4
      call $~lib/builtins/abort
@@ -8888,7 +7545,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 8
      i32.const 4
      call $~lib/builtins/abort
@@ -8910,7 +7567,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 10
    i32.const 2
    call $~lib/builtins/abort
@@ -8931,7 +7588,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 14
      i32.const 4
      call $~lib/builtins/abort
@@ -8946,7 +7603,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 16
      i32.const 4
      call $~lib/builtins/abort
@@ -8968,7 +7625,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 18
    i32.const 2
    call $~lib/builtins/abort
@@ -8989,7 +7646,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 22
      i32.const 4
      call $~lib/builtins/abort
@@ -9006,7 +7663,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 24
      i32.const 4
      call $~lib/builtins/abort
@@ -9028,7 +7685,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 26
    i32.const 2
    call $~lib/builtins/abort
@@ -9050,7 +7707,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 30
      i32.const 4
      call $~lib/builtins/abort
@@ -9065,7 +7722,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 32
      i32.const 4
      call $~lib/builtins/abort
@@ -9082,7 +7739,7 @@
     i32.eqz
     if
      i32.const 0
-     i32.const 232
+     i32.const 128
      i32.const 34
      i32.const 4
      call $~lib/builtins/abort
@@ -9104,7 +7761,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 36
    i32.const 2
    call $~lib/builtins/abort
@@ -9119,16 +7776,16 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 232
+   i32.const 128
    i32.const 40
    i32.const 2
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $start:std/set (; 110 ;) (type $FUNCSIG$v)
+ (func $start:std/set (; 100 ;) (type $FUNCSIG$v)
   call $std/set/testNumeric<i8>
   call $std/set/testNumeric<u8>
   call $std/set/testNumeric<i16>
@@ -9140,10 +7797,1353 @@
   call $std/set/testNumeric<f32>
   call $std/set/testNumeric<f64>
  )
- (func $start (; 111 ;) (type $FUNCSIG$v)
+ (func $start (; 101 ;) (type $FUNCSIG$v)
   call $start:std/set
  )
- (func $~lib/rt/purerc/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 102 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $4
+   local.get $3
+   i32.const 4
+   i32.shr_u
+   local.set $5
+  else   
+   i32.const 31
+   local.get $3
+   i32.clz
+   i32.sub
+   local.set $4
+   local.get $3
+   local.get $4
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $5
+   local.get $4
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $4
+  end
+  local.get $4
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $5
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=16
+  local.set $6
+  local.get $1
+  i32.load offset=20
+  local.set $7
+  local.get $6
+  if
+   local.get $6
+   local.get $7
+   i32.store offset=20
+  end
+  local.get $7
+  if
+   local.get $7
+   local.get $6
+   i32.store offset=16
+  end
+  local.get $1
+  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
+   local.get $0
+   local.set $10
+   local.get $4
+   local.set $9
+   local.get $5
+   local.set $8
+   local.get $10
+   local.get $9
+   i32.const 4
+   i32.shl
+   local.get $8
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  i32.eq
+  if
+   block $~lib/rt/tlsf/SETHEAD|inlined.1
+    local.get $0
+    local.set $11
+    local.get $4
+    local.set $10
+    local.get $5
+    local.set $9
+    local.get $7
+    local.set $8
+    local.get $11
+    local.get $10
+    i32.const 4
+    i32.shl
+    local.get $9
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $8
+    i32.store offset=96
+   end
+   local.get $7
+   i32.eqz
+   if
+    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
+     local.get $0
+     local.set $9
+     local.get $4
+     local.set $8
+     local.get $9
+     local.get $8
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $8
+    block $~lib/rt/tlsf/SETSL|inlined.1
+     local.get $0
+     local.set $11
+     local.get $4
+     local.set $10
+     local.get $8
+     i32.const 1
+     local.get $5
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     local.tee $8
+     local.set $9
+     local.get $11
+     local.get $10
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $9
+     i32.store offset=4
+    end
+    local.get $8
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $4
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 103 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
+   local.get $1
+   local.set $3
+   local.get $3
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.load
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+  end
+  local.set $4
+  local.get $4
+  i32.load
+  local.set $5
+  local.get $5
+  i32.const 1
+  i32.and
+  if
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $3
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $2
+    i32.const 3
+    i32.and
+    local.get $3
+    i32.or
+    local.tee $2
+    i32.store
+    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
+     local.get $1
+     local.set $6
+     local.get $6
+     i32.const 16
+     i32.add
+     local.get $6
+     i32.load
+     i32.const 3
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.add
+    end
+    local.set $4
+    local.get $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $2
+  i32.const 2
+  i32.and
+  if
+   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
+    local.get $1
+    local.set $3
+    local.get $3
+    i32.const 4
+    i32.sub
+    i32.load
+   end
+   local.set $3
+   local.get $3
+   i32.load
+   local.set $6
+   local.get $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $7
+   local.get $7
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $3
+    call $~lib/rt/tlsf/removeBlock
+    local.get $3
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $2
+    i32.store
+    local.get $3
+    local.set $1
+   end
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $8
+  local.get $8
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $8
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $8
+  i32.add
+  local.get $4
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $8
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $9
+   local.get $8
+   i32.const 4
+   i32.shr_u
+   local.set $10
+  else   
+   i32.const 31
+   local.get $8
+   i32.clz
+   i32.sub
+   local.set $9
+   local.get $8
+   local.get $9
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $10
+   local.get $9
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $9
+  end
+  local.get $9
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $10
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   local.get $10
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 4
+   i32.shl
+   local.get $7
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  local.set $11
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $11
+  i32.store offset=20
+  local.get $11
+  if
+   local.get $11
+   local.get $1
+   i32.store offset=16
+  end
+  block $~lib/rt/tlsf/SETHEAD|inlined.2
+   local.get $0
+   local.set $12
+   local.get $9
+   local.set $3
+   local.get $10
+   local.set $6
+   local.get $1
+   local.set $7
+   local.get $12
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $6
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=96
+  end
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $9
+  i32.shl
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETSL|inlined.2
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
+    local.get $0
+    local.set $13
+    local.get $9
+    local.set $12
+    local.get $13
+    local.get $12
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=4
+   end
+   i32.const 1
+   local.get $10
+   i32.shl
+   i32.or
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=4
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 104 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 105 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.0
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.0
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 106 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 216
+   i32.const 168
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 107 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 168
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 108 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 109 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 110 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 168
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 168
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 111 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/pure/increment (; 112 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9176,7 +9176,7 @@
   i32.add
   i32.store offset=4
   local.get $0
-  call $~lib/rt/purerc/onIncrement
+  call $~lib/rt/pure/onIncrement
   local.get $0
   i32.load
   i32.const 1
@@ -9192,15 +9192,15 @@
    unreachable
   end
  )
- (func $~lib/rt/purerc/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/pure/__retain (; 113 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/increment
+   call $~lib/rt/pure/increment
   end
   local.get $0
  )
@@ -9216,7 +9216,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 128
+   i32.const 168
    i32.const 530
    i32.const 2
    call $~lib/builtins/abort
@@ -9233,9 +9233,9 @@
   local.get $1
   call $~lib/rt/tlsf/onFree
  )
- (func $~lib/rt/common/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__typeinfo (; 115 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
+  global.get $~lib/rt/RTTI_BASE
   local.set $1
   local.get $0
   i32.eqz
@@ -9248,9 +9248,9 @@
    i32.gt_u
   end
   if
-   i32.const 328
-   i32.const 384
-   i32.const 55
+   i32.const 320
+   i32.const 376
+   i32.const 23
    i32.const 34
    call $~lib/builtins/abort
    unreachable
@@ -9468,16 +9468,16 @@
    end
   end
  )
- (func $~lib/rt/purerc/growRoots (; 117 ;) (type $FUNCSIG$v)
+ (func $~lib/rt/pure/growRoots (; 117 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
+  global.get $~lib/rt/pure/ROOTS
   local.set $0
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.get $0
   i32.sub
   local.set $1
@@ -9503,26 +9503,26 @@
   local.get $1
   call $~lib/memory/memory.copy
   local.get $5
-  global.set $~lib/rt/purerc/ROOTS
+  global.set $~lib/rt/pure/ROOTS
   local.get $5
   local.get $1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
   local.get $5
   local.get $4
   i32.add
-  global.set $~lib/rt/purerc/END
+  global.set $~lib/rt/pure/END
  )
- (func $~lib/rt/purerc/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/appendRoot (; 118 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
+  global.get $~lib/rt/pure/CUR
   local.set $1
   local.get $1
-  global.get $~lib/rt/purerc/END
+  global.get $~lib/rt/pure/END
   i32.ge_u
   if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
    local.set $1
   end
   local.get $1
@@ -9531,9 +9531,9 @@
   local.get $1
   i32.const 1
   i32.add
-  global.set $~lib/rt/purerc/CUR
+  global.set $~lib/rt/pure/CUR
  )
- (func $~lib/rt/purerc/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/decrement (; 119 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -9544,7 +9544,7 @@
   i32.and
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/onDecrement
+  call $~lib/rt/pure/onDecrement
   local.get $0
   i32.load
   i32.const 1
@@ -9567,7 +9567,7 @@
    i32.const 16
    i32.add
    i32.const 1
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
    local.get $1
    i32.const -2147483648
    i32.and
@@ -9600,7 +9600,7 @@
    end
    local.get $0
    i32.load offset=8
-   call $~lib/rt/common/__typeinfo
+   call $~lib/rt/__typeinfo
    i32.const 8
    i32.and
    i32.eqz
@@ -9620,7 +9620,7 @@
     i32.eqz
     if
      local.get $0
-     call $~lib/rt/purerc/appendRoot
+     call $~lib/rt/pure/appendRoot
     end
    else    
     local.get $0
@@ -9637,13 +9637,13 @@
    end
   end
  )
- (func $~lib/rt/purerc/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/rt/pure/__retainRelease (; 120 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
   local.get $1
   i32.ne
   if
-   global.get $~lib/builtins/HEAP_BASE
+   global.get $~lib/heap/HEAP_BASE
    local.set $2
    local.get $0
    local.get $2
@@ -9652,7 +9652,7 @@
     local.get $0
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/increment
+    call $~lib/rt/pure/increment
    end
    local.get $1
    local.get $2
@@ -9661,23 +9661,153 @@
     local.get $1
     i32.const 16
     i32.sub
-    call $~lib/rt/purerc/decrement
+    call $~lib/rt/pure/decrement
    end
   end
   local.get $0
  )
- (func $~lib/rt/purerc/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/__release (; 121 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.gt_u
   if
    local.get $0
    i32.const 16
    i32.sub
-   call $~lib/rt/purerc/decrement
+   call $~lib/rt/pure/decrement
   end
  )
- (func $~lib/rt/purerc/markGray (; 122 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/set/Set<i8>#__visit_impl (; 122 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<u8>#__visit_impl (; 123 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<i16>#__visit_impl (; 124 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<u16>#__visit_impl (; 125 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<i32>#__visit_impl (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<u32>#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<i64>#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<u64>#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<f32>#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/set/Set<f64>#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load
+  local.get $1
+  call $~lib/rt/pure/__visit
+  local.get $0
+  i32.load offset=8
+  local.set $2
+  local.get $2
+  local.get $1
+  call $~lib/rt/pure/__visit
+ )
+ (func $~lib/rt/pure/markGray (; 132 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9701,10 +9831,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 123 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 133 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -9719,9 +9849,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 124 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 134 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9739,7 +9869,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -9754,11 +9884,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 125 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 135 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9781,17 +9911,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 126 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -9833,7 +9963,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -9862,7 +9992,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -9870,7 +10000,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -9914,7 +10044,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -9923,7 +10053,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -9941,137 +10071,7 @@
    end
   end
  )
- (func $~lib/set/Set<i8>#__visit_impl (; 127 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u8>#__visit_impl (; 128 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i16>#__visit_impl (; 129 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u16>#__visit_impl (; 130 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i32>#__visit_impl (; 131 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u32>#__visit_impl (; 132 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<i64>#__visit_impl (; 133 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<u64>#__visit_impl (; 134 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<f32>#__visit_impl (; 135 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/set/Set<f64>#__visit_impl (; 136 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load
-  local.get $1
-  call $~lib/rt/purerc/__visit
-  local.get $0
-  i32.load offset=8
-  local.set $2
-  local.get $2
-  local.get $1
-  call $~lib/rt/purerc/__visit
- )
- (func $~lib/builtins/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 137 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block
   end
@@ -10124,7 +10124,7 @@
                 if
                  local.get $2
                  local.get $1
-                 call $~lib/rt/purerc/__visit
+                 call $~lib/rt/pure/__visit
                 end
                 return
                 unreachable
diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat
index 82aea92d..d20b7737 100644
--- a/tests/compiler/std/string.optimized.wat
+++ b/tests/compiler/std/string.optimized.wat
@@ -2,200 +2,200 @@
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$v (func))
  (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$vii (func (param i32 i32)))
  (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$di (func (param i32) (result f64)))
- (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$viji (func (param i32 i64 i32)))
  (type $FUNCSIG$id (func (param f64) (result i32)))
  (type $FUNCSIG$iid (func (param i32 f64) (result i32)))
  (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (memory $0 1)
  (data (i32.const 8) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g")
  (data (i32.const 56) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
  (data (i32.const 108) "\01\00\00\00\10")
  (data (i32.const 120) "\02\00\00\00\01\00\00\00\10\00\00\00\02")
  (data (i32.const 144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a")
- (data (i32.const 168) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
- (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
- (data (i32.const 272) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006")
- (data (i32.const 296) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
- (data (i32.const 344) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df")
- (data (i32.const 368) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i")
- (data (i32.const 392) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l")
- (data (i32.const 416) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g")
- (data (i32.const 448) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m")
- (data (i32.const 472) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 ")
- (data (i32.const 496) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 ")
- (data (i32.const 520) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c")
- (data (i32.const 544) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c")
- (data (i32.const 576) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003")
- (data (i32.const 600) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c")
- (data (i32.const 632) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c")
- (data (i32.const 664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 ")
- (data (i32.const 696) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c")
- (data (i32.const 728) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b")
- (data (i32.const 760) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,")
- (data (i32.const 784) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x")
- (data (i32.const 808) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I")
- (data (i32.const 832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g")
- (data (i32.const 856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i")
- (data (i32.const 880) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000")
- (data (i32.const 904) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001")
- (data (i32.const 928) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001")
- (data (i32.const 960) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007")
- (data (i32.const 992) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f")
- (data (i32.const 1024) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F")
- (data (i32.const 1056) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001")
- (data (i32.const 1080) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g")
- (data (i32.const 1104) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001")
- (data (i32.const 1128) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005")
- (data (i32.const 1152) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r")
- (data (i32.const 1184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b")
- (data (i32.const 1208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b")
- (data (i32.const 1232) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001")
- (data (i32.const 1256) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002")
- (data (i32.const 1280) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001")
- (data (i32.const 1304) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002")
- (data (i32.const 1328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002")
- (data (i32.const 1360) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001")
- (data (i32.const 1392) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80")
- (data (i32.const 1424) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0")
- (data (i32.const 1456) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l")
- (data (i32.const 1496) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l")
- (data (i32.const 1536) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a")
- (data (i32.const 1560) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a")
- (data (i32.const 1584) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h")
- (data (i32.const 1632) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a")
- (data (i32.const 1656) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b")
- (data (i32.const 1688) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a")
- (data (i32.const 1720) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a")
- (data (i32.const 1752) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a")
- (data (i32.const 1784) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n")
- (data (i32.const 1832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n")
- (data (i32.const 1856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n")
- (data (i32.const 1888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g")
- (data (i32.const 1920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h")
- (data (i32.const 1952) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m")
- (data (i32.const 2000) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s")
- (data (i32.const 2056) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
- (data (i32.const 2104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
- (data (i32.const 2160) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s")
- (data (i32.const 2216) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y")
- (data (i32.const 2328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c")
- (data (i32.const 2360) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.")
- (data (i32.const 2384) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c")
- (data (i32.const 2408) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
- (data (i32.const 2824) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00x\t\00\00x\t\00\00\90\01\00\00d")
- (data (i32.const 2856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008")
- (data (i32.const 2880) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000")
- (data (i32.const 2912) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004")
- (data (i32.const 2936) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005")
- (data (i32.const 2968) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006")
- (data (i32.const 3000) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001")
- (data (i32.const 3032) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007")
- (data (i32.const 3064) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006")
- (data (i32.const 3104) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007")
- (data (i32.const 3144) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008")
- (data (i32.const 3184) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001")
- (data (i32.const 3208) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000")
- (data (i32.const 3232) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008")
- (data (i32.const 3272) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005")
- (data (i32.const 3312) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009")
- (data (i32.const 3344) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000")
- (data (i32.const 3384) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3424) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3464) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3512) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3560) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3616) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005")
- (data (i32.const 3672) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004")
- (data (i32.const 3704) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005")
- (data (i32.const 3744) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3784) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3832) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3880) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
- (data (i32.const 3936) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007")
- (data (i32.const 3992) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008")
- (data (i32.const 4048) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000")
- (data (i32.const 4072) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N")
- (data (i32.const 4096) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
- (data (i32.const 4136) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
- (data (i32.const 4168) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
- (data (i32.const 4880) "\10\00\00\00\01\00\00\00\14\00\00\00\10\00\00\00X\10\00\00X\10\00\00\b8\02\00\00W")
- (data (i32.const 4912) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
- (data (i32.const 5104) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00@\13\00\00@\13\00\00\ae\00\00\00W")
- (data (i32.const 5136) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
- (data (i32.const 5192) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00 \14\00\00 \14\00\00(\00\00\00\n")
- (data (i32.const 5224) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
- (data (i32.const 5288) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
- (data (i32.const 5352) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008")
- (data (i32.const 5416) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008")
- (data (i32.const 5480) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\004\00.\001\008\005\005\008\000\004\009\006\008\002\001\003\005\007\00e\00+\002\009\008")
- (data (i32.const 5544) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\002\00.\002\002\005\000\007\003\008\005\008\005\000\007\002\000\001\004\00e\00-\003\000\008")
- (data (i32.const 5608) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\004\00.\009\004\000\006\005\006\00e\00-\003\001\008")
- (data (i32.const 5656) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\009\000\006\000\008\000\001\001\005\003\004\003\003\006\000\000\00.\000")
- (data (i32.const 5712) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\004\007\000\008\003\005\006\000\002\004\007\001\001\005\001\002\000\000\000\00.\000")
- (data (i32.const 5776) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\009\004\000\009\003\004\000\000\001\002\005\006\008\002\004\008\000\000\000\00.\000")
- (data (i32.const 5840) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\005\00e\00-\003\002\004")
- (data (i32.const 5872) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00.\000")
- (data (i32.const 5896) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\001\00.\000")
- (data (i32.const 5920) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\000\00.\001")
- (data (i32.const 5944) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\00.\000")
- (data (i32.const 5984) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\000\00.\000\000\000\000\000\001")
- (data (i32.const 6016) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00-\001\000\000\000\000\000\000\00.\000")
- (data (i32.const 6056) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\000\00.\000\000\000\000\000\001")
- (data (i32.const 6096) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\001\000\000\000\000\000\000\000\00.\000")
- (data (i32.const 6136) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\00e\00-\007")
- (data (i32.const 6160) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00+\003\000\008")
- (data (i32.const 6192) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00+\003\000\008")
- (data (i32.const 6224) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\000\008")
- (data (i32.const 6256) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\000\008")
- (data (i32.const 6288) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\002\003")
- (data (i32.const 6320) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\002\003")
- (data (i32.const 6352) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\004\002\009\004\009\006\007\002\007\002\00.\000")
- (data (i32.const 6392) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\001\00.\002\003\001\002\001\004\005\006\007\003\004\005\006\002\003\004\00e\00-\008")
- (data (i32.const 6456) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\005\005\005\005\005\005\005\005\005\00.\005\005\005\005\005\005\006")
- (data (i32.const 6512) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009")
- (data (i32.const 6568) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\00.\003\004")
- (data (i32.const 6600) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003")
- (data (i32.const 6656) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\002\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00.\000")
- (data (i32.const 6720) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00.\002\003\004\00e\00+\002\001")
- (data (i32.const 6760) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\00.\007\001\008\002\008")
- (data (i32.const 6792) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\000\00.\000\002\007\001\008\002\008")
- (data (i32.const 6832) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\007\001\00.\008\002\008")
- (data (i32.const 6864) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008")
- (data (i32.const 6896) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004")
- (data (i32.const 6928) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009")
- (data (i32.const 6968) "\15\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e")
+ (data (i32.const 168) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006")
+ (data (i32.const 192) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
+ (data (i32.const 240) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df")
+ (data (i32.const 264) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i")
+ (data (i32.const 288) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l")
+ (data (i32.const 312) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g")
+ (data (i32.const 344) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m")
+ (data (i32.const 368) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 ")
+ (data (i32.const 392) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 ")
+ (data (i32.const 416) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c")
+ (data (i32.const 440) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c")
+ (data (i32.const 472) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003")
+ (data (i32.const 496) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c")
+ (data (i32.const 528) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c")
+ (data (i32.const 560) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 ")
+ (data (i32.const 592) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c")
+ (data (i32.const 624) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b")
+ (data (i32.const 656) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,")
+ (data (i32.const 680) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x")
+ (data (i32.const 704) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I")
+ (data (i32.const 728) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g")
+ (data (i32.const 752) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i")
+ (data (i32.const 776) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000")
+ (data (i32.const 800) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001")
+ (data (i32.const 824) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001")
+ (data (i32.const 856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007")
+ (data (i32.const 888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f")
+ (data (i32.const 920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F")
+ (data (i32.const 952) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001")
+ (data (i32.const 976) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g")
+ (data (i32.const 1000) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001")
+ (data (i32.const 1024) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005")
+ (data (i32.const 1048) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r")
+ (data (i32.const 1080) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b")
+ (data (i32.const 1104) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b")
+ (data (i32.const 1128) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001")
+ (data (i32.const 1152) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002")
+ (data (i32.const 1176) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001")
+ (data (i32.const 1200) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002")
+ (data (i32.const 1224) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002")
+ (data (i32.const 1256) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001")
+ (data (i32.const 1288) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80")
+ (data (i32.const 1320) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0")
+ (data (i32.const 1352) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l")
+ (data (i32.const 1392) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l")
+ (data (i32.const 1432) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a")
+ (data (i32.const 1456) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a")
+ (data (i32.const 1480) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h")
+ (data (i32.const 1528) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a")
+ (data (i32.const 1552) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b")
+ (data (i32.const 1584) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a")
+ (data (i32.const 1616) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a")
+ (data (i32.const 1648) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a")
+ (data (i32.const 1680) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n")
+ (data (i32.const 1728) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n")
+ (data (i32.const 1752) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n")
+ (data (i32.const 1784) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g")
+ (data (i32.const 1816) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h")
+ (data (i32.const 1848) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m")
+ (data (i32.const 1896) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
+ (data (i32.const 1944) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y")
+ (data (i32.const 2056) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e")
+ (data (i32.const 2112) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c")
+ (data (i32.const 2144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.")
+ (data (i32.const 2168) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c")
+ (data (i32.const 2192) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
+ (data (i32.const 2608) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00\a0\08\00\00\a0\08\00\00\90\01\00\00d")
+ (data (i32.const 2640) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008")
+ (data (i32.const 2664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000")
+ (data (i32.const 2696) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004")
+ (data (i32.const 2720) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005")
+ (data (i32.const 2752) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006")
+ (data (i32.const 2784) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001")
+ (data (i32.const 2816) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007")
+ (data (i32.const 2848) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006")
+ (data (i32.const 2888) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007")
+ (data (i32.const 2928) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008")
+ (data (i32.const 2968) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001")
+ (data (i32.const 2992) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000")
+ (data (i32.const 3016) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008")
+ (data (i32.const 3056) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005")
+ (data (i32.const 3096) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009")
+ (data (i32.const 3128) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000")
+ (data (i32.const 3168) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3208) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3248) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3296) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3344) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3400) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005")
+ (data (i32.const 3456) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004")
+ (data (i32.const 3488) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005")
+ (data (i32.const 3528) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3568) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3616) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3664) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005")
+ (data (i32.const 3720) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007")
+ (data (i32.const 3776) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008")
+ (data (i32.const 3832) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000")
+ (data (i32.const 3856) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N")
+ (data (i32.const 3880) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
+ (data (i32.const 3920) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
+ (data (i32.const 3952) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
+ (data (i32.const 4664) "\10\00\00\00\01\00\00\00\14\00\00\00\10\00\00\00\80\0f\00\00\80\0f\00\00\b8\02\00\00W")
+ (data (i32.const 4696) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
+ (data (i32.const 4888) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00h\12\00\00h\12\00\00\ae\00\00\00W")
+ (data (i32.const 4920) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
+ (data (i32.const 4976) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00H\13\00\00H\13\00\00(\00\00\00\n")
+ (data (i32.const 5008) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
+ (data (i32.const 5072) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
+ (data (i32.const 5136) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008")
+ (data (i32.const 5200) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008")
+ (data (i32.const 5264) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\004\00.\001\008\005\005\008\000\004\009\006\008\002\001\003\005\007\00e\00+\002\009\008")
+ (data (i32.const 5328) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\002\00.\002\002\005\000\007\003\008\005\008\005\000\007\002\000\001\004\00e\00-\003\000\008")
+ (data (i32.const 5392) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\004\00.\009\004\000\006\005\006\00e\00-\003\001\008")
+ (data (i32.const 5440) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\009\000\006\000\008\000\001\001\005\003\004\003\003\006\000\000\00.\000")
+ (data (i32.const 5496) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\004\007\000\008\003\005\006\000\002\004\007\001\001\005\001\002\000\000\000\00.\000")
+ (data (i32.const 5560) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\009\004\000\009\003\004\000\000\001\002\005\006\008\002\004\008\000\000\000\00.\000")
+ (data (i32.const 5624) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\005\00e\00-\003\002\004")
+ (data (i32.const 5656) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00.\000")
+ (data (i32.const 5680) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\001\00.\000")
+ (data (i32.const 5704) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\000\00.\001")
+ (data (i32.const 5728) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\00.\000")
+ (data (i32.const 5768) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\000\00.\000\000\000\000\000\001")
+ (data (i32.const 5800) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00-\001\000\000\000\000\000\000\00.\000")
+ (data (i32.const 5840) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\000\00.\000\000\000\000\000\001")
+ (data (i32.const 5880) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\001\000\000\000\000\000\000\000\00.\000")
+ (data (i32.const 5920) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\00e\00-\007")
+ (data (i32.const 5944) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00+\003\000\008")
+ (data (i32.const 5976) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00+\003\000\008")
+ (data (i32.const 6008) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\000\008")
+ (data (i32.const 6040) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\000\008")
+ (data (i32.const 6072) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\002\003")
+ (data (i32.const 6104) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\002\003")
+ (data (i32.const 6136) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\004\002\009\004\009\006\007\002\007\002\00.\000")
+ (data (i32.const 6176) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\001\00.\002\003\001\002\001\004\005\006\007\003\004\005\006\002\003\004\00e\00-\008")
+ (data (i32.const 6240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\005\005\005\005\005\005\005\005\005\00.\005\005\005\005\005\005\006")
+ (data (i32.const 6296) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009")
+ (data (i32.const 6352) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\00.\003\004")
+ (data (i32.const 6384) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003")
+ (data (i32.const 6440) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\002\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00.\000")
+ (data (i32.const 6504) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00.\002\003\004\00e\00+\002\001")
+ (data (i32.const 6544) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\00.\007\001\008\002\008")
+ (data (i32.const 6576) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\000\00.\000\002\007\001\008\002\008")
+ (data (i32.const 6616) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\007\001\00.\008\002\008")
+ (data (i32.const 6648) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008")
+ (data (i32.const 6680) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004")
+ (data (i32.const 6712) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009")
+ (data (i32.const 6752) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
+ (data (i32.const 6800) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e")
+ (data (i32.const 6856) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s")
+ (data (i32.const 6904) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s")
+ (data (i32.const 6944) "\15\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e")
  (global $std/string/str (mut i32) (i32.const 24))
  (global $std/string/nullStr i32 (i32.const 0))
- (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
  (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp (mut i32) (i32.const 0))
  (global $~lib/util/number/_K (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
+ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (export "getString" (func $std/string/getString))
  (start $start)
  (func $~lib/string/String.__not (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   if (result i32)
@@ -211,1002 +211,10 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/rt/tlsf/removeBlock (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.tee $3
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const -4
-  i32.and
-  local.tee $2
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $2
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 4
-   i32.shr_u
-   local.set $2
-   i32.const 0
-  else   
-   local.get $2
-   i32.const 31
-   local.get $2
-   i32.clz
-   i32.sub
-   local.tee $3
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $2
-   local.get $3
-   i32.const 7
-   i32.sub
-  end
-  local.tee $3
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=20
-  local.set $4
-  local.get $1
-  i32.load offset=16
-  local.tee $5
-  if
-   local.get $5
-   local.get $4
-   i32.store offset=20
-  end
-  local.get $4
-  if
-   local.get $4
-   local.get $5
-   i32.store offset=16
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $2
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=96
-  local.get $1
-  i32.eq
-  if
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $2
-   i32.add
-   i32.const 2
-   i32.shl
-   local.get $0
-   i32.add
-   local.get $4
-   i32.store offset=96
-   local.get $4
-   i32.eqz
-   if
-    local.get $3
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    local.get $3
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=4
-    i32.const 1
-    local.get $2
-    i32.shl
-    i32.const -1
-    i32.xor
-    i32.and
-    local.tee $1
-    i32.store offset=4
-    local.get $1
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $3
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 6 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.tee $3
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.load
-  i32.const -4
-  i32.and
-  i32.add
-  local.tee $4
-  i32.load
-  local.tee $5
-  i32.const 1
-  i32.and
-  if
-   local.get $3
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $2
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $3
-    i32.const 3
-    i32.and
-    local.get $2
-    i32.or
-    local.tee $3
-    i32.store
-    local.get $1
-    i32.const 16
-    i32.add
-    local.get $1
-    i32.load
-    i32.const -4
-    i32.and
-    i32.add
-    local.tee $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $3
-  i32.const 2
-  i32.and
-  if
-   local.get $1
-   i32.const 4
-   i32.sub
-   i32.load
-   local.tee $2
-   i32.load
-   local.tee $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $7
-   i32.const 1073741808
-   i32.lt_u
-   if (result i32)
-    local.get $0
-    local.get $2
-    call $~lib/rt/tlsf/removeBlock
-    local.get $2
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $3
-    i32.store
-    local.get $2
-   else    
-    local.get $1
-   end
-   local.set $1
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $3
-  i32.const -4
-  i32.and
-  local.tee $2
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $2
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  i32.add
-  i32.ne
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $2
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $2
-   i32.const 4
-   i32.shr_u
-   local.set $4
-   i32.const 0
-  else   
-   local.get $2
-   i32.const 31
-   local.get $2
-   i32.clz
-   i32.sub
-   local.tee $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $4
-   local.get $2
-   i32.const 7
-   i32.sub
-  end
-  local.tee $3
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $4
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $4
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=96
-  local.set $2
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $2
-  i32.store offset=20
-  local.get $2
-  if
-   local.get $2
-   local.get $1
-   i32.store offset=16
-  end
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $4
-  i32.add
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  local.get $1
-  i32.store offset=96
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $3
-  i32.shl
-  i32.or
-  i32.store
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=4
-  i32.const 1
-  local.get $4
-  i32.shl
-  i32.or
-  i32.store offset=4
- )
- (func $~lib/rt/tlsf/addMemory (; 7 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $1
-  local.get $2
-  i32.le_u
-  select
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=1568
-  local.tee $3
-  if
-   local.get $1
-   local.get $3
-   i32.const 16
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $3
-   i32.eq
-   if
-    local.get $3
-    i32.load
-    local.set $4
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.tee $2
-  i32.const 48
-  i32.lt_u
-  if
-   return
-  end
-  local.get $1
-  local.get $4
-  i32.const 2
-  i32.and
-  local.get $2
-  i32.const 32
-  i32.sub
-  i32.const 1
-  i32.or
-  i32.or
-  i32.store
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $2
-  i32.add
-  i32.const 16
-  i32.sub
-  local.tee $2
-  i32.const 2
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=1568
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
- )
- (func $~lib/rt/tlsf/initializeRoot (; 8 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  i32.const 1
-  current_memory
-  local.tee $0
-  i32.gt_s
-  if (result i32)
-   i32.const 1
-   local.get $0
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  i32.const 7152
-  i32.const 0
-  i32.store
-  i32.const 8720
-  i32.const 0
-  i32.store
-  i32.const 0
-  local.set $0
-  loop $repeat|0
-   block $break|0
-    local.get $0
-    i32.const 23
-    i32.ge_u
-    br_if $break|0
-    local.get $0
-    i32.const 2
-    i32.shl
-    i32.const 7152
-    i32.add
-    i32.const 0
-    i32.store offset=4
-    i32.const 0
-    local.set $1
-    loop $repeat|1
-     block $break|1
-      local.get $1
-      i32.const 16
-      i32.ge_u
-      br_if $break|1
-      local.get $0
-      i32.const 4
-      i32.shl
-      local.get $1
-      i32.add
-      i32.const 2
-      i32.shl
-      i32.const 7152
-      i32.add
-      i32.const 0
-      i32.store offset=96
-      local.get $1
-      i32.const 1
-      i32.add
-      local.set $1
-      br $repeat|1
-     end
-    end
-    local.get $0
-    i32.const 1
-    i32.add
-    local.set $0
-    br $repeat|0
-   end
-  end
-  i32.const 7152
-  i32.const 8736
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  i32.const 7152
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 232
-   i32.const 184
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const -16
-  i32.and
-  local.tee $0
-  i32.const 16
-  local.get $0
-  i32.const 16
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $1
-   i32.const 0
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    local.get $1
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
-   i32.const 31
-   local.get $1
-   i32.clz
-   i32.sub
-   local.tee $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 16
-   i32.xor
-   local.set $1
-   local.get $2
-   i32.const 7
-   i32.sub
-  end
-  local.tee $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $1
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 2
-  i32.shl
-  local.get $0
-  i32.add
-  i32.load offset=4
-  i32.const -1
-  local.get $1
-  i32.shl
-  i32.and
-  local.tee $1
-  if (result i32)
-   local.get $1
-   i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   local.get $0
-   i32.add
-   i32.load offset=96
-  else   
-   local.get $0
-   i32.load
-   i32.const -1
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.tee $1
-   if (result i32)
-    local.get $1
-    i32.ctz
-    local.tee $1
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=4
-    local.tee $2
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 184
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    local.get $2
-    i32.ctz
-    local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    local.get $0
-    i32.add
-    i32.load offset=96
-   else    
-    i32.const 0
-   end
-  end
- )
- (func $~lib/rt/tlsf/growMemory (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  current_memory
-  local.tee $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const -65536
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.tee $1
-  local.get $2
-  local.get $1
-  i32.gt_s
-  select
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $1
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
- )
- (func $~lib/rt/tlsf/prepareBlock (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const -4
-  i32.and
-  local.get $2
-  i32.sub
-  local.tee $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $3
-   i32.const 2
-   i32.and
-   local.get $2
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.tee $1
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $1
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const -2
-   i32.and
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   i32.load
-   i32.const -3
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 13 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.tee $3
-  call $~lib/rt/tlsf/searchBlock
-  local.tee $2
-  i32.eqz
-  if
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $3
-   call $~lib/rt/tlsf/searchBlock
-   local.tee $2
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  i32.load
-  i32.const -4
-  i32.and
-  local.get $3
-  i32.lt_u
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 0
-  i32.store offset=4
-  local.get $2
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $2
-  local.get $3
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $2
- )
- (func $~lib/rt/tlsf/__alloc (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.tee $2
-  if (result i32)
-   local.get $2
-  else   
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-  end
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $0
-  local.get $1
-  i32.store offset=8
-  local.get $0
-  i32.const 16
-  i32.add
- )
- (func $~lib/string/String.fromCharCode (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String.fromCharCode (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   i32.const 2
   i32.const 16
@@ -1215,16 +223,16 @@
   local.get $0
   i32.store16
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/string/compareImpl (; 16 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/util/string/compareImpl (; 6 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   i32.const 1
@@ -1264,27 +272,27 @@
    end
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/string/String.__eq (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__eq (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   i32.eq
   if
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 1
    return
   end
@@ -1318,19 +326,19 @@
    i32.eqz
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/string/String.fromCodePoint (; 18 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String.fromCodePoint (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
@@ -1338,7 +346,7 @@
   i32.gt_u
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 21
    i32.const 4
    call $~lib/builtins/abort
@@ -1383,26 +391,26 @@
    i32.store16
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#startsWith (; 19 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String#startsWith (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  i32.const 384
-  call $~lib/rt/purerc/__retain
+  i32.const 280
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 171
    i32.const 4
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 380
+  i32.const 276
   i32.load
   i32.const 1
   i32.shr_u
@@ -1426,40 +434,40 @@
   local.get $1
   i32.gt_s
   if
-   i32.const 384
-   call $~lib/rt/purerc/__release
+   i32.const 280
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
   local.get $3
-  i32.const 384
+  i32.const 280
   local.get $2
   call $~lib/util/string/compareImpl
   i32.eqz
   local.set $0
-  i32.const 384
-  call $~lib/rt/purerc/__release
+  i32.const 280
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/string/String#endsWith (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String#endsWith (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  i32.const 432
-  call $~lib/rt/purerc/__retain
+  i32.const 328
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 78
    i32.const 4
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 428
+  i32.const 324
   i32.load
   i32.const 1
   i32.shr_u
@@ -1483,34 +491,34 @@
   i32.const 0
   i32.lt_s
   if
-   i32.const 432
-   call $~lib/rt/purerc/__release
+   i32.const 328
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
   local.get $0
   local.get $1
-  i32.const 432
+  i32.const 328
   local.get $2
   call $~lib/util/string/compareImpl
   i32.eqz
   local.set $0
-  i32.const 432
-  call $~lib/rt/purerc/__release
+  i32.const 328
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/string/String#indexOf (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#indexOf (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 140
    i32.const 4
    call $~lib/builtins/abort
@@ -1520,9 +528,9 @@
    local.get $1
    i32.eqz
    if
-    i32.const 408
+    i32.const 304
     local.get $1
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $1
    end
    local.get $1
@@ -1536,7 +544,7 @@
   end
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const 0
    return
   end
@@ -1550,7 +558,7 @@
   i32.eqz
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const -1
    return
   end
@@ -1589,7 +597,7 @@
      br $repeat|0
     else     
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      return
     end
@@ -1597,10 +605,10 @@
    end
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const -1
  )
- (func $~lib/memory/memory.copy (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   block $~lib/util/memory/memmove|inlined.0
@@ -1773,7 +781,7 @@
    end
   end
  )
- (func $~lib/memory/memory.repeat (; 23 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (func $~lib/memory/memory.repeat (; 13 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
   (local $4 i32)
   local.get $2
   local.get $3
@@ -1798,19 +806,19 @@
    end
   end
  )
- (func $~lib/string/String#padStart (; 24 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#padStart (; 14 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 288
    i32.const 4
    call $~lib/builtins/abort
@@ -1847,10 +855,10 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -1899,24 +907,24 @@
   local.get $5
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $0
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/string/String#padEnd (; 25 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#padEnd (; 15 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 309
    i32.const 4
    call $~lib/builtins/abort
@@ -1953,10 +961,10 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
@@ -2007,23 +1015,23 @@
    call $~lib/memory/memory.copy
   end
   local.get $5
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $0
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
  )
- (func $~lib/string/String#lastIndexOf (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#lastIndexOf (; 16 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 156
    i32.const 4
    call $~lib/builtins/abort
@@ -2032,9 +1040,9 @@
   local.get $1
   i32.eqz
   if
-   i32.const 408
+   i32.const 304
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $0
@@ -2054,7 +1062,7 @@
   i32.eqz
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -2062,7 +1070,7 @@
   i32.eqz
   if
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    i32.const -1
    return
   end
@@ -2100,7 +1108,7 @@
      br $repeat|0
     else     
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      return
     end
@@ -2108,10 +1116,10 @@
    end
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const -1
  )
- (func $~lib/util/string/parse<f64> (; 27 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
+ (func $~lib/util/string/parse<f64> (; 17 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -2119,7 +1127,7 @@
   (local $5 f64)
   (local $6 f64)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner0
    local.get $0
@@ -2163,7 +1171,7 @@
      i32.eqz
      if
       local.get $0
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       f64.const nan:0x8000000000000
       return
      end
@@ -2335,29 +1343,29 @@
     end
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    local.get $5
    f64.mul
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   f64.const nan:0x8000000000000
  )
- (func $~lib/string/parseInt (; 28 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
+ (func $~lib/string/parseInt (; 18 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
   (local $1 f64)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   call $~lib/util/string/parse<f64>
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/string/parseFloat (; 29 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
+ (func $~lib/string/parseFloat (; 19 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -2365,7 +1373,7 @@
   (local $5 f64)
   (local $6 f64)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner0
    local.get $0
@@ -2462,7 +1470,7 @@
           end
           if
            i32.const 0
-           i32.const 312
+           i32.const 208
            i32.const 572
            i32.const 10
            call $~lib/builtins/abort
@@ -2519,30 +1527,30 @@
     end
    end
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    local.get $4
    f64.mul
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   f64.const nan:0x8000000000000
  )
- (func $~lib/string/String#concat (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block (result i32)
    local.get $1
    i32.eqz
    if
-    i32.const 408
+    i32.const 304
     local.get $1
-    call $~lib/rt/purerc/__retainRelease
+    call $~lib/rt/pure/__retainRelease
     local.set $1
    end
    local.get $1
@@ -2569,17 +1577,17 @@
   end
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
   local.get $2
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $2
   local.get $0
   local.get $3
@@ -2591,37 +1599,37 @@
   local.get $4
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__concat (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__concat (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  i32.const 408
+  i32.const 304
   local.get $0
   select
   local.get $1
   call $~lib/string/String#concat
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__ne (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__ne (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -2629,19 +1637,19 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__gt (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__gt (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner0
    i32.const 1
@@ -2676,9 +1684,9 @@
    i32.eqz
    if
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 1
     return
    end
@@ -2696,26 +1704,26 @@
    i32.gt_s
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/string/String.__lt (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__lt (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   block $folding-inner0
    i32.const 1
@@ -2750,9 +1758,9 @@
    i32.eqz
    if
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 1
     return
    end
@@ -2770,25 +1778,25 @@
    i32.lt_s
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
  )
- (func $~lib/string/String.__gte (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__gte (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -2796,18 +1804,18 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__lte (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String.__lte (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   i32.const 120
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 120
   local.get $0
@@ -2815,19 +1823,19 @@
   i32.eqz
   local.set $1
   i32.const 120
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/string/String#repeat (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#repeat (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 330
    i32.const 4
    call $~lib/builtins/abort
@@ -2855,8 +1863,8 @@
    i64.gt_u
   end
   if
-   i32.const 1600
-   i32.const 312
+   i32.const 1496
+   i32.const 208
    i32.const 335
    i32.const 6
    call $~lib/builtins/abort
@@ -2869,7 +1877,7 @@
   select
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -2877,7 +1885,7 @@
   i32.eq
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -2895,9 +1903,9 @@
   local.get $1
   call $~lib/memory/memory.repeat
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#slice (; 38 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#slice (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
   i32.const 16
@@ -2956,7 +1964,7 @@
   i32.le_s
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $2
@@ -2974,62 +1982,9 @@
   local.get $2
   call $~lib/memory/memory.copy
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/purerc/increment (; 39 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $1
-  i32.const -268435456
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const -268435456
-  i32.and
-  i32.ne
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  i32.const 7144
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__allocArray (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/rt/__allocArray (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -3044,7 +1999,7 @@
   i32.const 15
   call $~lib/rt/tlsf/__alloc
   local.tee $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $1
   local.get $3
@@ -3057,159 +2012,7 @@
   i32.store offset=12
   local.get $1
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 42 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.tee $4
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.load
-  i32.const -4
-  i32.and
-  i32.add
-  local.tee $6
-  i32.load
-  local.tee $5
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const -4
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $3
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
-  local.get $3
- )
- (func $~lib/rt/tlsf/__realloc (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $0
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.fill (; 44 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/memory/memory.fill (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block $~lib/util/memory/memset|inlined.0
    local.get $1
@@ -3420,7 +2223,7 @@
    end
   end
  )
- (func $~lib/array/ensureSize (; 45 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/ensureSize (; 31 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3436,8 +2239,8 @@
    i32.const 268435452
    i32.gt_u
    if
-    i32.const 1600
-    i32.const 2072
+    i32.const 1496
+    i32.const 1912
     i32.const 14
     i32.const 47
     call $~lib/builtins/abort
@@ -3464,7 +2267,7 @@
    if
     local.get $0
     local.get $1
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $0
     local.get $1
@@ -3475,233 +2278,11 @@
    i32.store offset=8
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 46 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.tee $2
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
- )
- (func $~lib/rt/common/__typeinfo (; 47 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  if (result i32)
-   local.get $0
-   i32.const 6968
-   i32.load
-   i32.gt_u
-  else   
-   i32.const 1
-  end
-  if
-   i32.const 2120
-   i32.const 2176
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 3
-  i32.shl
-  i32.const 6968
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 48 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/purerc/CUR
-  global.get $~lib/rt/purerc/ROOTS
-  local.tee $2
-  i32.sub
-  local.tee $1
-  i32.const 1
-  i32.shl
-  local.tee $0
-  i32.const 256
-  local.get $0
-  i32.const 256
-  i32.gt_u
-  select
-  local.tee $3
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $0
-  local.get $2
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $0
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $0
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $0
-  local.get $3
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 49 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.tee $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 50 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $2
-  i32.const 268435455
-  i32.and
-  local.set $1
-  local.get $0
-  call $~lib/rt/purerc/onDecrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $2
-   i32.const -2147483648
-   i32.and
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.store offset=4
-   else    
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   end
-  else   
-   local.get $1
-   i32.const 0
-   i32.le_u
-   if
-    i32.const 0
-    i32.const 2016
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   if
-    local.get $0
-    local.get $1
-    i32.const 1
-    i32.sub
-    local.get $2
-    i32.const -268435456
-    i32.and
-    i32.or
-    i32.store offset=4
-   else    
-    local.get $0
-    local.get $1
-    i32.const 1
-    i32.sub
-    i32.const -1342177280
-    i32.or
-    i32.store offset=4
-    local.get $2
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   end
-  end
- )
- (func $~lib/rt/purerc/__retainRelease (; 51 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  i32.ne
-  if
-   local.get $0
-   i32.const 7144
-   i32.gt_u
-   if
-    local.get $0
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/increment
-   end
-   local.get $1
-   i32.const 7144
-   i32.gt_u
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/decrement
-   end
-  end
-  local.get $0
- )
- (func $~lib/array/Array<~lib/string/String>#push (; 52 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/array/Array<~lib/string/String>#push (; 32 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $0
@@ -3721,15 +2302,15 @@
   local.get $1
   local.get $2
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $3
   i32.store offset=12
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $~lib/string/String#split (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#split (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3739,13 +2320,13 @@
   (local $8 i32)
   (local $9 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 357
    i32.const 4
    call $~lib/builtins/abort
@@ -3757,14 +2338,14 @@
     i32.eqz
     if
      i32.const 1
-     call $~lib/rt/common/__allocArray
+     call $~lib/rt/__allocArray
      local.tee $2
      i32.load offset=4
      local.get $0
-     call $~lib/rt/purerc/__retain
+     call $~lib/rt/pure/__retain
      i32.store
      local.get $2
-     call $~lib/rt/purerc/__retain
+     call $~lib/rt/pure/__retain
      br $folding-inner1
     end
     local.get $0
@@ -3789,13 +2370,13 @@
       i32.eqz
       if
        i32.const 1
-       call $~lib/rt/common/__allocArray
+       call $~lib/rt/__allocArray
        local.tee $0
        i32.load offset=4
        i32.const 120
        i32.store
        local.get $0
-       call $~lib/rt/purerc/__retain
+       call $~lib/rt/pure/__retain
        br $folding-inner1
       end
      else      
@@ -3809,7 +2390,7 @@
       i32.lt_s
       select
       local.tee $3
-      call $~lib/rt/common/__allocArray
+      call $~lib/rt/__allocArray
       local.tee $5
       i32.load offset=4
       local.set $6
@@ -3837,7 +2418,7 @@
         local.get $4
         i32.store
         local.get $4
-        call $~lib/rt/purerc/__retain
+        call $~lib/rt/pure/__retain
         drop
         local.get $2
         i32.const 1
@@ -3847,12 +2428,12 @@
        end
       end
       local.get $5
-      call $~lib/rt/purerc/__retain
+      call $~lib/rt/pure/__retain
       br $folding-inner1
      end
      i32.const 0
-     call $~lib/rt/common/__allocArray
-     call $~lib/rt/purerc/__retain
+     call $~lib/rt/__allocArray
+     call $~lib/rt/pure/__retain
      local.set $2
      loop $continue|1
       local.get $0
@@ -3946,27 +2527,27 @@
      br $folding-inner2
     end
     i32.const 0
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
    end
    local.set $0
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $0
    return
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/array/Array<~lib/string/String>#__get (; 54 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#__get (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 2232
-   i32.const 2072
+   i32.const 1960
+   i32.const 1912
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -3979,8 +2560,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 2120
    i32.const 2072
+   i32.const 1912
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -3993,9 +2574,9 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/decimalCount32 (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/decimalCount32 (; 35 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.const 100000
   i32.lt_u
@@ -4049,10 +2630,10 @@
    end
   end
  )
- (func $~lib/util/number/utoa32_lut (; 56 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_lut (; 36 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  i32.const 2844
+  i32.const 2628
   i32.load
   local.set $3
   loop $continue|0
@@ -4159,15 +2740,15 @@
    i32.store16
   end
  )
- (func $~lib/util/number/itoa32 (; 57 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i32.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -4200,16 +2781,16 @@
    i32.store16
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/utoa32 (; 58 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/utoa32 (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   i32.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -4224,9 +2805,9 @@
   local.get $1
   call $~lib/util/number/utoa32_lut
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/decimalCount64 (; 59 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/decimalCount64 (; 39 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   local.get $0
   i64.const 1000000000000000
   i64.lt_u
@@ -4280,12 +2861,12 @@
    end
   end
  )
- (func $~lib/util/number/utoa64_lut (; 60 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_lut (; 40 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  i32.const 2844
+  i32.const 2628
   i32.load
   local.set $3
   loop $continue|0
@@ -4377,15 +2958,15 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/utoa64 (; 61 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/utoa64 (; 41 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i64.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -4419,9 +3000,9 @@
    call $~lib/util/number/utoa64_lut
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa64 (; 62 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa64 (; 42 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -4429,8 +3010,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   block (result i32)
@@ -4486,9 +3067,9 @@
    i32.store16
   end
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/genDigits (; 63 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (; 43 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i32)
   (local $9 i64)
@@ -4523,7 +3104,7 @@
   local.tee $7
   call $~lib/util/number/decimalCount32
   local.set $4
-  i32.const 5212
+  i32.const 4996
   i32.load
   local.set $13
   loop $continue|0
@@ -4893,7 +3474,7 @@
    local.get $6
   end
  )
- (func $~lib/util/number/prettify (; 64 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/prettify (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
   i32.eqz
@@ -5144,7 +3725,7 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (; 65 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/util/number/dtoa_core (; 45 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 i64)
   (local $3 i32)
   (local $4 i64)
@@ -5260,7 +3841,7 @@
   i32.shl
   i32.sub
   global.set $~lib/util/number/_K
-  i32.const 4900
+  i32.const 4684
   i32.load
   local.get $3
   i32.const 3
@@ -5268,7 +3849,7 @@
   i32.add
   i64.load
   global.set $~lib/util/number/_frc_pow
-  i32.const 5124
+  i32.const 4908
   i32.load
   local.get $3
   i32.const 1
@@ -5432,14 +4013,14 @@
   local.get $10
   i32.add
  )
- (func $~lib/string/String#substring (; 66 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#substring (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 196
    i32.const 4
    call $~lib/builtins/abort
@@ -5492,7 +4073,7 @@
   i32.eqz
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -5512,7 +4093,7 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $2
@@ -5525,50 +4106,17 @@
   local.get $2
   call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/tlsf/__free (; 67 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.const 0
-  local.get $0
-  select
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/util/number/dtoa (; 68 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/util/number/dtoa (; 47 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   (local $1 i32)
   (local $2 i32)
   local.get $0
   f64.const 0
   f64.eq
   if
-   i32.const 4064
-   call $~lib/rt/purerc/__retain
+   i32.const 3848
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5581,17 +4129,17 @@
    local.get $0
    f64.ne
    if
-    i32.const 4088
-    call $~lib/rt/purerc/__retain
+    i32.const 3872
+    call $~lib/rt/pure/__retain
     return
    end
-   i32.const 4112
-   i32.const 4152
+   i32.const 3896
+   i32.const 3936
    local.get $0
    f64.const 0
    f64.lt
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 56
@@ -5605,7 +4153,7 @@
   i32.eq
   if
    local.get $1
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -5616,18 +4164,7 @@
   call $~lib/rt/tlsf/__free
   local.get $2
  )
- (func $~lib/rt/purerc/__release (; 69 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  i32.const 7144
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $start:std/string (; 70 ;) (type $FUNCSIG$v)
+ (func $start:std/string (; 48 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -5864,7 +4401,7 @@
   i32.const 54
   call $~lib/string/String.fromCharCode
   local.tee $7
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -5878,7 +4415,7 @@
   i32.const 65590
   call $~lib/string/String.fromCharCode
   local.tee $8
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -5906,7 +4443,7 @@
   i32.const 54
   call $~lib/string/String.fromCodePoint
   local.tee $10
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -5922,7 +4459,7 @@
   local.tee $11
   i32.eqz
   if
-   i32.const 360
+   i32.const 256
    i32.const 72
    i32.const 23
    i32.const 0
@@ -5952,8 +4489,8 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 464
-  call $~lib/rt/purerc/__retain
+  i32.const 360
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
   call $~lib/string/String#indexOf
@@ -5961,7 +4498,7 @@
   i32.ne
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
   i32.eqz
   if
@@ -5974,7 +4511,7 @@
   end
   global.get $std/string/str
   i32.const 0
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $12
   global.get $std/string/str
@@ -5990,7 +4527,7 @@
   end
   global.get $std/string/str
   i32.const 15
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $13
   global.get $std/string/str
@@ -6006,10 +4543,10 @@
   end
   i32.const 120
   i32.const 3
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $14
-  i32.const 512
+  i32.const 408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6052,12 +4589,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 5
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $17
-  i32.const 560
+  i32.const 456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6068,12 +4605,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 6
-  i32.const 592
+  i32.const 488
   call $~lib/string/String#padStart
   local.tee $18
-  i32.const 616
+  i32.const 512
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6084,12 +4621,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 8
-  i32.const 592
+  i32.const 488
   call $~lib/string/String#padStart
   local.tee $19
-  i32.const 648
+  i32.const 544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6102,7 +4639,7 @@
   end
   global.get $std/string/str
   i32.const 0
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $20
   global.get $std/string/str
@@ -6118,7 +4655,7 @@
   end
   global.get $std/string/str
   i32.const 15
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $21
   global.get $std/string/str
@@ -6134,10 +4671,10 @@
   end
   i32.const 120
   i32.const 3
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $22
-  i32.const 512
+  i32.const 408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6180,12 +4717,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 5
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $25
-  i32.const 680
+  i32.const 576
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6196,12 +4733,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 6
-  i32.const 536
+  i32.const 432
   call $~lib/string/String#padEnd
   local.tee $26
-  i32.const 712
+  i32.const 608
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6212,12 +4749,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 8
-  i32.const 536
+  i32.const 432
   call $~lib/string/String#padEnd
   local.tee $27
-  i32.const 744
+  i32.const 640
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6241,7 +4778,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 384
+  i32.const 280
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const -1
@@ -6292,7 +4829,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const 2
@@ -6306,7 +4843,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 800
+  i32.const 696
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const -1
@@ -6320,7 +4857,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 2
   call $~lib/string/String#indexOf
   i32.const 2
@@ -6334,7 +4871,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 3
   call $~lib/string/String#indexOf
   i32.const -1
@@ -6348,7 +4885,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 824
+  i32.const 720
   i32.const -1
   call $~lib/string/String#indexOf
   i32.const 2
@@ -6374,7 +4911,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 384
+  i32.const 280
   i32.const 2147483647
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -6407,7 +4944,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 2147483647
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -6421,7 +4958,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 800
+  i32.const 696
   i32.const 2147483647
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -6435,7 +4972,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 848
+  i32.const 744
   i32.const 2147483647
   call $~lib/string/String#lastIndexOf
   i32.const 15
@@ -6449,7 +4986,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 2
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -6463,7 +5000,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 3
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -6477,7 +5014,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 824
+  i32.const 720
   i32.const -1
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -6491,7 +5028,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 872
+  i32.const 768
   i32.const 0
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -6505,7 +5042,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 384
+  i32.const 280
   i32.const 0
   call $~lib/string/String#lastIndexOf
   if
@@ -6516,7 +5053,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 896
+  i32.const 792
   call $~lib/string/parseInt
   f64.const 0
   f64.ne
@@ -6528,7 +5065,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 920
+  i32.const 816
   call $~lib/string/parseInt
   f64.const 1
   f64.ne
@@ -6540,7 +5077,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 944
+  i32.const 840
   call $~lib/string/parseInt
   f64.const 5
   f64.ne
@@ -6552,7 +5089,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 976
+  i32.const 872
   call $~lib/string/parseInt
   f64.const 455
   f64.ne
@@ -6564,7 +5101,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1008
+  i32.const 904
   call $~lib/string/parseInt
   f64.const 3855
   f64.ne
@@ -6576,7 +5113,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1040
+  i32.const 936
   call $~lib/string/parseInt
   f64.const 3855
   f64.ne
@@ -6588,7 +5125,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1072
+  i32.const 968
   call $~lib/string/parseInt
   f64.const 11
   f64.ne
@@ -6600,7 +5137,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1096
+  i32.const 992
   call $~lib/string/parseInt
   f64.const 1
   f64.ne
@@ -6612,7 +5149,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 896
+  i32.const 792
   call $~lib/string/parseFloat
   f64.const 0
   f64.ne
@@ -6624,7 +5161,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 920
+  i32.const 816
   call $~lib/string/parseFloat
   f64.const 1
   f64.ne
@@ -6636,7 +5173,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1120
+  i32.const 1016
   call $~lib/string/parseFloat
   f64.const 0.1
   f64.ne
@@ -6648,7 +5185,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1144
+  i32.const 1040
   call $~lib/string/parseFloat
   f64.const 0.25
   f64.ne
@@ -6660,7 +5197,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1168
+  i32.const 1064
   call $~lib/string/parseFloat
   f64.const 0.1
   f64.ne
@@ -6673,12 +5210,12 @@
    unreachable
   end
   i32.const 160
-  i32.const 1200
+  i32.const 1096
   call $~lib/string/String.__concat
   local.tee $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $0
-  i32.const 1224
+  i32.const 1120
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6702,9 +5239,9 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 120
   i32.const 120
   call $~lib/string/String.__eq
@@ -6742,7 +5279,7 @@
    unreachable
   end
   i32.const 160
-  i32.const 1200
+  i32.const 1096
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6765,8 +5302,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1248
-  i32.const 1272
+  i32.const 1144
+  i32.const 1168
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6777,8 +5314,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1248
-  i32.const 1248
+  i32.const 1144
+  i32.const 1144
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6789,8 +5326,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1296
-  i32.const 1320
+  i32.const 1192
+  i32.const 1216
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6801,8 +5338,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1344
-  i32.const 1376
+  i32.const 1240
+  i32.const 1272
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6813,8 +5350,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1408
-  i32.const 1408
+  i32.const 1304
+  i32.const 1304
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -6825,8 +5362,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1408
-  i32.const 1440
+  i32.const 1304
+  i32.const 1336
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6837,8 +5374,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1472
-  i32.const 1512
+  i32.const 1368
+  i32.const 1408
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -6849,7 +5386,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1200
+  i32.const 1096
   i32.const 160
   call $~lib/string/String.__gt
   i32.eqz
@@ -6861,7 +5398,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
+  i32.const 1448
   i32.const 160
   call $~lib/string/String.__gt
   i32.eqz
@@ -6873,8 +5410,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1576
+  i32.const 1448
+  i32.const 1472
   call $~lib/string/String.__gte
   i32.eqz
   if
@@ -6885,8 +5422,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1224
+  i32.const 1448
+  i32.const 1120
   call $~lib/string/String.__gt
   i32.eqz
   if
@@ -6897,8 +5434,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1224
+  i32.const 1448
+  i32.const 1120
   call $~lib/string/String.__lt
   if
    i32.const 0
@@ -6908,7 +5445,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1200
+  i32.const 1096
   global.get $std/string/nullStr
   call $~lib/string/String.__lt
   if
@@ -6920,7 +5457,7 @@
    unreachable
   end
   global.get $std/string/nullStr
-  i32.const 1200
+  i32.const 1096
   call $~lib/string/String.__lt
   if
    i32.const 0
@@ -6930,7 +5467,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__gt
   i32.eqz
@@ -6943,7 +5480,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__lt
   i32.eqz
   if
@@ -6954,7 +5491,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__gte
   i32.eqz
@@ -6966,7 +5503,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__lte
   i32.eqz
   if
@@ -6977,7 +5514,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__lt
   if
@@ -6989,7 +5526,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__gt
   if
    i32.const 0
@@ -7055,7 +5592,7 @@
   local.tee $3
   call $~lib/string/String.__concat
   local.tee $4
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.tee $5
   call $~lib/string/String.__gt
   i32.eqz
@@ -7068,16 +5605,16 @@
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
-  i32.const 588
+  call $~lib/rt/pure/__release
+  i32.const 484
   i32.load
   i32.const 1
   i32.shr_u
@@ -7140,7 +5677,7 @@
   i32.const 2
   call $~lib/string/String#repeat
   local.tee $28
-  i32.const 1576
+  i32.const 1472
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7155,7 +5692,7 @@
   i32.const 3
   call $~lib/string/String#repeat
   local.tee $29
-  i32.const 1648
+  i32.const 1544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7166,11 +5703,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1224
+  i32.const 1120
   i32.const 4
   call $~lib/string/String#repeat
   local.tee $30
-  i32.const 1672
+  i32.const 1568
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7185,7 +5722,7 @@
   i32.const 5
   call $~lib/string/String#repeat
   local.tee $31
-  i32.const 1704
+  i32.const 1600
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7200,7 +5737,7 @@
   i32.const 6
   call $~lib/string/String#repeat
   local.tee $32
-  i32.const 1736
+  i32.const 1632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7215,7 +5752,7 @@
   i32.const 7
   call $~lib/string/String#repeat
   local.tee $33
-  i32.const 1768
+  i32.const 1664
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7226,16 +5763,16 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1800
+  i32.const 1696
   global.get $std/string/str
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $std/string/str
   global.get $std/string/str
   i32.const 0
   i32.const 2147483647
   call $~lib/string/String#slice
   local.tee $34
-  i32.const 1800
+  i32.const 1696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7251,7 +5788,7 @@
   i32.const 2147483647
   call $~lib/string/String#slice
   local.tee $35
-  i32.const 1848
+  i32.const 1744
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7267,7 +5804,7 @@
   i32.const 2147483647
   call $~lib/string/String#slice
   local.tee $36
-  i32.const 1872
+  i32.const 1768
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7283,7 +5820,7 @@
   i32.const 7
   call $~lib/string/String#slice
   local.tee $37
-  i32.const 1904
+  i32.const 1800
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7299,7 +5836,7 @@
   i32.const -6
   call $~lib/string/String#slice
   local.tee $38
-  i32.const 1936
+  i32.const 1832
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7331,7 +5868,7 @@
   i32.const -1
   call $~lib/string/String#slice
   local.tee $40
-  i32.const 1968
+  i32.const 1864
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7343,7 +5880,7 @@
    unreachable
   end
   i32.const 0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 120
   i32.const 0
   call $~lib/string/String#split
@@ -7360,7 +5897,7 @@
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7376,7 +5913,7 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 120
   i32.const 120
   call $~lib/string/String#split
@@ -7391,9 +5928,9 @@
    unreachable
   end
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 120
-  i32.const 776
+  i32.const 672
   call $~lib/string/String#split
   local.tee $1
   i32.load offset=12
@@ -7408,7 +5945,7 @@
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7424,9 +5961,9 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
-  i32.const 2344
-  i32.const 2376
+  call $~lib/rt/pure/__release
+  i32.const 2128
+  i32.const 2160
   call $~lib/string/String#split
   local.tee $1
   i32.load offset=12
@@ -7437,11 +5974,11 @@
    i32.const 0
    call $~lib/array/Array<~lib/string/String>#__get
    local.tee $2
-   i32.const 2344
+   i32.const 2128
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7457,9 +5994,9 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
-  i32.const 2344
-  i32.const 776
+  call $~lib/rt/pure/__release
+  i32.const 2128
+  i32.const 672
   call $~lib/string/String#split
   local.tee $1
   i32.load offset=12
@@ -7474,7 +6011,7 @@
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7485,11 +6022,11 @@
    i32.const 1
    call $~lib/array/Array<~lib/string/String>#__get
    local.tee $2
-   i32.const 1200
+   i32.const 1096
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7500,11 +6037,11 @@
    i32.const 2
    call $~lib/array/Array<~lib/string/String>#__get
    local.tee $2
-   i32.const 2400
+   i32.const 2184
    call $~lib/string/String.__eq
    local.set $0
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   else   
    i32.const 0
    local.set $0
@@ -7520,11 +6057,11 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   i32.const 0
   call $~lib/util/number/itoa32
   local.tee $0
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7538,7 +6075,7 @@
   i32.const 1
   call $~lib/util/number/itoa32
   local.tee $1
-  i32.const 920
+  i32.const 816
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7552,7 +6089,7 @@
   i32.const 8
   call $~lib/util/number/itoa32
   local.tee $2
-  i32.const 2872
+  i32.const 2656
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7566,7 +6103,7 @@
   i32.const 123
   call $~lib/util/number/itoa32
   local.tee $41
-  i32.const 592
+  i32.const 488
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7580,7 +6117,7 @@
   i32.const -1000
   call $~lib/util/number/itoa32
   local.tee $42
-  i32.const 2896
+  i32.const 2680
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7594,7 +6131,7 @@
   i32.const 1234
   call $~lib/util/number/itoa32
   local.tee $43
-  i32.const 2928
+  i32.const 2712
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7608,7 +6145,7 @@
   i32.const 12345
   call $~lib/util/number/itoa32
   local.tee $44
-  i32.const 2952
+  i32.const 2736
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7622,7 +6159,7 @@
   i32.const 123456
   call $~lib/util/number/itoa32
   local.tee $45
-  i32.const 2984
+  i32.const 2768
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7636,7 +6173,7 @@
   i32.const 1111111
   call $~lib/util/number/itoa32
   local.tee $46
-  i32.const 3016
+  i32.const 2800
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7650,7 +6187,7 @@
   i32.const 1234567
   call $~lib/util/number/itoa32
   local.tee $47
-  i32.const 3048
+  i32.const 2832
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7664,7 +6201,7 @@
   i32.const 2147483646
   call $~lib/util/number/itoa32
   local.tee $48
-  i32.const 3080
+  i32.const 2864
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7678,7 +6215,7 @@
   i32.const 2147483647
   call $~lib/util/number/itoa32
   local.tee $49
-  i32.const 3120
+  i32.const 2904
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7692,7 +6229,7 @@
   i32.const -2147483648
   call $~lib/util/number/itoa32
   local.tee $50
-  i32.const 3160
+  i32.const 2944
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7706,7 +6243,7 @@
   i32.const -1
   call $~lib/util/number/itoa32
   local.tee $51
-  i32.const 3200
+  i32.const 2984
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7720,7 +6257,7 @@
   i32.const 0
   call $~lib/util/number/utoa32
   local.tee $52
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7734,7 +6271,7 @@
   i32.const 1000
   call $~lib/util/number/utoa32
   local.tee $53
-  i32.const 3224
+  i32.const 3008
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7748,7 +6285,7 @@
   i32.const 2147483647
   call $~lib/util/number/utoa32
   local.tee $54
-  i32.const 3120
+  i32.const 2904
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7762,7 +6299,7 @@
   i32.const -2147483648
   call $~lib/util/number/utoa32
   local.tee $55
-  i32.const 3248
+  i32.const 3032
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7776,7 +6313,7 @@
   i32.const -1
   call $~lib/util/number/utoa32
   local.tee $56
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7790,7 +6327,7 @@
   i64.const 0
   call $~lib/util/number/utoa64
   local.tee $57
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7804,7 +6341,7 @@
   i64.const 1234
   call $~lib/util/number/utoa64
   local.tee $58
-  i32.const 2928
+  i32.const 2712
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7818,7 +6355,7 @@
   i64.const 99999999
   call $~lib/util/number/utoa64
   local.tee $59
-  i32.const 3328
+  i32.const 3112
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7832,7 +6369,7 @@
   i64.const 100000000
   call $~lib/util/number/utoa64
   local.tee $60
-  i32.const 3360
+  i32.const 3144
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7846,7 +6383,7 @@
   i64.const 4294967295
   call $~lib/util/number/utoa64
   local.tee $61
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7860,7 +6397,7 @@
   i64.const 68719476735
   call $~lib/util/number/utoa64
   local.tee $62
-  i32.const 3400
+  i32.const 3184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7874,7 +6411,7 @@
   i64.const 868719476735
   call $~lib/util/number/utoa64
   local.tee $63
-  i32.const 3440
+  i32.const 3224
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7888,7 +6425,7 @@
   i64.const 999868719476735
   call $~lib/util/number/utoa64
   local.tee $64
-  i32.const 3480
+  i32.const 3264
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7902,7 +6439,7 @@
   i64.const 9999868719476735
   call $~lib/util/number/utoa64
   local.tee $65
-  i32.const 3528
+  i32.const 3312
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7916,7 +6453,7 @@
   i64.const 19999868719476735
   call $~lib/util/number/utoa64
   local.tee $66
-  i32.const 3576
+  i32.const 3360
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7930,7 +6467,7 @@
   i64.const -1
   call $~lib/util/number/utoa64
   local.tee $67
-  i32.const 3632
+  i32.const 3416
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7944,7 +6481,7 @@
   i64.const 0
   call $~lib/util/number/itoa64
   local.tee $68
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7958,7 +6495,7 @@
   i64.const -1234
   call $~lib/util/number/itoa64
   local.tee $69
-  i32.const 3688
+  i32.const 3472
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7972,7 +6509,7 @@
   i64.const 4294967295
   call $~lib/util/number/itoa64
   local.tee $70
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7986,7 +6523,7 @@
   i64.const -4294967295
   call $~lib/util/number/itoa64
   local.tee $71
-  i32.const 3720
+  i32.const 3504
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8000,7 +6537,7 @@
   i64.const 68719476735
   call $~lib/util/number/itoa64
   local.tee $72
-  i32.const 3400
+  i32.const 3184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8014,7 +6551,7 @@
   i64.const -68719476735
   call $~lib/util/number/itoa64
   local.tee $73
-  i32.const 3760
+  i32.const 3544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8028,7 +6565,7 @@
   i64.const -868719476735
   call $~lib/util/number/itoa64
   local.tee $74
-  i32.const 3800
+  i32.const 3584
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8042,7 +6579,7 @@
   i64.const -999868719476735
   call $~lib/util/number/itoa64
   local.tee $75
-  i32.const 3848
+  i32.const 3632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8056,7 +6593,7 @@
   i64.const -19999868719476735
   call $~lib/util/number/itoa64
   local.tee $76
-  i32.const 3896
+  i32.const 3680
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8070,7 +6607,7 @@
   i64.const 9223372036854775807
   call $~lib/util/number/itoa64
   local.tee $77
-  i32.const 3952
+  i32.const 3736
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8084,7 +6621,7 @@
   i64.const -9223372036854775808
   call $~lib/util/number/itoa64
   local.tee $78
-  i32.const 4008
+  i32.const 3792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8098,7 +6635,7 @@
   f64.const 0
   call $~lib/util/number/dtoa
   local.tee $79
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8112,7 +6649,7 @@
   f64.const -0
   call $~lib/util/number/dtoa
   local.tee $80
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8126,7 +6663,7 @@
   f64.const nan:0x8000000000000
   call $~lib/util/number/dtoa
   local.tee $81
-  i32.const 4088
+  i32.const 3872
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8140,7 +6677,7 @@
   f64.const inf
   call $~lib/util/number/dtoa
   local.tee $82
-  i32.const 4152
+  i32.const 3936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8154,7 +6691,7 @@
   f64.const -inf
   call $~lib/util/number/dtoa
   local.tee $83
-  i32.const 4112
+  i32.const 3896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8168,7 +6705,7 @@
   f64.const 2.220446049250313e-16
   call $~lib/util/number/dtoa
   local.tee $84
-  i32.const 5240
+  i32.const 5024
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8182,7 +6719,7 @@
   f64.const -2.220446049250313e-16
   call $~lib/util/number/dtoa
   local.tee $85
-  i32.const 5304
+  i32.const 5088
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8196,7 +6733,7 @@
   f64.const 1797693134862315708145274e284
   call $~lib/util/number/dtoa
   local.tee $86
-  i32.const 5368
+  i32.const 5152
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8210,7 +6747,7 @@
   f64.const -1797693134862315708145274e284
   call $~lib/util/number/dtoa
   local.tee $87
-  i32.const 5432
+  i32.const 5216
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8224,7 +6761,7 @@
   f64.const 4185580496821356722454785e274
   call $~lib/util/number/dtoa
   local.tee $88
-  i32.const 5496
+  i32.const 5280
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8238,7 +6775,7 @@
   f64.const 2.2250738585072014e-308
   call $~lib/util/number/dtoa
   local.tee $89
-  i32.const 5560
+  i32.const 5344
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8252,7 +6789,7 @@
   f64.const 4.940656e-318
   call $~lib/util/number/dtoa
   local.tee $90
-  i32.const 5624
+  i32.const 5408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8266,7 +6803,7 @@
   f64.const 9060801153433600
   call $~lib/util/number/dtoa
   local.tee $91
-  i32.const 5672
+  i32.const 5456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8280,7 +6817,7 @@
   f64.const 4708356024711512064
   call $~lib/util/number/dtoa
   local.tee $92
-  i32.const 5728
+  i32.const 5512
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8294,7 +6831,7 @@
   f64.const 9409340012568248320
   call $~lib/util/number/dtoa
   local.tee $93
-  i32.const 5792
+  i32.const 5576
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8308,7 +6845,7 @@
   f64.const 5e-324
   call $~lib/util/number/dtoa
   local.tee $94
-  i32.const 5856
+  i32.const 5640
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8322,7 +6859,7 @@
   f64.const 1
   call $~lib/util/number/dtoa
   local.tee $95
-  i32.const 5888
+  i32.const 5672
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8336,7 +6873,7 @@
   f64.const 0.1
   call $~lib/util/number/dtoa
   local.tee $96
-  i32.const 1120
+  i32.const 1016
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8350,7 +6887,7 @@
   f64.const -1
   call $~lib/util/number/dtoa
   local.tee $97
-  i32.const 5912
+  i32.const 5696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8364,7 +6901,7 @@
   f64.const -0.1
   call $~lib/util/number/dtoa
   local.tee $98
-  i32.const 5936
+  i32.const 5720
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8378,7 +6915,7 @@
   f64.const 1e6
   call $~lib/util/number/dtoa
   local.tee $99
-  i32.const 5960
+  i32.const 5744
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8392,7 +6929,7 @@
   f64.const 1e-06
   call $~lib/util/number/dtoa
   local.tee $100
-  i32.const 6000
+  i32.const 5784
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8406,7 +6943,7 @@
   f64.const -1e6
   call $~lib/util/number/dtoa
   local.tee $101
-  i32.const 6032
+  i32.const 5816
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8420,7 +6957,7 @@
   f64.const -1e-06
   call $~lib/util/number/dtoa
   local.tee $102
-  i32.const 6072
+  i32.const 5856
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8434,7 +6971,7 @@
   f64.const 1e7
   call $~lib/util/number/dtoa
   local.tee $103
-  i32.const 6112
+  i32.const 5896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8448,7 +6985,7 @@
   f64.const 1e-07
   call $~lib/util/number/dtoa
   local.tee $104
-  i32.const 6152
+  i32.const 5936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8462,7 +6999,7 @@
   f64.const 1.e+308
   call $~lib/util/number/dtoa
   local.tee $105
-  i32.const 6176
+  i32.const 5960
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8476,7 +7013,7 @@
   f64.const -1.e+308
   call $~lib/util/number/dtoa
   local.tee $106
-  i32.const 6208
+  i32.const 5992
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8490,7 +7027,7 @@
   f64.const inf
   call $~lib/util/number/dtoa
   local.tee $107
-  i32.const 4152
+  i32.const 3936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8504,7 +7041,7 @@
   f64.const -inf
   call $~lib/util/number/dtoa
   local.tee $108
-  i32.const 4112
+  i32.const 3896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8518,7 +7055,7 @@
   f64.const 1e-308
   call $~lib/util/number/dtoa
   local.tee $109
-  i32.const 6240
+  i32.const 6024
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8532,7 +7069,7 @@
   f64.const -1e-308
   call $~lib/util/number/dtoa
   local.tee $110
-  i32.const 6272
+  i32.const 6056
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8546,7 +7083,7 @@
   f64.const 1e-323
   call $~lib/util/number/dtoa
   local.tee $111
-  i32.const 6304
+  i32.const 6088
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8560,7 +7097,7 @@
   f64.const -1e-323
   call $~lib/util/number/dtoa
   local.tee $112
-  i32.const 6336
+  i32.const 6120
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8574,7 +7111,7 @@
   f64.const 0
   call $~lib/util/number/dtoa
   local.tee $113
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8588,7 +7125,7 @@
   f64.const 4294967272
   call $~lib/util/number/dtoa
   local.tee $114
-  i32.const 6368
+  i32.const 6152
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8602,7 +7139,7 @@
   f64.const 1.2312145673456234e-08
   call $~lib/util/number/dtoa
   local.tee $115
-  i32.const 6408
+  i32.const 6192
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8616,7 +7153,7 @@
   f64.const 555555555.5555556
   call $~lib/util/number/dtoa
   local.tee $116
-  i32.const 6472
+  i32.const 6256
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8630,7 +7167,7 @@
   f64.const 0.9999999999999999
   call $~lib/util/number/dtoa
   local.tee $117
-  i32.const 6528
+  i32.const 6312
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8644,7 +7181,7 @@
   f64.const 1
   call $~lib/util/number/dtoa
   local.tee $118
-  i32.const 5888
+  i32.const 5672
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8658,7 +7195,7 @@
   f64.const 12.34
   call $~lib/util/number/dtoa
   local.tee $119
-  i32.const 6584
+  i32.const 6368
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8672,7 +7209,7 @@
   f64.const 0.3333333333333333
   call $~lib/util/number/dtoa
   local.tee $120
-  i32.const 6616
+  i32.const 6400
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8686,7 +7223,7 @@
   f64.const 1234e17
   call $~lib/util/number/dtoa
   local.tee $121
-  i32.const 6672
+  i32.const 6456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8700,7 +7237,7 @@
   f64.const 1234e18
   call $~lib/util/number/dtoa
   local.tee $122
-  i32.const 6736
+  i32.const 6520
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8714,7 +7251,7 @@
   f64.const 2.71828
   call $~lib/util/number/dtoa
   local.tee $123
-  i32.const 6776
+  i32.const 6560
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8728,7 +7265,7 @@
   f64.const 0.0271828
   call $~lib/util/number/dtoa
   local.tee $124
-  i32.const 6808
+  i32.const 6592
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8742,7 +7279,7 @@
   f64.const 271.828
   call $~lib/util/number/dtoa
   local.tee $125
-  i32.const 6848
+  i32.const 6632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8756,7 +7293,7 @@
   f64.const 1.1e+128
   call $~lib/util/number/dtoa
   local.tee $126
-  i32.const 6880
+  i32.const 6664
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8770,7 +7307,7 @@
   f64.const 1.1e-64
   call $~lib/util/number/dtoa
   local.tee $127
-  i32.const 6912
+  i32.const 6696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8784,7 +7321,7 @@
   f64.const 0.000035689
   call $~lib/util/number/dtoa
   local.tee $128
-  i32.const 6944
+  i32.const 6728
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8796,274 +7333,1768 @@
    unreachable
   end
   global.get $std/string/str
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $29
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $30
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $31
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $32
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $33
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $34
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $35
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $36
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $37
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $38
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $39
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $40
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $41
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $42
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $43
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $44
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $45
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $46
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $47
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $48
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $49
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $50
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $51
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $52
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $53
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $54
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $55
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $56
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $57
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $58
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $59
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $60
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $61
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $62
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $63
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $64
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $65
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $66
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $67
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $68
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $69
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $70
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $71
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $72
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $73
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $74
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $75
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $76
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $77
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $78
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $79
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $80
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $81
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $82
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $83
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $84
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $85
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $86
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $87
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $88
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $89
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $90
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $91
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $92
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $93
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $94
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $95
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $96
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $97
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $98
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $99
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $100
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $101
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $102
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $103
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $104
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $105
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $106
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $107
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $108
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $109
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $110
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $111
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $112
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $113
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $114
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $115
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $116
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $117
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $118
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $119
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $120
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $121
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $122
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $123
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $124
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $125
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $126
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $127
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $128
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/string/getString (; 71 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/string/getString (; 49 ;) (type $FUNCSIG$i) (result i32)
   global.get $std/string/str
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $start (; 72 ;) (type $FUNCSIG$v)
+ (func $start (; 50 ;) (type $FUNCSIG$v)
   call $start:std/string
  )
- (func $~lib/rt/purerc/markGray (; 73 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 51 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $2
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $3
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $2
+   local.get $3
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=20
+  local.set $4
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  if
+   local.get $5
+   local.get $4
+   i32.store offset=20
+  end
+  local.get $4
+  if
+   local.get $4
+   local.get $5
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.get $1
+  i32.eq
+  if
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $2
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   local.get $4
+   i32.store offset=96
+   local.get $4
+   i32.eqz
+   if
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    local.get $3
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    i32.const 1
+    local.get $2
+    i32.shl
+    i32.const -1
+    i32.xor
+    i32.and
+    local.tee $1
+    i32.store offset=4
+    local.get $1
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $3
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 52 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.tee $3
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $2
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $3
+    i32.const 3
+    i32.and
+    local.get $2
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $1
+    i32.const 16
+    i32.add
+    local.get $1
+    i32.load
+    i32.const -4
+    i32.and
+    i32.add
+    local.tee $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $3
+  i32.const 2
+  i32.and
+  if
+   local.get $1
+   i32.const 4
+   i32.sub
+   i32.load
+   local.tee $2
+   i32.load
+   local.tee $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $7
+   i32.const 1073741808
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    local.get $2
+    call $~lib/rt/tlsf/removeBlock
+    local.get $2
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $3
+    i32.store
+    local.get $2
+   else    
+    local.get $1
+   end
+   local.set $1
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $3
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $2
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  i32.add
+  i32.ne
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $2
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $2
+   i32.const 4
+   i32.shr_u
+   local.set $4
+   i32.const 0
+  else   
+   local.get $2
+   i32.const 31
+   local.get $2
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $4
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $3
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $4
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=96
+  local.set $2
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $2
+  i32.store offset=20
+  local.get $2
+  if
+   local.get $2
+   local.get $1
+   i32.store offset=16
+  end
+  local.get $3
+  i32.const 4
+  i32.shl
+  local.get $4
+  i32.add
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $1
+  i32.store offset=96
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $3
+  i32.shl
+  i32.or
+  i32.store
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const 1
+  local.get $4
+  i32.shl
+  i32.or
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/addMemory (; 53 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $1
+  local.get $2
+  i32.le_u
+  select
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=1568
+  local.tee $3
+  if
+   local.get $1
+   local.get $3
+   i32.const 16
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $3
+   i32.eq
+   if
+    local.get $3
+    i32.load
+    local.set $4
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.lt_u
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.tee $2
+  i32.const 48
+  i32.lt_u
+  if
+   return
+  end
+  local.get $1
+  local.get $4
+  i32.const 2
+  i32.and
+  local.get $2
+  i32.const 32
+  i32.sub
+  i32.const 1
+  i32.or
+  i32.or
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $2
+  i32.add
+  i32.const 16
+  i32.sub
+  local.tee $2
+  i32.const 2
+  i32.store
+  local.get $0
+  local.get $2
+  i32.store offset=1568
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 54 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 1
+  current_memory
+  local.tee $0
+  i32.gt_s
+  if (result i32)
+   i32.const 1
+   local.get $0
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  i32.const 7120
+  i32.const 0
+  i32.store
+  i32.const 8688
+  i32.const 0
+  i32.store
+  i32.const 0
+  local.set $0
+  loop $repeat|0
+   block $break|0
+    local.get $0
+    i32.const 23
+    i32.ge_u
+    br_if $break|0
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.const 7120
+    i32.add
+    i32.const 0
+    i32.store offset=4
+    i32.const 0
+    local.set $1
+    loop $repeat|1
+     block $break|1
+      local.get $1
+      i32.const 16
+      i32.ge_u
+      br_if $break|1
+      local.get $0
+      i32.const 4
+      i32.shl
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.shl
+      i32.const 7120
+      i32.add
+      i32.const 0
+      i32.store offset=96
+      local.get $1
+      i32.const 1
+      i32.add
+      local.set $1
+      br $repeat|1
+     end
+    end
+    local.get $0
+    i32.const 1
+    i32.add
+    local.set $0
+    br $repeat|0
+   end
+  end
+  i32.const 7120
+  i32.const 8704
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  i32.const 7120
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 55 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 6816
+   i32.const 6768
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $0
+  i32.const 16
+  local.get $0
+  i32.const 16
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 56 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+   i32.const 0
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    local.get $1
+    i32.add
+    i32.const 1
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+  end
+  local.tee $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $1
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 2
+  i32.shl
+  local.get $0
+  i32.add
+  i32.load offset=4
+  i32.const -1
+  local.get $1
+  i32.shl
+  i32.and
+  local.tee $1
+  if (result i32)
+   local.get $1
+   i32.ctz
+   local.get $2
+   i32.const 4
+   i32.shl
+   i32.add
+   i32.const 2
+   i32.shl
+   local.get $0
+   i32.add
+   i32.load offset=96
+  else   
+   local.get $0
+   i32.load
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.tee $1
+   if (result i32)
+    local.get $1
+    i32.ctz
+    local.tee $1
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=4
+    local.tee $2
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 6768
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.ctz
+    local.get $1
+    i32.const 4
+    i32.shl
+    i32.add
+    i32.const 2
+    i32.shl
+    local.get $0
+    i32.add
+    i32.load offset=96
+   else    
+    i32.const 0
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/growMemory (; 57 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  current_memory
+  local.tee $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const -65536
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.tee $1
+  local.get $2
+  local.get $1
+  i32.gt_s
+  select
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $1
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 58 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   i32.const 2
+   i32.and
+   local.get $2
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 59 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  call $~lib/rt/tlsf/searchBlock
+  local.tee $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $3
+   call $~lib/rt/tlsf/searchBlock
+   local.tee $2
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  i32.load
+  i32.const -4
+  i32.and
+  local.get $3
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 0
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $2
+ )
+ (func $~lib/rt/tlsf/__alloc (; 60 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.tee $2
+  if (result i32)
+   local.get $2
+  else   
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+  end
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/reallocateBlock (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
+  local.set $3
+  local.get $1
+  i32.load
+  local.tee $4
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 491
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  local.get $4
+  i32.const -4
+  i32.and
+  i32.le_u
+  if
+   local.get $0
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
+   local.get $1
+   local.get $2
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $6
+  i32.load
+  local.tee $5
+  i32.const 1
+  i32.and
+  if
+   local.get $4
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $5
+   local.get $3
+   i32.ge_u
+   if
+    local.get $0
+    local.get $6
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    i32.const 3
+    i32.and
+    local.get $5
+    i32.or
+    i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
+    local.get $0
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
+   end
+  end
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $3
+  local.get $1
+  i32.load offset=4
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.load offset=8
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  call $~lib/memory/memory.copy
+  local.get $1
+  local.get $4
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__realloc (; 62 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 552
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 553
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/freeBlock (; 63 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.tee $2
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 530
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+ )
+ (func $~lib/rt/tlsf/__free (; 64 ;) (type $FUNCSIG$vi) (param $0 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 560
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 561
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/increment (; 65 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $1
+  i32.const -268435456
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const -268435456
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 66 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  i32.const 7120
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/__typeinfo (; 67 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  if (result i32)
+   local.get $0
+   i32.const 6944
+   i32.load
+   i32.gt_u
+  else   
+   i32.const 1
+  end
+  if
+   i32.const 2072
+   i32.const 6920
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 3
+  i32.shl
+  i32.const 6944
+  i32.add
+  i32.load
+ )
+ (func $~lib/rt/pure/growRoots (; 68 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/pure/CUR
+  global.get $~lib/rt/pure/ROOTS
+  local.tee $2
+  i32.sub
+  local.tee $1
+  i32.const 1
+  i32.shl
+  local.tee $0
+  i32.const 256
+  local.get $0
+  i32.const 256
+  i32.gt_u
+  select
+  local.tee $3
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.tee $0
+  local.get $2
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $0
+  global.set $~lib/rt/pure/ROOTS
+  local.get $0
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $0
+  local.get $3
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 69 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.tee $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 70 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  i32.const 268435455
+  i32.and
+  local.set $1
+  local.get $0
+  call $~lib/rt/pure/onDecrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $2
+   i32.const -2147483648
+   i32.and
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.store offset=4
+   else    
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   end
+  else   
+   local.get $1
+   i32.const 0
+   i32.le_u
+   if
+    i32.const 0
+    i32.const 6872
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   if
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.get $2
+    i32.const -268435456
+    i32.and
+    i32.or
+    i32.store offset=4
+   else    
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    i32.const -1342177280
+    i32.or
+    i32.store offset=4
+    local.get $2
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   end
+  end
+ )
+ (func $~lib/rt/pure/__retainRelease (; 71 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.ne
+  if
+   local.get $0
+   i32.const 7120
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/increment
+   end
+   local.get $1
+   i32.const 7120
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (; 72 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  i32.const 7120
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 73 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  i32.load offset=4
+  local.tee $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $0
+  loop $continue|0
+   local.get $2
+   local.get $0
+   i32.lt_u
+   if
+    local.get $2
+    i32.load
+    local.tee $3
+    if
+     local.get $3
+     local.get $1
+     call $~lib/rt/pure/__visit
+    end
+    local.get $2
+    i32.const 4
+    i32.add
+    local.set $2
+    br $continue|0
+   end
+  end
+ )
+ (func $~lib/rt/pure/markGray (; 74 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9084,10 +9115,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 74 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 75 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -9098,9 +9129,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 75 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 76 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9117,7 +9148,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -9130,11 +9161,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 76 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 77 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -9156,15 +9187,15 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 77 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   local.get $0
-  i32.const 7144
+  i32.const 7120
   i32.lt_u
   if
    return
@@ -9196,7 +9227,7 @@
          br $case5|0
         end
         local.get $0
-        call $~lib/rt/purerc/decrement
+        call $~lib/rt/pure/decrement
         br $break|0
        end
        local.get $0
@@ -9207,7 +9238,7 @@
        i32.le_u
        if
         i32.const 0
-        i32.const 2016
+        i32.const 6872
         i32.const 74
         i32.const 17
         call $~lib/builtins/abort
@@ -9220,11 +9251,11 @@
        i32.sub
        i32.store offset=4
        local.get $0
-       call $~lib/rt/purerc/markGray
+       call $~lib/rt/pure/markGray
        br $break|0
       end
       local.get $0
-      call $~lib/rt/purerc/scan
+      call $~lib/rt/pure/scan
       br $break|0
      end
      local.get $0
@@ -9240,7 +9271,7 @@
      i32.ne
      if
       i32.const 0
-      i32.const 2016
+      i32.const 6872
       i32.const 85
       i32.const 6
       call $~lib/builtins/abort
@@ -9256,54 +9287,23 @@
      i32.and
      if
       local.get $0
-      call $~lib/rt/purerc/scanBlack
+      call $~lib/rt/pure/scanBlack
      end
      br $break|0
     end
     local.get $0
-    call $~lib/rt/purerc/collectWhite
+    call $~lib/rt/pure/collectWhite
     br $break|0
    end
    i32.const 0
-   i32.const 2016
+   i32.const 6872
    i32.const 96
    i32.const 24
    call $~lib/builtins/abort
    unreachable
   end
  )
- (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 78 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  i32.load offset=4
-  local.tee $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $0
-  loop $continue|0
-   local.get $2
-   local.get $0
-   i32.lt_u
-   if
-    local.get $2
-    i32.load
-    local.tee $3
-    if
-     local.get $3
-     local.get $1
-     call $~lib/rt/purerc/__visit
-    end
-    local.get $2
-    i32.const 4
-    i32.add
-    local.set $2
-    br $continue|0
-   end
-  end
- )
- (func $~lib/builtins/__visit_members (; 79 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 79 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   block $block$16$break
    block $switch$1$case$19
     block $switch$1$case$3
@@ -9330,7 +9330,7 @@
   if
    local.get $0
    local.get $1
-   call $~lib/rt/purerc/__visit
+   call $~lib/rt/pure/__visit
   end
  )
  (func $null (; 80 ;) (type $FUNCSIG$v)
diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat
index 98b53ceb..3429f118 100644
--- a/tests/compiler/std/string.untouched.wat
+++ b/tests/compiler/std/string.untouched.wat
@@ -2,194 +2,190 @@
  (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$ii (func (param i32) (result i32)))
  (type $FUNCSIG$iii (func (param i32 i32) (result i32)))
- (type $FUNCSIG$v (func))
- (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
- (type $FUNCSIG$vii (func (param i32 i32)))
- (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
+ (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
+ (type $FUNCSIG$viii (func (param i32 i32 i32)))
  (type $FUNCSIG$dii (func (param i32 i32) (result f64)))
  (type $FUNCSIG$di (func (param i32) (result f64)))
  (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32)))
- (type $FUNCSIG$vi (func (param i32)))
  (type $FUNCSIG$ij (func (param i64) (result i32)))
  (type $FUNCSIG$viji (func (param i32 i64 i32)))
  (type $FUNCSIG$id (func (param f64) (result i32)))
  (type $FUNCSIG$iid (func (param i32 f64) (result i32)))
  (type $FUNCSIG$jii (func (param i32 i32) (result i64)))
  (type $FUNCSIG$iijijiji (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
+ (type $FUNCSIG$v (func))
  (type $FUNCSIG$i (func (result i32)))
+ (type $FUNCSIG$vii (func (param i32 i32)))
+ (type $FUNCSIG$vi (func (param i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
- (import "rtrace" "retain" (func $~lib/rt/purerc/onIncrement (param i32)))
  (import "rtrace" "free" (func $~lib/rt/tlsf/onFree (param i32)))
- (import "rtrace" "release" (func $~lib/rt/purerc/onDecrement (param i32)))
+ (import "rtrace" "retain" (func $~lib/rt/pure/onIncrement (param i32)))
+ (import "rtrace" "release" (func $~lib/rt/pure/onDecrement (param i32)))
  (memory $0 1)
  (data (i32.const 8) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00")
  (data (i32.const 56) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
  (data (i32.const 104) "\00\00\00\00\01\00\00\00\10\00\00\00\00\00\00\00")
  (data (i32.const 120) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00\00\00")
  (data (i32.const 144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00a\00")
- (data (i32.const 168) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
- (data (i32.const 216) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
- (data (i32.const 272) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006\00")
- (data (i32.const 296) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
- (data (i32.const 344) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df")
- (data (i32.const 368) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i\00")
- (data (i32.const 392) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00")
- (data (i32.const 416) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g\00")
- (data (i32.const 448) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m\00")
- (data (i32.const 472) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 \00")
- (data (i32.const 496) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 \00")
- (data (i32.const 520) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00")
- (data (i32.const 544) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c\00")
- (data (i32.const 576) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003\00")
- (data (i32.const 600) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c\00")
- (data (i32.const 632) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c\00")
- (data (i32.const 664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 \00")
- (data (i32.const 696) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c\00")
- (data (i32.const 728) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b\00")
- (data (i32.const 760) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00")
- (data (i32.const 784) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x\00")
- (data (i32.const 808) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I\00")
- (data (i32.const 832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g\00")
- (data (i32.const 856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i\00")
- (data (i32.const 880) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00")
- (data (i32.const 904) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001\00")
- (data (i32.const 928) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001\00")
- (data (i32.const 960) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007\00")
- (data (i32.const 992) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f\00")
- (data (i32.const 1024) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F\00")
- (data (i32.const 1056) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001\00")
- (data (i32.const 1080) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g\00")
- (data (i32.const 1104) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001\00")
- (data (i32.const 1128) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005\00")
- (data (i32.const 1152) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r\00")
- (data (i32.const 1184) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00")
- (data (i32.const 1208) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00")
- (data (i32.const 1232) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001\00")
- (data (i32.const 1256) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002\00")
- (data (i32.const 1280) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001\00")
- (data (i32.const 1304) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002\00")
- (data (i32.const 1328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002\00")
- (data (i32.const 1360) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001\00")
- (data (i32.const 1392) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80")
- (data (i32.const 1424) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0")
- (data (i32.const 1456) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l\00")
- (data (i32.const 1496) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l\00")
- (data (i32.const 1536) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00")
- (data (i32.const 1560) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a\00")
- (data (i32.const 1584) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00")
- (data (i32.const 1632) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a\00")
- (data (i32.const 1656) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00")
- (data (i32.const 1688) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a\00")
- (data (i32.const 1720) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a\00")
- (data (i32.const 1752) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a\00")
- (data (i32.const 1784) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00")
- (data (i32.const 1832) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n\00")
- (data (i32.const 1856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n\00")
- (data (i32.const 1888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g\00")
- (data (i32.const 1920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h\00")
- (data (i32.const 1952) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00")
- (data (i32.const 2000) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00r\00c\00.\00t\00s\00")
- (data (i32.const 2056) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
- (data (i32.const 2104) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
- (data (i32.const 2160) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00c\00o\00m\00m\00o\00n\00.\00t\00s\00")
- (data (i32.const 2216) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00")
- (data (i32.const 2328) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c\00")
- (data (i32.const 2360) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.\00")
- (data (i32.const 2384) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c\00")
- (data (i32.const 2408) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
- (data (i32.const 2824) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00x\t\00\00x\t\00\00\90\01\00\00d\00\00\00")
- (data (i32.const 2856) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008\00")
- (data (i32.const 2880) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000\00")
- (data (i32.const 2912) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004\00")
- (data (i32.const 2936) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005\00")
- (data (i32.const 2968) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006\00")
- (data (i32.const 3000) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001\00")
- (data (i32.const 3032) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007\00")
- (data (i32.const 3064) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006\00")
- (data (i32.const 3104) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007\00")
- (data (i32.const 3144) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008\00")
- (data (i32.const 3184) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001\00")
- (data (i32.const 3208) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000\00")
- (data (i32.const 3232) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008\00")
- (data (i32.const 3272) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005\00")
- (data (i32.const 3312) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009\00")
- (data (i32.const 3344) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000\00")
- (data (i32.const 3384) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3424) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3464) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3512) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3560) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3616) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00")
- (data (i32.const 3672) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004\00")
- (data (i32.const 3704) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005\00")
- (data (i32.const 3744) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3784) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3832) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3880) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
- (data (i32.const 3936) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00")
- (data (i32.const 3992) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008\00")
- (data (i32.const 4048) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00")
- (data (i32.const 4072) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00")
- (data (i32.const 4096) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
- (data (i32.const 4136) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
- (data (i32.const 4168) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
- (data (i32.const 4880) "\10\00\00\00\01\00\00\00\14\00\00\00\10\00\00\00X\10\00\00X\10\00\00\b8\02\00\00W\00\00\00")
- (data (i32.const 4912) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
- (data (i32.const 5104) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00@\13\00\00@\13\00\00\ae\00\00\00W\00\00\00")
- (data (i32.const 5136) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
- (data (i32.const 5192) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00 \14\00\00 \14\00\00(\00\00\00\n\00\00\00")
- (data (i32.const 5224) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
- (data (i32.const 5288) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
- (data (i32.const 5352) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008\00")
- (data (i32.const 5416) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008\00")
- (data (i32.const 5480) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\004\00.\001\008\005\005\008\000\004\009\006\008\002\001\003\005\007\00e\00+\002\009\008\00")
- (data (i32.const 5544) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\002\00.\002\002\005\000\007\003\008\005\008\005\000\007\002\000\001\004\00e\00-\003\000\008\00")
- (data (i32.const 5608) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\004\00.\009\004\000\006\005\006\00e\00-\003\001\008\00")
- (data (i32.const 5656) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\009\000\006\000\008\000\001\001\005\003\004\003\003\006\000\000\00.\000\00")
- (data (i32.const 5712) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\004\007\000\008\003\005\006\000\002\004\007\001\001\005\001\002\000\000\000\00.\000\00")
- (data (i32.const 5776) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\009\004\000\009\003\004\000\000\001\002\005\006\008\002\004\008\000\000\000\00.\000\00")
- (data (i32.const 5840) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\005\00e\00-\003\002\004\00")
- (data (i32.const 5872) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00.\000\00")
- (data (i32.const 5896) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\001\00.\000\00")
- (data (i32.const 5920) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\000\00.\001\00")
- (data (i32.const 5944) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\00.\000\00")
- (data (i32.const 5984) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\000\00.\000\000\000\000\000\001\00")
- (data (i32.const 6016) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00-\001\000\000\000\000\000\000\00.\000\00")
- (data (i32.const 6056) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\000\00.\000\000\000\000\000\001\00")
- (data (i32.const 6096) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\001\000\000\000\000\000\000\000\00.\000\00")
- (data (i32.const 6136) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\00e\00-\007\00")
- (data (i32.const 6160) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00+\003\000\008\00")
- (data (i32.const 6192) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00+\003\000\008\00")
- (data (i32.const 6224) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\000\008\00")
- (data (i32.const 6256) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\000\008\00")
- (data (i32.const 6288) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\002\003\00")
- (data (i32.const 6320) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\002\003\00")
- (data (i32.const 6352) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\004\002\009\004\009\006\007\002\007\002\00.\000\00")
- (data (i32.const 6392) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\001\00.\002\003\001\002\001\004\005\006\007\003\004\005\006\002\003\004\00e\00-\008\00")
- (data (i32.const 6456) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\005\005\005\005\005\005\005\005\005\00.\005\005\005\005\005\005\006\00")
- (data (i32.const 6512) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\00")
- (data (i32.const 6568) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\00.\003\004\00")
- (data (i32.const 6600) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\00")
- (data (i32.const 6656) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\002\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00.\000\00")
- (data (i32.const 6720) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00.\002\003\004\00e\00+\002\001\00")
- (data (i32.const 6760) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\00.\007\001\008\002\008\00")
- (data (i32.const 6792) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\000\00.\000\002\007\001\008\002\008\00")
- (data (i32.const 6832) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\007\001\00.\008\002\008\00")
- (data (i32.const 6864) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008\00")
- (data (i32.const 6896) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004\00")
- (data (i32.const 6928) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009\00")
- (data (i32.const 6968) "\15\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00")
+ (data (i32.const 168) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\006\00")
+ (data (i32.const 192) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
+ (data (i32.const 240) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\004\d8\06\df")
+ (data (i32.const 264) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00h\00i\00")
+ (data (i32.const 288) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00n\00u\00l\00l\00")
+ (data (i32.const 312) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00s\00t\00r\00i\00n\00g\00")
+ (data (i32.const 344) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00I\00\'\00m\00")
+ (data (i32.const 368) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00 \00")
+ (data (i32.const 392) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00 \00 \00 \00")
+ (data (i32.const 416) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00b\00c\00")
+ (data (i32.const 440) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00 \00 \00a\00b\00c\00")
+ (data (i32.const 472) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\002\003\00")
+ (data (i32.const 496) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\00a\00b\00c\00")
+ (data (i32.const 528) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\002\003\001\002\00a\00b\00c\00")
+ (data (i32.const 560) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00b\00c\00 \00 \00")
+ (data (i32.const 592) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00b\00c\00a\00b\00c\00")
+ (data (i32.const 624) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00c\00a\00b\00c\00a\00b\00")
+ (data (i32.const 656) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00,\00")
+ (data (i32.const 680) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00x\00")
+ (data (i32.const 704) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00,\00 \00I\00")
+ (data (i32.const 728) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00g\00")
+ (data (i32.const 752) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00i\00")
+ (data (i32.const 776) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\000\00")
+ (data (i32.const 800) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\001\00")
+ (data (i32.const 824) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00b\001\000\001\00")
+ (data (i32.const 856) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00o\007\000\007\00")
+ (data (i32.const 888) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00f\000\00f\00")
+ (data (i32.const 920) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\000\00x\00F\000\00F\00")
+ (data (i32.const 952) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\001\001\00")
+ (data (i32.const 976) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\000\00x\001\00g\00")
+ (data (i32.const 1000) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\001\00")
+ (data (i32.const 1024) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00.\002\005\00")
+ (data (i32.const 1048) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00.\001\00f\00o\00o\00b\00a\00r\00")
+ (data (i32.const 1080) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00b\00")
+ (data (i32.const 1104) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00b\00")
+ (data (i32.const 1128) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\001\00")
+ (data (i32.const 1152) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00k\00e\00y\002\00")
+ (data (i32.const 1176) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\001\00")
+ (data (i32.const 1200) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00k\00e\002\00")
+ (data (i32.const 1224) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\002\00")
+ (data (i32.const 1256) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00k\00e\00y\001\001\00")
+ (data (i32.const 1288) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a40\ed0\cf0\cb0\db0\d80\c80")
+ (data (i32.const 1320) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00\a60\f00\ce0\aa0\af0\e40\de0")
+ (data (i32.const 1352) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00D\00\19 f\00h\00u\00a\00s\00c\00a\00i\00l\00")
+ (data (i32.const 1392) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00D\00\19 \1f\1eu\00a\00s\00c\00a\00i\00l\00")
+ (data (i32.const 1432) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00b\00a\00")
+ (data (i32.const 1456) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00a\00a\00")
+ (data (i32.const 1480) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00")
+ (data (i32.const 1528) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00a\00a\00a\00")
+ (data (i32.const 1552) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00a\00b\00a\00b\00a\00b\00a\00b\00")
+ (data (i32.const 1584) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00a\00a\00a\00a\00")
+ (data (i32.const 1616) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\00a\00a\00a\00a\00a\00a\00")
+ (data (i32.const 1648) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00a\00a\00a\00a\00a\00a\00a\00")
+ (data (i32.const 1680) "\1c\00\00\00\01\00\00\00\10\00\00\00\1c\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00")
+ (data (i32.const 1728) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00n\00")
+ (data (i32.const 1752) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00j\00k\00l\00m\00n\00")
+ (data (i32.const 1784) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00c\00d\00e\00f\00g\00")
+ (data (i32.const 1816) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00d\00e\00f\00g\00h\00")
+ (data (i32.const 1848) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00")
+ (data (i32.const 1896) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
+ (data (i32.const 1944) "^\00\00\00\01\00\00\00\10\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00")
+ (data (i32.const 2056) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00")
+ (data (i32.const 2112) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00a\00,\00b\00,\00c\00")
+ (data (i32.const 2144) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00.\00")
+ (data (i32.const 2168) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\00c\00")
+ (data (i32.const 2192) "\90\01\00\00\01\00\00\00\0f\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
+ (data (i32.const 2608) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00\a0\08\00\00\a0\08\00\00\90\01\00\00d\00\00\00")
+ (data (i32.const 2640) "\02\00\00\00\01\00\00\00\10\00\00\00\02\00\00\008\00")
+ (data (i32.const 2664) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\000\000\000\00")
+ (data (i32.const 2696) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\002\003\004\00")
+ (data (i32.const 2720) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\003\004\005\00")
+ (data (i32.const 2752) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\002\003\004\005\006\00")
+ (data (i32.const 2784) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\001\001\001\001\001\001\00")
+ (data (i32.const 2816) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\002\003\004\005\006\007\00")
+ (data (i32.const 2848) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\006\00")
+ (data (i32.const 2888) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\007\00")
+ (data (i32.const 2928) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\002\001\004\007\004\008\003\006\004\008\00")
+ (data (i32.const 2968) "\04\00\00\00\01\00\00\00\10\00\00\00\04\00\00\00-\001\00")
+ (data (i32.const 2992) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\000\000\000\00")
+ (data (i32.const 3016) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\002\001\004\007\004\008\003\006\004\008\00")
+ (data (i32.const 3056) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\004\002\009\004\009\006\007\002\009\005\00")
+ (data (i32.const 3096) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\009\009\009\009\009\009\009\009\00")
+ (data (i32.const 3128) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\000\000\00")
+ (data (i32.const 3168) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3208) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3248) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3296) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3344) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3400) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\001\008\004\004\006\007\004\004\000\007\003\007\000\009\005\005\001\006\001\005\00")
+ (data (i32.const 3456) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\00-\001\002\003\004\00")
+ (data (i32.const 3488) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\00-\004\002\009\004\009\006\007\002\009\005\00")
+ (data (i32.const 3528) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\00-\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3568) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\00-\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3616) " \00\00\00\01\00\00\00\10\00\00\00 \00\00\00-\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3664) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\00-\001\009\009\009\009\008\006\008\007\001\009\004\007\006\007\003\005\00")
+ (data (i32.const 3720) "&\00\00\00\01\00\00\00\10\00\00\00&\00\00\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\007\00")
+ (data (i32.const 3776) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00-\009\002\002\003\003\007\002\000\003\006\008\005\004\007\007\005\008\000\008\00")
+ (data (i32.const 3832) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\000\00.\000\00")
+ (data (i32.const 3856) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\00N\00a\00N\00")
+ (data (i32.const 3880) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
+ (data (i32.const 3920) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
+ (data (i32.const 3952) "\b8\02\00\00\01\00\00\00\0f\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
+ (data (i32.const 4664) "\10\00\00\00\01\00\00\00\14\00\00\00\10\00\00\00\80\0f\00\00\80\0f\00\00\b8\02\00\00W\00\00\00")
+ (data (i32.const 4696) "\ae\00\00\00\01\00\00\00\0f\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
+ (data (i32.const 4888) "\10\00\00\00\01\00\00\00\15\00\00\00\10\00\00\00h\12\00\00h\12\00\00\ae\00\00\00W\00\00\00")
+ (data (i32.const 4920) "(\00\00\00\01\00\00\00\0f\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
+ (data (i32.const 4976) "\10\00\00\00\01\00\00\00\13\00\00\00\10\00\00\00H\13\00\00H\13\00\00(\00\00\00\n\00\00\00")
+ (data (i32.const 5008) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
+ (data (i32.const 5072) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
+ (data (i32.const 5136) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008\00")
+ (data (i32.const 5200) "0\00\00\00\01\00\00\00\10\00\00\000\00\00\00-\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008\00")
+ (data (i32.const 5264) ",\00\00\00\01\00\00\00\10\00\00\00,\00\00\004\00.\001\008\005\005\008\000\004\009\006\008\002\001\003\005\007\00e\00+\002\009\008\00")
+ (data (i32.const 5328) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\002\00.\002\002\005\000\007\003\008\005\008\005\000\007\002\000\001\004\00e\00-\003\000\008\00")
+ (data (i32.const 5392) "\1a\00\00\00\01\00\00\00\10\00\00\00\1a\00\00\004\00.\009\004\000\006\005\006\00e\00-\003\001\008\00")
+ (data (i32.const 5440) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\009\000\006\000\008\000\001\001\005\003\004\003\003\006\000\000\00.\000\00")
+ (data (i32.const 5496) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\004\007\000\008\003\005\006\000\002\004\007\001\001\005\001\002\000\000\000\00.\000\00")
+ (data (i32.const 5560) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\009\004\000\009\003\004\000\000\001\002\005\006\008\002\004\008\000\000\000\00.\000\00")
+ (data (i32.const 5624) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\005\00e\00-\003\002\004\00")
+ (data (i32.const 5656) "\06\00\00\00\01\00\00\00\10\00\00\00\06\00\00\001\00.\000\00")
+ (data (i32.const 5680) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\001\00.\000\00")
+ (data (i32.const 5704) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\00-\000\00.\001\00")
+ (data (i32.const 5728) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\000\000\000\000\000\000\00.\000\00")
+ (data (i32.const 5768) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\000\00.\000\000\000\000\000\001\00")
+ (data (i32.const 5800) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00-\001\000\000\000\000\000\000\00.\000\00")
+ (data (i32.const 5840) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00-\000\00.\000\000\000\000\000\001\00")
+ (data (i32.const 5880) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\001\000\000\000\000\000\000\000\00.\000\00")
+ (data (i32.const 5920) "\08\00\00\00\01\00\00\00\10\00\00\00\08\00\00\001\00e\00-\007\00")
+ (data (i32.const 5944) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00+\003\000\008\00")
+ (data (i32.const 5976) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00+\003\000\008\00")
+ (data (i32.const 6008) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\000\008\00")
+ (data (i32.const 6040) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\000\008\00")
+ (data (i32.const 6072) "\0c\00\00\00\01\00\00\00\10\00\00\00\0c\00\00\001\00e\00-\003\002\003\00")
+ (data (i32.const 6104) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00-\001\00e\00-\003\002\003\00")
+ (data (i32.const 6136) "\18\00\00\00\01\00\00\00\10\00\00\00\18\00\00\004\002\009\004\009\006\007\002\007\002\00.\000\00")
+ (data (i32.const 6176) "*\00\00\00\01\00\00\00\10\00\00\00*\00\00\001\00.\002\003\001\002\001\004\005\006\007\003\004\005\006\002\003\004\00e\00-\008\00")
+ (data (i32.const 6240) "\"\00\00\00\01\00\00\00\10\00\00\00\"\00\00\005\005\005\005\005\005\005\005\005\00.\005\005\005\005\005\005\006\00")
+ (data (i32.const 6296) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\009\00")
+ (data (i32.const 6352) "\n\00\00\00\01\00\00\00\10\00\00\00\n\00\00\001\002\00.\003\004\00")
+ (data (i32.const 6384) "$\00\00\00\01\00\00\00\10\00\00\00$\00\00\000\00.\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\003\00")
+ (data (i32.const 6440) ".\00\00\00\01\00\00\00\10\00\00\00.\00\00\001\002\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00.\000\00")
+ (data (i32.const 6504) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\001\00.\002\003\004\00e\00+\002\001\00")
+ (data (i32.const 6544) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\00.\007\001\008\002\008\00")
+ (data (i32.const 6576) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\000\00.\000\002\007\001\008\002\008\00")
+ (data (i32.const 6616) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\002\007\001\00.\008\002\008\00")
+ (data (i32.const 6648) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\001\00.\001\00e\00+\001\002\008\00")
+ (data (i32.const 6680) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\001\00.\001\00e\00-\006\004\00")
+ (data (i32.const 6712) "\16\00\00\00\01\00\00\00\10\00\00\00\16\00\00\000\00.\000\000\000\000\003\005\006\008\009\00")
+ (data (i32.const 6752) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
+ (data (i32.const 6800) "(\00\00\00\01\00\00\00\10\00\00\00(\00\00\00a\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00")
+ (data (i32.const 6856) "\1e\00\00\00\01\00\00\00\10\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00p\00u\00r\00e\00.\00t\00s\00")
+ (data (i32.const 6904) "\14\00\00\00\01\00\00\00\10\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00")
+ (data (i32.const 6944) "\15\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00\08\00\00\00\00\00\00\00I\04\00\00\0e\00\00\00I\00\00\00\0e\00\00\00I\00\00\00\0e\00\00\00\89\00\00\00\0e\00\00\00)\00\00\00\0e\00\00\00")
  (table $0 1 funcref)
  (elem (i32.const 0) $null)
  (global $std/string/str (mut i32) (i32.const 24))
  (global $std/string/nullStr (mut i32) (i32.const 0))
- (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $~lib/string/String.MAX_LENGTH i32 (i32.const 536870904))
  (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647))
- (global $~lib/rt/purerc/CUR (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/END (mut i32) (i32.const 0))
- (global $~lib/rt/purerc/ROOTS (mut i32) (i32.const 0))
  (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0))
  (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1))
  (global $~lib/builtins/u64.MAX_VALUE i64 (i64.const -1))
@@ -203,8 +199,12 @@
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
  (global $~lib/builtins/f64.EPSILON f64 (f64.const 2.220446049250313e-16))
  (global $~lib/builtins/f64.MAX_VALUE f64 (f64.const 1797693134862315708145274e284))
- (global $~lib/builtins/RTTI_BASE i32 (i32.const 6968))
- (global $~lib/builtins/HEAP_BASE i32 (i32.const 7144))
+ (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/CUR (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/END (mut i32) (i32.const 0))
+ (global $~lib/rt/pure/ROOTS (mut i32) (i32.const 0))
+ (global $~lib/rt/RTTI_BASE i32 (i32.const 6944))
+ (global $~lib/heap/HEAP_BASE i32 (i32.const 7120))
  (export "memory" (memory $0))
  (export "getString" (func $std/string/getString))
  (start $start)
@@ -235,7 +235,7 @@
  (func $~lib/string/String.__not (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -249,1353 +249,10 @@
   end
   local.set $1
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
  )
- (func $~lib/rt/tlsf/removeBlock (; 7 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 275
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $3
-  local.get $3
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 277
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.const 4
-   i32.shr_u
-   local.set $5
-  else   
-   i32.const 31
-   local.get $3
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $4
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $5
-   local.get $4
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $4
-  end
-  local.get $4
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $5
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 290
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=16
-  local.set $6
-  local.get $1
-  i32.load offset=20
-  local.set $7
-  local.get $6
-  if
-   local.get $6
-   local.get $7
-   i32.store offset=20
-  end
-  local.get $7
-  if
-   local.get $7
-   local.get $6
-   i32.store offset=16
-  end
-  local.get $1
-  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $5
-   local.set $8
-   local.get $10
-   local.get $9
-   i32.const 4
-   i32.shl
-   local.get $8
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  i32.eq
-  if
-   block $~lib/rt/tlsf/SETHEAD|inlined.1
-    local.get $0
-    local.set $11
-    local.get $4
-    local.set $10
-    local.get $5
-    local.set $9
-    local.get $7
-    local.set $8
-    local.get $11
-    local.get $10
-    i32.const 4
-    i32.shl
-    local.get $9
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $8
-    i32.store offset=96
-   end
-   local.get $7
-   i32.eqz
-   if
-    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
-     local.get $0
-     local.set $9
-     local.get $4
-     local.set $8
-     local.get $9
-     local.get $8
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $8
-    block $~lib/rt/tlsf/SETSL|inlined.1
-     local.get $0
-     local.set $11
-     local.get $4
-     local.set $10
-     local.get $8
-     i32.const 1
-     local.get $5
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     local.tee $8
-     local.set $9
-     local.get $11
-     local.get $10
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $9
-     i32.store offset=4
-    end
-    local.get $8
-    i32.eqz
-    if
-     local.get $0
-     local.get $0
-     i32.load
-     i32.const 1
-     local.get $4
-     i32.shl
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.store
-    end
-   end
-  end
- )
- (func $~lib/rt/tlsf/insertBlock (; 8 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 203
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 205
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   local.get $3
-   i32.const 16
-   i32.add
-   local.get $3
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $4
-  local.get $4
-  i32.load
-  local.set $5
-  local.get $5
-  i32.const 1
-  i32.and
-  if
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $3
-   local.get $3
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $4
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $2
-    i32.const 3
-    i32.and
-    local.get $3
-    i32.or
-    local.tee $2
-    i32.store
-    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
-     local.get $1
-     local.set $6
-     local.get $6
-     i32.const 16
-     i32.add
-     local.get $6
-     i32.load
-     i32.const 3
-     i32.const -1
-     i32.xor
-     i32.and
-     i32.add
-    end
-    local.set $4
-    local.get $4
-    i32.load
-    local.set $5
-   end
-  end
-  local.get $2
-  i32.const 2
-  i32.and
-  if
-   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
-    local.get $1
-    local.set $3
-    local.get $3
-    i32.const 4
-    i32.sub
-    i32.load
-   end
-   local.set $3
-   local.get $3
-   i32.load
-   local.set $6
-   local.get $6
-   i32.const 1
-   i32.and
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 226
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $6
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $7
-   local.get $7
-   i32.const 1073741808
-   i32.lt_u
-   if
-    local.get $0
-    local.get $3
-    call $~lib/rt/tlsf/removeBlock
-    local.get $3
-    local.get $6
-    i32.const 3
-    i32.and
-    local.get $7
-    i32.or
-    local.tee $2
-    i32.store
-    local.get $3
-    local.set $1
-   end
-  end
-  local.get $4
-  local.get $5
-  i32.const 2
-  i32.or
-  i32.store
-  local.get $2
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $8
-  local.get $8
-  i32.const 16
-  i32.ge_u
-  if (result i32)
-   local.get $8
-   i32.const 1073741808
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 241
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $8
-  i32.add
-  local.get $4
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 242
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $4
-  i32.const 4
-  i32.sub
-  local.get $1
-  i32.store
-  local.get $8
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $9
-   local.get $8
-   i32.const 4
-   i32.shr_u
-   local.set $10
-  else   
-   i32.const 31
-   local.get $8
-   i32.clz
-   i32.sub
-   local.set $9
-   local.get $8
-   local.get $9
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $10
-   local.get $9
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $9
-  end
-  local.get $9
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $10
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 258
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   local.get $10
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 4
-   i32.shl
-   local.get $7
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-  end
-  local.set $11
-  local.get $1
-  i32.const 0
-  i32.store offset=16
-  local.get $1
-  local.get $11
-  i32.store offset=20
-  local.get $11
-  if
-   local.get $11
-   local.get $1
-   i32.store offset=16
-  end
-  block $~lib/rt/tlsf/SETHEAD|inlined.2
-   local.get $0
-   local.set $12
-   local.get $9
-   local.set $3
-   local.get $10
-   local.set $6
-   local.get $1
-   local.set $7
-   local.get $12
-   local.get $3
-   i32.const 4
-   i32.shl
-   local.get $6
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=96
-  end
-  local.get $0
-  local.get $0
-  i32.load
-  i32.const 1
-  local.get $9
-  i32.shl
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETSL|inlined.2
-   local.get $0
-   local.set $3
-   local.get $9
-   local.set $6
-   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
-    local.get $0
-    local.set $13
-    local.get $9
-    local.set $12
-    local.get $13
-    local.get $12
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-   end
-   i32.const 1
-   local.get $10
-   i32.shl
-   i32.or
-   local.set $7
-   local.get $3
-   local.get $6
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $7
-   i32.store offset=4
-  end
- )
- (func $~lib/rt/tlsf/addMemory (; 9 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  local.get $2
-  i32.le_u
-  if (result i32)
-   local.get $1
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  if (result i32)
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 384
-   i32.const 4
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
-   local.get $0
-   local.set $3
-   local.get $3
-   i32.load offset=1568
-  end
-  local.set $4
-  i32.const 0
-  local.set $5
-  local.get $4
-  if
-   local.get $1
-   local.get $4
-   i32.const 16
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 394
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.get $4
-   i32.eq
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    local.set $1
-    local.get $4
-    i32.load
-    local.set $5
-   else    
-    nop
-   end
-  else   
-   local.get $1
-   local.get $0
-   i32.const 1572
-   i32.add
-   i32.ge_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 406
-    i32.const 4
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $2
-  local.get $1
-  i32.sub
-  local.set $6
-  local.get $6
-  i32.const 48
-  i32.lt_u
-  if
-   i32.const 0
-   return
-  end
-  local.get $6
-  i32.const 2
-  i32.const 16
-  i32.mul
-  i32.sub
-  local.set $7
-  local.get $1
-  local.set $8
-  local.get $8
-  local.get $7
-  i32.const 1
-  i32.or
-  local.get $5
-  i32.const 2
-  i32.and
-  i32.or
-  i32.store
-  local.get $8
-  i32.const 0
-  i32.store offset=16
-  local.get $8
-  i32.const 0
-  i32.store offset=20
-  local.get $1
-  local.get $6
-  i32.add
-  i32.const 16
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 0
-  i32.const 2
-  i32.or
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.1
-   local.get $0
-   local.set $9
-   local.get $4
-   local.set $3
-   local.get $9
-   local.get $3
-   i32.store offset=1568
-  end
-  local.get $0
-  local.get $8
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
- )
- (func $~lib/rt/tlsf/initializeRoot (; 10 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  global.get $~lib/builtins/HEAP_BASE
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.set $0
-  current_memory
-  local.set $1
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.gt_s
-  if (result i32)
-   local.get $2
-   local.get $1
-   i32.sub
-   grow_memory
-   i32.const 0
-   i32.lt_s
-  else   
-   i32.const 0
-  end
-  if
-   unreachable
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.store
-  block $~lib/rt/tlsf/SETTAIL|inlined.0
-   local.get $3
-   local.set $5
-   i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
-  end
-  block $break|0
-   i32.const 0
-   local.set $4
-   loop $repeat|0
-    local.get $4
-    i32.const 23
-    i32.lt_u
-    i32.eqz
-    br_if $break|0
-    block $~lib/rt/tlsf/SETSL|inlined.0
-     local.get $3
-     local.set $7
-     local.get $4
-     local.set $6
-     i32.const 0
-     local.set $5
-     local.get $7
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $5
-     i32.store offset=4
-    end
-    block $break|1
-     i32.const 0
-     local.set $5
-     loop $repeat|1
-      local.get $5
-      i32.const 16
-      i32.lt_u
-      i32.eqz
-      br_if $break|1
-      block $~lib/rt/tlsf/SETHEAD|inlined.0
-       local.get $3
-       local.set $9
-       local.get $4
-       local.set $8
-       local.get $5
-       local.set $7
-       i32.const 0
-       local.set $6
-       local.get $9
-       local.get $8
-       i32.const 4
-       i32.shl
-       local.get $7
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
-       local.get $6
-       i32.store offset=96
-      end
-      local.get $5
-      i32.const 1
-      i32.add
-      local.set $5
-      br $repeat|1
-      unreachable
-     end
-     unreachable
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $repeat|0
-    unreachable
-   end
-   unreachable
-  end
-  local.get $3
-  local.get $0
-  i32.const 1572
-  i32.add
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  current_memory
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
-  local.get $3
-  global.set $~lib/rt/tlsf/ROOT
- )
- (func $~lib/rt/tlsf/prepareSize (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 1073741808
-  i32.ge_u
-  if
-   i32.const 232
-   i32.const 184
-   i32.const 446
-   i32.const 29
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 15
-  i32.add
-  i32.const 15
-  i32.const -1
-  i32.xor
-  i32.and
-  local.tee $1
-  i32.const 16
-  local.tee $2
-  local.get $1
-  local.get $2
-  i32.gt_u
-  select
- )
- (func $~lib/rt/tlsf/searchBlock (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  i32.const 256
-  i32.lt_u
-  if
-   i32.const 0
-   local.set $2
-   local.get $1
-   i32.const 4
-   i32.shr_u
-   local.set $3
-  else   
-   local.get $1
-   i32.const 536870904
-   i32.lt_u
-   if (result i32)
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-   else    
-    local.get $1
-   end
-   local.set $4
-   i32.const 31
-   local.get $4
-   i32.clz
-   i32.sub
-   local.set $2
-   local.get $4
-   local.get $2
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 1
-   i32.const 4
-   i32.shl
-   i32.xor
-   local.set $3
-   local.get $2
-   i32.const 8
-   i32.const 1
-   i32.sub
-   i32.sub
-   local.set $2
-  end
-  local.get $2
-  i32.const 23
-  i32.lt_u
-  if (result i32)
-   local.get $3
-   i32.const 16
-   i32.lt_u
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 336
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
-   local.get $0
-   local.set $5
-   local.get $2
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=4
-  end
-  i32.const 0
-  i32.const -1
-  i32.xor
-  local.get $3
-  i32.shl
-  i32.and
-  local.set $6
-  local.get $6
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   i32.const 0
-   i32.const -1
-   i32.xor
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.shl
-   i32.and
-   local.set $4
-   local.get $4
-   i32.eqz
-   if
-    i32.const 0
-    local.set $7
-   else    
-    local.get $4
-    i32.ctz
-    local.set $2
-    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
-     local.get $0
-     local.set $8
-     local.get $2
-     local.set $5
-     local.get $8
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=4
-    end
-    local.set $6
-    local.get $6
-    i32.eqz
-    if
-     i32.const 0
-     i32.const 184
-     i32.const 349
-     i32.const 17
-     call $~lib/builtins/abort
-     unreachable
-    end
-    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
-     local.get $0
-     local.set $9
-     local.get $2
-     local.set $8
-     local.get $6
-     i32.ctz
-     local.set $5
-     local.get $9
-     local.get $8
-     i32.const 4
-     i32.shl
-     local.get $5
-     i32.add
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load offset=96
-    end
-    local.set $7
-   end
-  else   
-   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
-    local.get $0
-    local.set $8
-    local.get $2
-    local.set $5
-    local.get $6
-    i32.ctz
-    local.set $4
-    local.get $8
-    local.get $5
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-   end
-   local.set $7
-  end
-  local.get $7
- )
- (func $~lib/rt/tlsf/growMemory (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  current_memory
-  local.set $2
-  local.get $1
-  i32.const 65535
-  i32.add
-  i32.const 65535
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.const 16
-  i32.shr_u
-  local.set $3
-  local.get $2
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.set $6
-  local.get $6
-  grow_memory
-  i32.const 0
-  i32.lt_s
-  if
-   local.get $3
-   grow_memory
-   i32.const 0
-   i32.lt_s
-   if
-    unreachable
-   end
-  end
-  current_memory
-  local.set $7
-  local.get $0
-  local.get $2
-  i32.const 16
-  i32.shl
-  local.get $7
-  i32.const 16
-  i32.shl
-  call $~lib/rt/tlsf/addMemory
-  drop
- )
- (func $~lib/rt/tlsf/prepareBlock (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  i32.load
-  local.set $3
-  local.get $2
-  i32.const 15
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 363
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.sub
-  local.set $4
-  local.get $4
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   local.get $3
-   i32.const 2
-   i32.and
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.get $2
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $4
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $5
-   call $~lib/rt/tlsf/insertBlock
-  else   
-   local.get $1
-   local.get $3
-   i32.const 1
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
-    local.get $1
-    local.set $5
-    local.get $5
-    i32.const 16
-    i32.add
-    local.get $5
-    i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
-   end
-   i32.load
-   i32.const 2
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.store
-  end
- )
- (func $~lib/rt/tlsf/allocateBlock (; 15 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $1
-  call $~lib/rt/tlsf/prepareSize
-  local.set $2
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/searchBlock
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/growMemory
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/searchBlock
-   local.set $3
-   local.get $3
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 184
-    i32.const 476
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  local.get $3
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $2
-  i32.ge_u
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 478
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  i32.const 0
-  i32.store offset=4
-  local.get $3
-  local.get $1
-  i32.store offset=12
-  local.get $0
-  local.get $3
-  call $~lib/rt/tlsf/removeBlock
-  local.get $0
-  local.get $3
-  local.get $2
-  call $~lib/rt/tlsf/prepareBlock
-  local.get $3
- )
- (func $~lib/rt/tlsf/__alloc (; 16 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  local.set $2
-  local.get $2
-  i32.eqz
-  if
-   call $~lib/rt/tlsf/initializeRoot
-   global.get $~lib/rt/tlsf/ROOT
-   local.set $2
-  end
-  local.get $2
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $3
-  local.get $3
-  local.get $1
-  i32.store offset=8
-  local.get $3
-  i32.const 16
-  i32.add
- )
- (func $~lib/string/String.fromCharCode (; 17 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String.fromCharCode (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   i32.const 2
   i32.const 16
@@ -1605,18 +262,18 @@
   local.get $0
   i32.store16
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/string/compareImpl (; 18 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
+ (func $~lib/util/string/compareImpl (; 8 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   i32.const 0
   local.set $5
@@ -1666,19 +323,19 @@
   local.get $5
   local.set $8
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
  )
- (func $~lib/string/String.__eq (; 19 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__eq (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -1687,9 +344,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -1707,9 +364,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -1724,9 +381,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -1739,12 +396,12 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.fromCodePoint (; 20 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/string/String.fromCodePoint (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -1755,7 +412,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 21
    i32.const 4
    call $~lib/builtins/abort
@@ -1805,9 +462,9 @@
    i32.store
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#startsWith (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#startsWith (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -1815,7 +472,7 @@
   (local $7 i32)
   (local $8 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -1823,7 +480,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 171
    i32.const 4
    call $~lib/builtins/abort
@@ -1833,9 +490,9 @@
   i32.const 0
   i32.eq
   if
-   i32.const 408
+   i32.const 304
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $2
@@ -1871,7 +528,7 @@
    i32.const 0
    local.set $5
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -1884,17 +541,17 @@
   i32.eqz
   local.set $5
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/string/String#endsWith (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#endsWith (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -1902,7 +559,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 78
    i32.const 4
    call $~lib/builtins/abort
@@ -1915,7 +572,7 @@
    i32.const 0
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -1950,7 +607,7 @@
    i32.const 0
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -1963,17 +620,17 @@
   i32.eqz
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/string/String#indexOf (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#indexOf (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -1981,7 +638,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 140
    i32.const 4
    call $~lib/builtins/abort
@@ -1991,9 +648,9 @@
   i32.const 0
   i32.eq
   if
-   i32.const 408
+   i32.const 304
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $1
@@ -2005,7 +662,7 @@
    i32.const 0
    local.set $4
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
    return
   end
@@ -2018,7 +675,7 @@
    i32.const -1
    local.set $4
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
    return
   end
@@ -2062,7 +719,7 @@
      local.get $4
      local.set $6
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
@@ -2078,10 +735,10 @@
   i32.const -1
   local.set $4
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/memory/memory.copy (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.copy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2287,7 +944,7 @@
    end
   end
  )
- (func $~lib/memory/memory.repeat (; 25 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+ (func $~lib/memory/memory.repeat (; 15 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
   (local $4 i32)
   (local $5 i32)
   i32.const 0
@@ -2317,7 +974,7 @@
    end
   end
  )
- (func $~lib/string/String#padStart (; 26 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#padStart (; 16 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2327,7 +984,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -2335,7 +992,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 288
    i32.const 4
    call $~lib/builtins/abort
@@ -2366,10 +1023,10 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -2423,13 +1080,13 @@
   local.get $3
   call $~lib/memory/memory.copy
   local.get $8
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
  )
- (func $~lib/string/String#padEnd (; 27 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#padEnd (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -2439,7 +1096,7 @@
   (local $9 i32)
   (local $10 i32)
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -2447,7 +1104,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 309
    i32.const 4
    call $~lib/builtins/abort
@@ -2478,10 +1135,10 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $6
    local.get $2
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $6
    return
   end
@@ -2539,20 +1196,20 @@
    call $~lib/memory/memory.copy
   end
   local.get $8
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $10
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
  )
- (func $~lib/string/String#lastIndexOf (; 28 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#lastIndexOf (; 18 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -2560,7 +1217,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 156
    i32.const 4
    call $~lib/builtins/abort
@@ -2570,9 +1227,9 @@
   i32.const 0
   i32.eq
   if
-   i32.const 408
+   i32.const 304
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $0
@@ -2587,7 +1244,7 @@
    local.get $3
    local.set $5
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -2597,7 +1254,7 @@
    i32.const -1
    local.set $5
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
@@ -2639,7 +1296,7 @@
      local.get $5
      local.set $6
      local.get $1
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $6
      return
     end
@@ -2655,10 +1312,10 @@
   i32.const -1
   local.set $5
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/util/string/parse<f64> (; 29 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
+ (func $~lib/util/string/parse<f64> (; 19 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
   (local $2 i32)
   (local $3 f64)
   (local $4 i32)
@@ -2667,7 +1324,7 @@
   (local $7 i32)
   (local $8 f64)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   call $~lib/string/String#get:length
@@ -2678,7 +1335,7 @@
    f64.const nan:0x8000000000000
    local.set $3
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -2700,7 +1357,7 @@
     f64.const nan:0x8000000000000
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2726,7 +1383,7 @@
      f64.const nan:0x8000000000000
      local.set $3
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $3
      return
     end
@@ -2869,7 +1526,7 @@
     f64.const nan:0x8000000000000
     local.set $3
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $3
     return
    end
@@ -2973,23 +1630,23 @@
   f64.mul
   local.set $3
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/string/parseInt (; 30 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
+ (func $~lib/string/parseInt (; 20 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64)
   (local $2 f64)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
   call $~lib/util/string/parse<f64>
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/parseFloat (; 31 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
+ (func $~lib/string/parseFloat (; 21 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
   (local $1 i32)
   (local $2 f64)
   (local $3 i32)
@@ -2998,7 +1655,7 @@
   (local $6 f64)
   (local $7 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   call $~lib/string/String#get:length
@@ -3009,7 +1666,7 @@
    f64.const nan:0x8000000000000
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3031,7 +1688,7 @@
     f64.const nan:0x8000000000000
     local.set $2
     local.get $0
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $2
     return
    end
@@ -3057,7 +1714,7 @@
      f64.const nan:0x8000000000000
      local.set $2
      local.get $0
-     call $~lib/rt/purerc/__release
+     call $~lib/rt/pure/__release
      local.get $2
      return
     end
@@ -3129,7 +1786,7 @@
           i32.eqz
           if
            i32.const 0
-           i32.const 312
+           i32.const 208
            i32.const 572
            i32.const 10
            call $~lib/builtins/abort
@@ -3197,25 +1854,25 @@
   f64.mul
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String#concat (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (; 22 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
   i32.const 0
   i32.eq
   if
-   i32.const 408
+   i32.const 304
    local.get $1
-   call $~lib/rt/purerc/__retainRelease
+   call $~lib/rt/pure/__retainRelease
    local.set $1
   end
   local.get $0
@@ -3237,17 +1894,17 @@
   i32.eq
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $5
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $5
    return
   end
   local.get $4
   i32.const 16
   call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   local.set $6
   local.get $6
   local.get $0
@@ -3262,19 +1919,19 @@
   local.get $6
   local.set $5
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
  )
- (func $~lib/string/String.__concat (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__concat (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
-  i32.const 408
+  i32.const 304
   local.get $0
   i32.const 0
   i32.ne
@@ -3283,18 +1940,18 @@
   call $~lib/string/String#concat
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__ne (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__ne (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -3302,21 +1959,21 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__gt (; 35 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__gt (; 25 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -3339,9 +1996,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3357,9 +2014,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3369,9 +2026,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3392,21 +2049,21 @@
   i32.gt_s
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__lt (; 36 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__lt (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -3429,9 +2086,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3447,9 +2104,9 @@
    i32.const 0
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3459,9 +2116,9 @@
    i32.const 1
    local.set $2
    local.get $0
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $2
    return
   end
@@ -3482,18 +2139,18 @@
   i32.lt_s
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__gte (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__gte (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -3501,18 +2158,18 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String.__lte (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__lte (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $0
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   local.get $1
@@ -3520,12 +2177,12 @@
   i32.eqz
   local.set $2
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/string/String#repeat (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#repeat (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
@@ -3534,7 +2191,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 330
    i32.const 4
    call $~lib/builtins/abort
@@ -3558,8 +2215,8 @@
    i64.gt_u
   end
   if
-   i32.const 1600
-   i32.const 312
+   i32.const 1496
+   i32.const 208
    i32.const 335
    i32.const 6
    call $~lib/builtins/abort
@@ -3576,7 +2233,7 @@
   end
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -3584,7 +2241,7 @@
   i32.eq
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $2
@@ -3603,9 +2260,9 @@
   local.get $1
   call $~lib/memory/memory.repeat
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#slice (; 40 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#slice (; 30 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -3674,7 +2331,7 @@
   i32.le_s
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -3694,70 +2351,9 @@
   i32.shl
   call $~lib/memory/memory.copy
   local.get $8
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/purerc/increment (; 41 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 103
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.store offset=4
-  local.get $0
-  call $~lib/rt/purerc/onIncrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 106
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/purerc/__retain (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/increment
-  end
-  local.get $0
- )
- (func $~lib/rt/common/__allocArray (; 43 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/rt/__allocArray (; 31 ;) (type $FUNCSIG$iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -3775,7 +2371,7 @@
   local.set $6
   local.get $4
   local.get $6
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   i32.store
   local.get $4
   local.get $6
@@ -3795,182 +2391,7 @@
   end
   local.get $4
  )
- (func $~lib/rt/tlsf/reallocateBlock (; 44 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $4
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 491
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $3
-  local.get $4
-  i32.const -4
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
-   local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-  end
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  local.get $1
-  i32.load offset=8
-  i32.store offset=8
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  local.get $4
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
-  local.get $8
- )
- (func $~lib/rt/tlsf/__realloc (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 552
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 553
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.fill (; 46 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/memory/memory.fill (; 32 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -4233,7 +2654,7 @@
    end
   end
  )
- (func $~lib/array/ensureSize (; 47 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/ensureSize (; 33 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -4253,8 +2674,8 @@
    i32.shr_u
    i32.gt_u
    if
-    i32.const 1600
-    i32.const 2072
+    i32.const 1496
+    i32.const 1912
     i32.const 14
     i32.const 47
     call $~lib/builtins/abort
@@ -4285,7 +2706,7 @@
    if
     local.get $0
     local.get $6
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $0
     local.get $6
@@ -4296,268 +2717,12 @@
    i32.store offset=8
   end
  )
- (func $~lib/rt/tlsf/freeBlock (; 48 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 530
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  local.get $1
-  call $~lib/rt/tlsf/onFree
- )
- (func $~lib/rt/common/__typeinfo (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  global.get $~lib/builtins/RTTI_BASE
-  local.set $1
-  local.get $0
-  i32.eqz
-  if (result i32)
-   i32.const 1
-  else   
-   local.get $0
-   local.get $1
-   i32.load
-   i32.gt_u
-  end
-  if
-   i32.const 2120
-   i32.const 2176
-   i32.const 55
-   i32.const 34
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  local.get $0
-  i32.const 8
-  i32.mul
-  i32.add
-  i32.load
- )
- (func $~lib/rt/purerc/growRoots (; 50 ;) (type $FUNCSIG$v)
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  global.get $~lib/rt/purerc/ROOTS
-  local.set $0
-  global.get $~lib/rt/purerc/CUR
-  local.get $0
-  i32.sub
-  local.set $1
-  local.get $1
-  i32.const 2
-  i32.mul
-  local.tee $2
-  i32.const 64
-  i32.const 2
-  i32.shl
-  local.tee $3
-  local.get $2
-  local.get $3
-  i32.gt_u
-  select
-  local.set $4
-  local.get $4
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $5
-  local.get $0
-  local.get $1
-  call $~lib/memory/memory.copy
-  local.get $5
-  global.set $~lib/rt/purerc/ROOTS
-  local.get $5
-  local.get $1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
-  local.get $5
-  local.get $4
-  i32.add
-  global.set $~lib/rt/purerc/END
- )
- (func $~lib/rt/purerc/appendRoot (; 51 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  global.get $~lib/rt/purerc/CUR
-  local.set $1
-  local.get $1
-  global.get $~lib/rt/purerc/END
-  i32.ge_u
-  if
-   call $~lib/rt/purerc/growRoots
-   global.get $~lib/rt/purerc/CUR
-   local.set $1
-  end
-  local.get $1
-  local.get $0
-  i32.store
-  local.get $1
-  i32.const 1
-  i32.add
-  global.set $~lib/rt/purerc/CUR
- )
- (func $~lib/rt/purerc/decrement (; 52 ;) (type $FUNCSIG$vi) (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.and
-  local.set $2
-  local.get $0
-  call $~lib/rt/purerc/onDecrement
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 2016
-   i32.const 114
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   i32.const 16
-   i32.add
-   i32.const 1
-   call $~lib/builtins/__visit_members
-   local.get $1
-   i32.const -2147483648
-   i32.and
-   i32.eqz
-   if
-    global.get $~lib/rt/tlsf/ROOT
-    local.get $0
-    call $~lib/rt/tlsf/freeBlock
-   else    
-    local.get $0
-    i32.const -2147483648
-    i32.const 0
-    i32.or
-    i32.const 0
-    i32.or
-    i32.store offset=4
-   end
-  else   
-   local.get $2
-   i32.const 0
-   i32.gt_u
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 2016
-    i32.const 123
-    i32.const 15
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.load offset=8
-   call $~lib/rt/common/__typeinfo
-   i32.const 8
-   i32.and
-   i32.eqz
-   if
-    local.get $0
-    i32.const -2147483648
-    i32.const 805306368
-    i32.or
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-    local.get $1
-    i32.const -2147483648
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     call $~lib/rt/purerc/appendRoot
-    end
-   else    
-    local.get $0
-    local.get $1
-    i32.const 268435455
-    i32.const -1
-    i32.xor
-    i32.and
-    local.get $2
-    i32.const 1
-    i32.sub
-    i32.or
-    i32.store offset=4
-   end
-  end
- )
- (func $~lib/rt/purerc/__retainRelease (; 53 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  local.get $1
-  i32.ne
-  if
-   global.get $~lib/builtins/HEAP_BASE
-   local.set $2
-   local.get $0
-   local.get $2
-   i32.gt_u
-   if
-    local.get $0
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/increment
-   end
-   local.get $1
-   local.get $2
-   i32.gt_u
-   if
-    local.get $1
-    i32.const 16
-    i32.sub
-    call $~lib/rt/purerc/decrement
-   end
-  end
-  local.get $0
- )
- (func $~lib/array/Array<~lib/string/String>#push (; 54 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#push (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.load offset=12
@@ -4581,7 +2746,7 @@
   local.get $1
   local.get $4
   i32.load
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   i32.store
   local.get $0
   local.get $3
@@ -4589,10 +2754,10 @@
   local.get $3
   local.set $4
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/string/String#split (; 55 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#split (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -4605,7 +2770,7 @@
   (local $12 i32)
   (local $13 i32)
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
   drop
   local.get $0
   i32.const 0
@@ -4613,7 +2778,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 357
    i32.const 4
    call $~lib/builtins/abort
@@ -4626,11 +2791,11 @@
    i32.const 2
    i32.const 17
    i32.const 0
-   call $~lib/rt/common/__allocArray
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -4643,21 +2808,21 @@
     i32.const 2
     i32.const 17
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $3
     local.get $3
     i32.load offset=4
     local.set $4
     local.get $4
     local.get $0
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     i32.store
     local.get $3
    end
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $4
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $4
    return
   end
@@ -4684,11 +2849,11 @@
     i32.const 2
     i32.const 17
     i32.const 0
-    call $~lib/rt/common/__allocArray
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $4
     return
    end
@@ -4705,7 +2870,7 @@
    i32.const 2
    i32.const 17
    i32.const 0
-   call $~lib/rt/common/__allocArray
+   call $~lib/rt/__allocArray
    local.set $4
    local.get $4
    i32.load offset=4
@@ -4739,7 +2904,7 @@
      local.get $8
      i32.store
      local.get $8
-     call $~lib/rt/purerc/__retain
+     call $~lib/rt/pure/__retain
      drop
      local.get $7
      i32.const 1
@@ -4751,10 +2916,10 @@
     unreachable
    end
    local.get $4
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $8
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $8
    return
   else   
@@ -4765,17 +2930,17 @@
     i32.const 2
     i32.const 17
     i32.const 0
-    call $~lib/rt/common/__allocArray
+    call $~lib/rt/__allocArray
     local.set $3
     local.get $3
     i32.load offset=4
     i32.const 120
     i32.store
     local.get $3
-    call $~lib/rt/purerc/__retain
+    call $~lib/rt/pure/__retain
     local.set $4
     local.get $1
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $4
     return
    end
@@ -4784,8 +2949,8 @@
   i32.const 2
   i32.const 17
   i32.const 0
-  call $~lib/rt/common/__allocArray
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
   local.set $9
   i32.const 0
   local.set $10
@@ -4847,7 +3012,7 @@
       local.get $9
       local.set $4
       local.get $1
-      call $~lib/rt/purerc/__release
+      call $~lib/rt/pure/__release
       local.get $4
       return
      end
@@ -4869,7 +3034,7 @@
    local.get $9
    local.set $3
    local.get $1
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $3
    return
   end
@@ -4910,14 +3075,14 @@
   local.get $9
   local.set $3
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/array/Array<~lib/string/String>#get:length (; 56 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#get:length (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   local.get $0
   i32.load offset=12
  )
- (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 57 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 37 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -4925,16 +3090,16 @@
   i32.shl
   i32.add
   i32.load
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String>#__get (; 58 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<~lib/string/String>#__get (; 38 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
   i32.load offset=12
   i32.ge_u
   if
-   i32.const 2232
-   i32.const 2072
+   i32.const 1960
+   i32.const 1912
    i32.const 97
    i32.const 45
    call $~lib/builtins/abort
@@ -4947,8 +3112,8 @@
   i32.shr_u
   i32.ge_u
   if
-   i32.const 2120
    i32.const 2072
+   i32.const 1912
    i32.const 100
    i32.const 61
    call $~lib/builtins/abort
@@ -4958,7 +3123,7 @@
   local.get $1
   call $~lib/array/Array<~lib/string/String>#__unchecked_get
  )
- (func $~lib/util/number/decimalCount32 (; 59 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/decimalCount32 (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
   i32.const 100000
@@ -5027,7 +3192,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/utoa32_lut (; 60 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_lut (; 40 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -5035,7 +3200,7 @@
   (local $7 i32)
   (local $8 i64)
   (local $9 i64)
-  i32.const 2840
+  i32.const 2624
   i32.load offset=4
   local.set $3
   block $break|0
@@ -5168,7 +3333,7 @@
    i32.store16
   end
  )
- (func $~lib/util/number/itoa32 (; 61 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5178,8 +3343,8 @@
   local.get $0
   i32.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5223,9 +3388,9 @@
    i32.store16
   end
   local.get $3
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/utoa32 (; 62 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+ (func $~lib/util/number/utoa32 (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5234,8 +3399,8 @@
   local.get $0
   i32.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5260,9 +3425,9 @@
    call $~lib/util/number/utoa32_lut
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/decimalCount64 (; 63 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/decimalCount64 (; 43 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   local.get $0
   i64.const 1000000000000000
@@ -5331,7 +3496,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/utoa64_lut (; 64 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_lut (; 44 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   (local $4 i64)
   (local $5 i32)
@@ -5343,7 +3508,7 @@
   (local $11 i32)
   (local $12 i64)
   (local $13 i64)
-  i32.const 2840
+  i32.const 2624
   i32.load offset=4
   local.set $3
   block $break|0
@@ -5457,7 +3622,7 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/utoa64 (; 65 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/utoa64 (; 45 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5468,8 +3633,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5524,9 +3689,9 @@
    end
   end
   local.get $1
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/itoa64 (; 66 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
+ (func $~lib/util/number/itoa64 (; 46 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5538,8 +3703,8 @@
   local.get $0
   i64.eqz
   if
-   i32.const 896
-   call $~lib/rt/purerc/__retain
+   i32.const 792
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -5615,21 +3780,21 @@
    i32.store16
   end
   local.get $2
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/builtins/isFinite<f64> (; 67 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/builtins/isFinite<f64> (; 47 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   local.get $0
   local.get $0
   f64.sub
   f64.const 0
   f64.eq
  )
- (func $~lib/builtins/isNaN<f64> (; 68 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/builtins/isNaN<f64> (; 48 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   local.get $0
   local.get $0
   f64.ne
  )
- (func $~lib/array/Array<u64>#__unchecked_get (; 69 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64)
+ (func $~lib/array/Array<u64>#__unchecked_get (; 49 ;) (type $FUNCSIG$jii) (param $0 i32) (param $1 i32) (result i64)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -5638,7 +3803,7 @@
   i32.add
   i64.load
  )
- (func $~lib/array/Array<i16>#__unchecked_get (; 70 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/array/Array<i16>#__unchecked_get (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   i32.load offset=4
   local.get $1
@@ -5647,7 +3812,7 @@
   i32.add
   i32.load16_s
  )
- (func $~lib/util/number/genDigits (; 71 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (; 51 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
   (local $9 i64)
@@ -5702,7 +3867,7 @@
   local.set $14
   local.get $6
   local.set $15
-  i32.const 5208
+  i32.const 4992
   i32.load offset=4
   local.set $16
   block $break|0
@@ -6203,7 +4368,7 @@
   end
   local.get $15
  )
- (func $~lib/util/number/prettify (; 72 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/prettify (; 52 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -6533,7 +4698,7 @@
   unreachable
   unreachable
  )
- (func $~lib/util/number/dtoa_core (; 73 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/util/number/dtoa_core (; 53 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 f64)
   (local $4 i32)
@@ -6702,11 +4867,11 @@
     i32.shl
     i32.sub
     global.set $~lib/util/number/_K
-    i32.const 4896
+    i32.const 4680
     local.get $13
     call $~lib/array/Array<u64>#__unchecked_get
     global.set $~lib/util/number/_frc_pow
-    i32.const 5120
+    i32.const 4904
     local.get $13
     call $~lib/array/Array<i16>#__unchecked_get
     global.set $~lib/util/number/_exp_pow
@@ -6971,7 +5136,7 @@
   local.get $2
   i32.add
  )
- (func $~lib/string/String#substring (; 74 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#substring (; 54 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -6986,7 +5151,7 @@
   i32.eqz
   if
    i32.const 0
-   i32.const 312
+   i32.const 208
    i32.const 196
    i32.const 4
    call $~lib/builtins/abort
@@ -7057,7 +5222,7 @@
   i32.eqz
   if
    i32.const 120
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $8
@@ -7074,7 +5239,7 @@
   end
   if
    local.get $0
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $3
@@ -7088,46 +5253,9 @@
   local.get $3
   call $~lib/memory/memory.copy
   local.get $10
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/tlsf/__free (; 75 ;) (type $FUNCSIG$vi) (param $0 i32)
-  global.get $~lib/rt/tlsf/ROOT
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 560
-   i32.const 13
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else   
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 184
-   i32.const 561
-   i32.const 2
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $~lib/rt/tlsf/ROOT
-  local.get $0
-  i32.const 16
-  i32.sub
-  call $~lib/rt/tlsf/freeBlock
- )
- (func $~lib/util/number/dtoa (; 76 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
+ (func $~lib/util/number/dtoa (; 55 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -7135,8 +5263,8 @@
   f64.const 0
   f64.eq
   if
-   i32.const 4064
-   call $~lib/rt/purerc/__retain
+   i32.const 3848
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $0
@@ -7146,17 +5274,17 @@
    local.get $0
    call $~lib/builtins/isNaN<f64>
    if
-    i32.const 4088
-    call $~lib/rt/purerc/__retain
+    i32.const 3872
+    call $~lib/rt/pure/__retain
     return
    end
-   i32.const 4112
-   i32.const 4152
+   i32.const 3896
+   i32.const 3936
    local.get $0
    f64.const 0
    f64.lt
    select
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   i32.const 28
@@ -7174,7 +5302,7 @@
   i32.eq
   if
    local.get $1
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    return
   end
   local.get $1
@@ -7186,18 +5314,7 @@
   call $~lib/rt/tlsf/__free
   local.get $3
  )
- (func $~lib/rt/purerc/__release (; 77 ;) (type $FUNCSIG$vi) (param $0 i32)
-  local.get $0
-  global.get $~lib/builtins/HEAP_BASE
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/purerc/decrement
-  end
- )
- (func $start:std/string (; 78 ;) (type $FUNCSIG$v)
+ (func $start:std/string (; 56 ;) (type $FUNCSIG$v)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -7425,7 +5542,7 @@
   i32.const 54
   call $~lib/string/String.fromCharCode
   local.tee $1
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7441,7 +5558,7 @@
   i32.add
   call $~lib/string/String.fromCharCode
   local.tee $2
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7469,7 +5586,7 @@
   i32.const 54
   call $~lib/string/String.fromCodePoint
   local.tee $4
-  i32.const 288
+  i32.const 184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7485,7 +5602,7 @@
   local.tee $5
   i32.eqz
   if
-   i32.const 360
+   i32.const 256
    i32.const 72
    i32.const 23
    i32.const 0
@@ -7493,7 +5610,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 384
+  i32.const 280
   i32.const 0
   call $~lib/string/String#startsWith
   i32.eqz
@@ -7506,7 +5623,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 432
+  i32.const 328
   global.get $~lib/string/String.MAX_LENGTH
   call $~lib/string/String#endsWith
   i32.eqz
@@ -7521,8 +5638,8 @@
   block $~lib/string/String#includes|inlined.0 (result i32)
    global.get $std/string/str
    local.set $8
-   i32.const 464
-   call $~lib/rt/purerc/__retain
+   i32.const 360
+   call $~lib/rt/pure/__retain
    local.set $7
    i32.const 0
    local.set $6
@@ -7534,7 +5651,7 @@
    i32.ne
    local.set $9
    local.get $7
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $9
   end
   i32.const 0
@@ -7550,7 +5667,7 @@
   end
   global.get $std/string/str
   i32.const 0
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $6
   global.get $std/string/str
@@ -7566,7 +5683,7 @@
   end
   global.get $std/string/str
   i32.const 15
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $7
   global.get $std/string/str
@@ -7582,10 +5699,10 @@
   end
   i32.const 120
   i32.const 3
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $8
-  i32.const 512
+  i32.const 408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7628,12 +5745,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 5
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padStart
   local.tee $11
-  i32.const 560
+  i32.const 456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7644,12 +5761,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 6
-  i32.const 592
+  i32.const 488
   call $~lib/string/String#padStart
   local.tee $12
-  i32.const 616
+  i32.const 512
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7660,12 +5777,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 8
-  i32.const 592
+  i32.const 488
   call $~lib/string/String#padStart
   local.tee $13
-  i32.const 648
+  i32.const 544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7678,7 +5795,7 @@
   end
   global.get $std/string/str
   i32.const 0
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $14
   global.get $std/string/str
@@ -7694,7 +5811,7 @@
   end
   global.get $std/string/str
   i32.const 15
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $15
   global.get $std/string/str
@@ -7710,10 +5827,10 @@
   end
   i32.const 120
   i32.const 3
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $16
-  i32.const 512
+  i32.const 408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7756,12 +5873,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 5
-  i32.const 488
+  i32.const 384
   call $~lib/string/String#padEnd
   local.tee $19
-  i32.const 680
+  i32.const 576
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7772,12 +5889,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 6
-  i32.const 536
+  i32.const 432
   call $~lib/string/String#padEnd
   local.tee $20
-  i32.const 712
+  i32.const 608
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7788,12 +5905,12 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 8
-  i32.const 536
+  i32.const 432
   call $~lib/string/String#padEnd
   local.tee $21
-  i32.const 744
+  i32.const 640
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -7820,7 +5937,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 384
+  i32.const 280
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const -1
@@ -7880,7 +5997,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const 2
@@ -7895,7 +6012,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 800
+  i32.const 696
   i32.const 0
   call $~lib/string/String#indexOf
   i32.const -1
@@ -7910,7 +6027,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 2
   call $~lib/string/String#indexOf
   i32.const 2
@@ -7925,7 +6042,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 3
   call $~lib/string/String#indexOf
   i32.const -1
@@ -7940,7 +6057,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 824
+  i32.const 720
   i32.const -1
   call $~lib/string/String#indexOf
   i32.const 2
@@ -7970,7 +6087,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 384
+  i32.const 280
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -8001,7 +6118,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -8016,7 +6133,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 800
+  i32.const 696
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -8031,7 +6148,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 848
+  i32.const 744
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#lastIndexOf
   i32.const 15
@@ -8046,7 +6163,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 2
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -8061,7 +6178,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 776
+  i32.const 672
   i32.const 3
   call $~lib/string/String#lastIndexOf
   i32.const 2
@@ -8076,7 +6193,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 824
+  i32.const 720
   i32.const -1
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -8091,7 +6208,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 872
+  i32.const 768
   i32.const 0
   call $~lib/string/String#lastIndexOf
   i32.const -1
@@ -8106,7 +6223,7 @@
    unreachable
   end
   global.get $std/string/str
-  i32.const 384
+  i32.const 280
   i32.const 0
   call $~lib/string/String#lastIndexOf
   i32.const 0
@@ -8120,7 +6237,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 896
+  i32.const 792
   i32.const 0
   call $~lib/string/parseInt
   f64.const 0
@@ -8134,7 +6251,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 920
+  i32.const 816
   i32.const 0
   call $~lib/string/parseInt
   f64.const 1
@@ -8148,7 +6265,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 944
+  i32.const 840
   i32.const 0
   call $~lib/string/parseInt
   f64.const 5
@@ -8162,7 +6279,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 976
+  i32.const 872
   i32.const 0
   call $~lib/string/parseInt
   f64.const 455
@@ -8176,7 +6293,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1008
+  i32.const 904
   i32.const 0
   call $~lib/string/parseInt
   f64.const 3855
@@ -8190,7 +6307,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1040
+  i32.const 936
   i32.const 0
   call $~lib/string/parseInt
   f64.const 3855
@@ -8204,7 +6321,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1072
+  i32.const 968
   i32.const 0
   call $~lib/string/parseInt
   f64.const 11
@@ -8218,7 +6335,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1096
+  i32.const 992
   i32.const 0
   call $~lib/string/parseInt
   f64.const 1
@@ -8232,7 +6349,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 896
+  i32.const 792
   call $~lib/string/parseFloat
   f64.const 0
   f64.eq
@@ -8245,7 +6362,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 920
+  i32.const 816
   call $~lib/string/parseFloat
   f64.const 1
   f64.eq
@@ -8258,7 +6375,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1120
+  i32.const 1016
   call $~lib/string/parseFloat
   f64.const 0.1
   f64.eq
@@ -8271,7 +6388,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1144
+  i32.const 1040
   call $~lib/string/parseFloat
   f64.const 0.25
   f64.eq
@@ -8284,7 +6401,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1168
+  i32.const 1064
   call $~lib/string/parseFloat
   f64.const 0.1
   f64.eq
@@ -8299,13 +6416,13 @@
   end
   block
    i32.const 160
-   i32.const 1200
+   i32.const 1096
    call $~lib/string/String.__concat
    local.tee $22
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $23
    local.get $23
-   i32.const 1224
+   i32.const 1120
    call $~lib/string/String.__eq
    i32.eqz
    if
@@ -8329,9 +6446,9 @@
     unreachable
    end
    local.get $22
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $23
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   i32.const 120
   i32.const 120
@@ -8370,7 +6487,7 @@
    unreachable
   end
   i32.const 160
-  i32.const 1200
+  i32.const 1096
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8393,8 +6510,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1248
-  i32.const 1272
+  i32.const 1144
+  i32.const 1168
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8405,8 +6522,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1248
-  i32.const 1248
+  i32.const 1144
+  i32.const 1144
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8417,8 +6534,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1296
-  i32.const 1320
+  i32.const 1192
+  i32.const 1216
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8429,8 +6546,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1344
-  i32.const 1376
+  i32.const 1240
+  i32.const 1272
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8441,8 +6558,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1408
-  i32.const 1408
+  i32.const 1304
+  i32.const 1304
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8453,8 +6570,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1408
-  i32.const 1440
+  i32.const 1304
+  i32.const 1336
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8465,8 +6582,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1472
-  i32.const 1512
+  i32.const 1368
+  i32.const 1408
   call $~lib/string/String.__ne
   i32.eqz
   if
@@ -8477,7 +6594,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1200
+  i32.const 1096
   i32.const 160
   call $~lib/string/String.__gt
   i32.eqz
@@ -8489,7 +6606,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
+  i32.const 1448
   i32.const 160
   call $~lib/string/String.__gt
   i32.eqz
@@ -8501,8 +6618,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1576
+  i32.const 1448
+  i32.const 1472
   call $~lib/string/String.__gte
   i32.eqz
   if
@@ -8513,8 +6630,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1224
+  i32.const 1448
+  i32.const 1120
   call $~lib/string/String.__gt
   i32.eqz
   if
@@ -8525,8 +6642,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1552
-  i32.const 1224
+  i32.const 1448
+  i32.const 1120
   call $~lib/string/String.__lt
   i32.eqz
   i32.eqz
@@ -8538,7 +6655,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1200
+  i32.const 1096
   global.get $std/string/nullStr
   call $~lib/string/String.__lt
   i32.eqz
@@ -8552,7 +6669,7 @@
    unreachable
   end
   global.get $std/string/nullStr
-  i32.const 1200
+  i32.const 1096
   call $~lib/string/String.__lt
   i32.eqz
   i32.eqz
@@ -8564,7 +6681,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__gt
   i32.eqz
@@ -8577,7 +6694,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__lt
   i32.eqz
   if
@@ -8588,7 +6705,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__gte
   i32.eqz
@@ -8601,7 +6718,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__lte
   i32.eqz
   if
@@ -8612,7 +6729,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 536
+  i32.const 432
   i32.const 120
   call $~lib/string/String.__lt
   i32.eqz
@@ -8626,7 +6743,7 @@
    unreachable
   end
   i32.const 120
-  i32.const 536
+  i32.const 432
   call $~lib/string/String.__gt
   i32.eqz
   i32.eqz
@@ -8700,7 +6817,7 @@
    local.tee $24
    call $~lib/string/String.__concat
    local.tee $25
-   call $~lib/rt/purerc/__retain
+   call $~lib/rt/pure/__retain
    local.set $26
    local.get $23
    local.get $26
@@ -8715,17 +6832,17 @@
     unreachable
    end
    local.get $23
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $22
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $24
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $25
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
    local.get $26
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
-  i32.const 592
+  i32.const 488
   call $~lib/string/String#get:length
   i32.const 3
   i32.eq
@@ -8787,7 +6904,7 @@
   i32.const 2
   call $~lib/string/String#repeat
   local.tee $22
-  i32.const 1576
+  i32.const 1472
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8802,7 +6919,7 @@
   i32.const 3
   call $~lib/string/String#repeat
   local.tee $23
-  i32.const 1648
+  i32.const 1544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8813,11 +6930,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1224
+  i32.const 1120
   i32.const 4
   call $~lib/string/String#repeat
   local.tee $27
-  i32.const 1672
+  i32.const 1568
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8832,7 +6949,7 @@
   i32.const 5
   call $~lib/string/String#repeat
   local.tee $28
-  i32.const 1704
+  i32.const 1600
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8847,7 +6964,7 @@
   i32.const 6
   call $~lib/string/String#repeat
   local.tee $29
-  i32.const 1736
+  i32.const 1632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8862,7 +6979,7 @@
   i32.const 7
   call $~lib/string/String#repeat
   local.tee $30
-  i32.const 1768
+  i32.const 1664
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8873,16 +6990,16 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1800
+  i32.const 1696
   global.get $std/string/str
-  call $~lib/rt/purerc/__retainRelease
+  call $~lib/rt/pure/__retainRelease
   global.set $std/string/str
   global.get $std/string/str
   i32.const 0
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#slice
   local.tee $31
-  i32.const 1800
+  i32.const 1696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8898,7 +7015,7 @@
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#slice
   local.tee $32
-  i32.const 1848
+  i32.const 1744
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8914,7 +7031,7 @@
   global.get $~lib/builtins/i32.MAX_VALUE
   call $~lib/string/String#slice
   local.tee $33
-  i32.const 1872
+  i32.const 1768
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8930,7 +7047,7 @@
   i32.const 7
   call $~lib/string/String#slice
   local.tee $34
-  i32.const 1904
+  i32.const 1800
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8946,7 +7063,7 @@
   i32.const -6
   call $~lib/string/String#slice
   local.tee $35
-  i32.const 1936
+  i32.const 1832
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8978,7 +7095,7 @@
   i32.const -1
   call $~lib/string/String#slice
   local.tee $37
-  i32.const 1968
+  i32.const 1864
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -8994,7 +7111,7 @@
    local.set $38
    block (result i32)
     local.get $38
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 120
     i32.const 0
     global.get $~lib/builtins/i32.MAX_VALUE
@@ -9014,7 +7131,7 @@
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9032,7 +7149,7 @@
    end
    block (result i32)
     local.get $38
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 120
     i32.const 120
     global.get $~lib/builtins/i32.MAX_VALUE
@@ -9054,9 +7171,9 @@
    end
    block (result i32)
     local.get $38
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     i32.const 120
-    i32.const 776
+    i32.const 672
     global.get $~lib/builtins/i32.MAX_VALUE
     call $~lib/string/String#split
    end
@@ -9074,7 +7191,7 @@
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9092,9 +7209,9 @@
    end
    block (result i32)
     local.get $38
-    call $~lib/rt/purerc/__release
-    i32.const 2344
-    i32.const 2376
+    call $~lib/rt/pure/__release
+    i32.const 2128
+    i32.const 2160
     global.get $~lib/builtins/i32.MAX_VALUE
     call $~lib/string/String#split
    end
@@ -9108,11 +7225,11 @@
     i32.const 0
     call $~lib/array/Array<~lib/string/String>#__get
     local.tee $39
-    i32.const 2344
+    i32.const 2128
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9130,9 +7247,9 @@
    end
    block (result i32)
     local.get $38
-    call $~lib/rt/purerc/__release
-    i32.const 2344
-    i32.const 776
+    call $~lib/rt/pure/__release
+    i32.const 2128
+    i32.const 672
     global.get $~lib/builtins/i32.MAX_VALUE
     call $~lib/string/String#split
    end
@@ -9150,7 +7267,7 @@
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9162,11 +7279,11 @@
     i32.const 1
     call $~lib/array/Array<~lib/string/String>#__get
     local.tee $39
-    i32.const 1200
+    i32.const 1096
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9178,11 +7295,11 @@
     i32.const 2
     call $~lib/array/Array<~lib/string/String>#__get
     local.tee $39
-    i32.const 2400
+    i32.const 2184
     call $~lib/string/String.__eq
     local.set $40
     local.get $39
-    call $~lib/rt/purerc/__release
+    call $~lib/rt/pure/__release
     local.get $40
    else    
     i32.const 0
@@ -9199,12 +7316,12 @@
     unreachable
    end
    local.get $38
-   call $~lib/rt/purerc/__release
+   call $~lib/rt/pure/__release
   end
   i32.const 0
   call $~lib/util/number/itoa32
   local.tee $38
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9218,7 +7335,7 @@
   i32.const 1
   call $~lib/util/number/itoa32
   local.tee $39
-  i32.const 920
+  i32.const 816
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9232,7 +7349,7 @@
   i32.const 8
   call $~lib/util/number/itoa32
   local.tee $40
-  i32.const 2872
+  i32.const 2656
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9246,7 +7363,7 @@
   i32.const 123
   call $~lib/util/number/itoa32
   local.tee $41
-  i32.const 592
+  i32.const 488
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9260,7 +7377,7 @@
   i32.const -1000
   call $~lib/util/number/itoa32
   local.tee $42
-  i32.const 2896
+  i32.const 2680
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9274,7 +7391,7 @@
   i32.const 1234
   call $~lib/util/number/itoa32
   local.tee $43
-  i32.const 2928
+  i32.const 2712
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9288,7 +7405,7 @@
   i32.const 12345
   call $~lib/util/number/itoa32
   local.tee $44
-  i32.const 2952
+  i32.const 2736
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9302,7 +7419,7 @@
   i32.const 123456
   call $~lib/util/number/itoa32
   local.tee $45
-  i32.const 2984
+  i32.const 2768
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9316,7 +7433,7 @@
   i32.const 1111111
   call $~lib/util/number/itoa32
   local.tee $46
-  i32.const 3016
+  i32.const 2800
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9330,7 +7447,7 @@
   i32.const 1234567
   call $~lib/util/number/itoa32
   local.tee $47
-  i32.const 3048
+  i32.const 2832
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9344,7 +7461,7 @@
   i32.const 2147483646
   call $~lib/util/number/itoa32
   local.tee $48
-  i32.const 3080
+  i32.const 2864
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9358,7 +7475,7 @@
   i32.const 2147483647
   call $~lib/util/number/itoa32
   local.tee $49
-  i32.const 3120
+  i32.const 2904
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9372,7 +7489,7 @@
   i32.const -2147483648
   call $~lib/util/number/itoa32
   local.tee $50
-  i32.const 3160
+  i32.const 2944
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9386,7 +7503,7 @@
   i32.const -1
   call $~lib/util/number/itoa32
   local.tee $51
-  i32.const 3200
+  i32.const 2984
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9400,7 +7517,7 @@
   i32.const 0
   call $~lib/util/number/utoa32
   local.tee $52
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9414,7 +7531,7 @@
   i32.const 1000
   call $~lib/util/number/utoa32
   local.tee $53
-  i32.const 3224
+  i32.const 3008
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9428,7 +7545,7 @@
   i32.const 2147483647
   call $~lib/util/number/utoa32
   local.tee $54
-  i32.const 3120
+  i32.const 2904
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9442,7 +7559,7 @@
   i32.const -2147483648
   call $~lib/util/number/utoa32
   local.tee $55
-  i32.const 3248
+  i32.const 3032
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9456,7 +7573,7 @@
   global.get $~lib/builtins/u32.MAX_VALUE
   call $~lib/util/number/utoa32
   local.tee $56
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9470,7 +7587,7 @@
   i64.const 0
   call $~lib/util/number/utoa64
   local.tee $57
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9484,7 +7601,7 @@
   i64.const 1234
   call $~lib/util/number/utoa64
   local.tee $58
-  i32.const 2928
+  i32.const 2712
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9498,7 +7615,7 @@
   i64.const 99999999
   call $~lib/util/number/utoa64
   local.tee $59
-  i32.const 3328
+  i32.const 3112
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9512,7 +7629,7 @@
   i64.const 100000000
   call $~lib/util/number/utoa64
   local.tee $60
-  i32.const 3360
+  i32.const 3144
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9526,7 +7643,7 @@
   i64.const 4294967295
   call $~lib/util/number/utoa64
   local.tee $61
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9540,7 +7657,7 @@
   i64.const 68719476735
   call $~lib/util/number/utoa64
   local.tee $62
-  i32.const 3400
+  i32.const 3184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9554,7 +7671,7 @@
   i64.const 868719476735
   call $~lib/util/number/utoa64
   local.tee $63
-  i32.const 3440
+  i32.const 3224
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9568,7 +7685,7 @@
   i64.const 999868719476735
   call $~lib/util/number/utoa64
   local.tee $64
-  i32.const 3480
+  i32.const 3264
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9582,7 +7699,7 @@
   i64.const 9999868719476735
   call $~lib/util/number/utoa64
   local.tee $65
-  i32.const 3528
+  i32.const 3312
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9596,7 +7713,7 @@
   i64.const 19999868719476735
   call $~lib/util/number/utoa64
   local.tee $66
-  i32.const 3576
+  i32.const 3360
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9610,7 +7727,7 @@
   global.get $~lib/builtins/u64.MAX_VALUE
   call $~lib/util/number/utoa64
   local.tee $67
-  i32.const 3632
+  i32.const 3416
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9624,7 +7741,7 @@
   i64.const 0
   call $~lib/util/number/itoa64
   local.tee $68
-  i32.const 896
+  i32.const 792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9638,7 +7755,7 @@
   i64.const -1234
   call $~lib/util/number/itoa64
   local.tee $69
-  i32.const 3688
+  i32.const 3472
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9652,7 +7769,7 @@
   i64.const 4294967295
   call $~lib/util/number/itoa64
   local.tee $70
-  i32.const 3288
+  i32.const 3072
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9666,7 +7783,7 @@
   i64.const -4294967295
   call $~lib/util/number/itoa64
   local.tee $71
-  i32.const 3720
+  i32.const 3504
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9680,7 +7797,7 @@
   i64.const 68719476735
   call $~lib/util/number/itoa64
   local.tee $72
-  i32.const 3400
+  i32.const 3184
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9694,7 +7811,7 @@
   i64.const -68719476735
   call $~lib/util/number/itoa64
   local.tee $73
-  i32.const 3760
+  i32.const 3544
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9708,7 +7825,7 @@
   i64.const -868719476735
   call $~lib/util/number/itoa64
   local.tee $74
-  i32.const 3800
+  i32.const 3584
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9722,7 +7839,7 @@
   i64.const -999868719476735
   call $~lib/util/number/itoa64
   local.tee $75
-  i32.const 3848
+  i32.const 3632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9736,7 +7853,7 @@
   i64.const -19999868719476735
   call $~lib/util/number/itoa64
   local.tee $76
-  i32.const 3896
+  i32.const 3680
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9750,7 +7867,7 @@
   global.get $~lib/builtins/i64.MAX_VALUE
   call $~lib/util/number/itoa64
   local.tee $77
-  i32.const 3952
+  i32.const 3736
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9764,7 +7881,7 @@
   global.get $~lib/builtins/i64.MIN_VALUE
   call $~lib/util/number/itoa64
   local.tee $78
-  i32.const 4008
+  i32.const 3792
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9778,7 +7895,7 @@
   f64.const 0
   call $~lib/util/number/dtoa
   local.tee $79
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9792,7 +7909,7 @@
   f64.const -0
   call $~lib/util/number/dtoa
   local.tee $80
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9806,7 +7923,7 @@
   f64.const nan:0x8000000000000
   call $~lib/util/number/dtoa
   local.tee $81
-  i32.const 4088
+  i32.const 3872
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9820,7 +7937,7 @@
   f64.const inf
   call $~lib/util/number/dtoa
   local.tee $82
-  i32.const 4152
+  i32.const 3936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9835,7 +7952,7 @@
   f64.neg
   call $~lib/util/number/dtoa
   local.tee $83
-  i32.const 4112
+  i32.const 3896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9849,7 +7966,7 @@
   global.get $~lib/builtins/f64.EPSILON
   call $~lib/util/number/dtoa
   local.tee $84
-  i32.const 5240
+  i32.const 5024
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9864,7 +7981,7 @@
   f64.neg
   call $~lib/util/number/dtoa
   local.tee $85
-  i32.const 5304
+  i32.const 5088
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9878,7 +7995,7 @@
   global.get $~lib/builtins/f64.MAX_VALUE
   call $~lib/util/number/dtoa
   local.tee $86
-  i32.const 5368
+  i32.const 5152
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9893,7 +8010,7 @@
   f64.neg
   call $~lib/util/number/dtoa
   local.tee $87
-  i32.const 5432
+  i32.const 5216
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9907,7 +8024,7 @@
   f64.const 4185580496821356722454785e274
   call $~lib/util/number/dtoa
   local.tee $88
-  i32.const 5496
+  i32.const 5280
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9921,7 +8038,7 @@
   f64.const 2.2250738585072014e-308
   call $~lib/util/number/dtoa
   local.tee $89
-  i32.const 5560
+  i32.const 5344
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9935,7 +8052,7 @@
   f64.const 4.940656e-318
   call $~lib/util/number/dtoa
   local.tee $90
-  i32.const 5624
+  i32.const 5408
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9949,7 +8066,7 @@
   f64.const 9060801153433600
   call $~lib/util/number/dtoa
   local.tee $91
-  i32.const 5672
+  i32.const 5456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9963,7 +8080,7 @@
   f64.const 4708356024711512064
   call $~lib/util/number/dtoa
   local.tee $92
-  i32.const 5728
+  i32.const 5512
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9977,7 +8094,7 @@
   f64.const 9409340012568248320
   call $~lib/util/number/dtoa
   local.tee $93
-  i32.const 5792
+  i32.const 5576
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -9991,7 +8108,7 @@
   f64.const 5e-324
   call $~lib/util/number/dtoa
   local.tee $94
-  i32.const 5856
+  i32.const 5640
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10005,7 +8122,7 @@
   f64.const 1
   call $~lib/util/number/dtoa
   local.tee $95
-  i32.const 5888
+  i32.const 5672
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10019,7 +8136,7 @@
   f64.const 0.1
   call $~lib/util/number/dtoa
   local.tee $96
-  i32.const 1120
+  i32.const 1016
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10033,7 +8150,7 @@
   f64.const -1
   call $~lib/util/number/dtoa
   local.tee $97
-  i32.const 5912
+  i32.const 5696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10047,7 +8164,7 @@
   f64.const -0.1
   call $~lib/util/number/dtoa
   local.tee $98
-  i32.const 5936
+  i32.const 5720
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10061,7 +8178,7 @@
   f64.const 1e6
   call $~lib/util/number/dtoa
   local.tee $99
-  i32.const 5960
+  i32.const 5744
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10075,7 +8192,7 @@
   f64.const 1e-06
   call $~lib/util/number/dtoa
   local.tee $100
-  i32.const 6000
+  i32.const 5784
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10089,7 +8206,7 @@
   f64.const -1e6
   call $~lib/util/number/dtoa
   local.tee $101
-  i32.const 6032
+  i32.const 5816
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10103,7 +8220,7 @@
   f64.const -1e-06
   call $~lib/util/number/dtoa
   local.tee $102
-  i32.const 6072
+  i32.const 5856
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10117,7 +8234,7 @@
   f64.const 1e7
   call $~lib/util/number/dtoa
   local.tee $103
-  i32.const 6112
+  i32.const 5896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10131,7 +8248,7 @@
   f64.const 1e-07
   call $~lib/util/number/dtoa
   local.tee $104
-  i32.const 6152
+  i32.const 5936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10145,7 +8262,7 @@
   f64.const 1.e+308
   call $~lib/util/number/dtoa
   local.tee $105
-  i32.const 6176
+  i32.const 5960
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10159,7 +8276,7 @@
   f64.const -1.e+308
   call $~lib/util/number/dtoa
   local.tee $106
-  i32.const 6208
+  i32.const 5992
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10173,7 +8290,7 @@
   f64.const inf
   call $~lib/util/number/dtoa
   local.tee $107
-  i32.const 4152
+  i32.const 3936
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10187,7 +8304,7 @@
   f64.const -inf
   call $~lib/util/number/dtoa
   local.tee $108
-  i32.const 4112
+  i32.const 3896
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10201,7 +8318,7 @@
   f64.const 1e-308
   call $~lib/util/number/dtoa
   local.tee $109
-  i32.const 6240
+  i32.const 6024
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10215,7 +8332,7 @@
   f64.const -1e-308
   call $~lib/util/number/dtoa
   local.tee $110
-  i32.const 6272
+  i32.const 6056
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10229,7 +8346,7 @@
   f64.const 1e-323
   call $~lib/util/number/dtoa
   local.tee $111
-  i32.const 6304
+  i32.const 6088
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10243,7 +8360,7 @@
   f64.const -1e-323
   call $~lib/util/number/dtoa
   local.tee $112
-  i32.const 6336
+  i32.const 6120
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10257,7 +8374,7 @@
   f64.const 0
   call $~lib/util/number/dtoa
   local.tee $113
-  i32.const 4064
+  i32.const 3848
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10271,7 +8388,7 @@
   f64.const 4294967272
   call $~lib/util/number/dtoa
   local.tee $114
-  i32.const 6368
+  i32.const 6152
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10285,7 +8402,7 @@
   f64.const 1.2312145673456234e-08
   call $~lib/util/number/dtoa
   local.tee $115
-  i32.const 6408
+  i32.const 6192
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10299,7 +8416,7 @@
   f64.const 555555555.5555556
   call $~lib/util/number/dtoa
   local.tee $116
-  i32.const 6472
+  i32.const 6256
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10313,7 +8430,7 @@
   f64.const 0.9999999999999999
   call $~lib/util/number/dtoa
   local.tee $117
-  i32.const 6528
+  i32.const 6312
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10327,7 +8444,7 @@
   f64.const 1
   call $~lib/util/number/dtoa
   local.tee $118
-  i32.const 5888
+  i32.const 5672
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10341,7 +8458,7 @@
   f64.const 12.34
   call $~lib/util/number/dtoa
   local.tee $119
-  i32.const 6584
+  i32.const 6368
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10357,7 +8474,7 @@
   f64.div
   call $~lib/util/number/dtoa
   local.tee $120
-  i32.const 6616
+  i32.const 6400
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10371,7 +8488,7 @@
   f64.const 1234e17
   call $~lib/util/number/dtoa
   local.tee $121
-  i32.const 6672
+  i32.const 6456
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10385,7 +8502,7 @@
   f64.const 1234e18
   call $~lib/util/number/dtoa
   local.tee $122
-  i32.const 6736
+  i32.const 6520
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10399,7 +8516,7 @@
   f64.const 2.71828
   call $~lib/util/number/dtoa
   local.tee $123
-  i32.const 6776
+  i32.const 6560
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10413,7 +8530,7 @@
   f64.const 0.0271828
   call $~lib/util/number/dtoa
   local.tee $124
-  i32.const 6808
+  i32.const 6592
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10427,7 +8544,7 @@
   f64.const 271.828
   call $~lib/util/number/dtoa
   local.tee $125
-  i32.const 6848
+  i32.const 6632
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10441,7 +8558,7 @@
   f64.const 1.1e+128
   call $~lib/util/number/dtoa
   local.tee $126
-  i32.const 6880
+  i32.const 6664
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10455,7 +8572,7 @@
   f64.const 1.1e-64
   call $~lib/util/number/dtoa
   local.tee $127
-  i32.const 6912
+  i32.const 6696
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10469,7 +8586,7 @@
   f64.const 0.000035689
   call $~lib/util/number/dtoa
   local.tee $128
-  i32.const 6944
+  i32.const 6728
   call $~lib/string/String.__eq
   i32.eqz
   if
@@ -10481,274 +8598,2205 @@
    unreachable
   end
   global.get $std/string/str
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $4
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $5
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $6
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $7
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $8
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $9
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $10
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $11
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $12
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $13
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $15
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $16
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $17
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $18
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $19
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $20
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $21
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $22
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $23
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $24
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $25
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $26
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $27
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $28
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $29
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $30
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $31
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $32
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $33
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $34
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $35
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $36
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $37
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $38
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $39
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $40
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $41
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $42
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $43
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $44
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $45
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $46
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $47
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $48
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $49
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $50
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $51
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $52
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $53
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $54
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $55
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $56
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $57
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $58
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $59
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $60
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $61
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $62
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $63
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $64
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $65
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $66
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $67
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $68
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $69
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $70
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $71
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $72
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $73
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $74
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $75
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $76
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $77
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $78
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $79
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $80
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $81
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $82
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $83
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $84
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $85
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $86
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $87
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $88
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $89
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $90
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $91
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $92
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $93
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $94
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $95
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $96
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $97
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $98
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $99
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $100
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $101
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $102
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $103
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $104
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $105
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $106
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $107
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $108
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $109
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $110
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $111
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $112
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $113
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $114
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $115
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $116
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $117
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $118
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $119
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $120
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $121
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $122
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $123
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $124
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $125
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $126
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $127
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
   local.get $128
-  call $~lib/rt/purerc/__release
+  call $~lib/rt/pure/__release
  )
- (func $std/string/getString (; 79 ;) (type $FUNCSIG$i) (result i32)
+ (func $std/string/getString (; 57 ;) (type $FUNCSIG$i) (result i32)
   global.get $std/string/str
-  call $~lib/rt/purerc/__retain
+  call $~lib/rt/pure/__retain
  )
- (func $start (; 80 ;) (type $FUNCSIG$v)
+ (func $start (; 58 ;) (type $FUNCSIG$v)
   call $start:std/string
  )
- (func $~lib/rt/purerc/markGray (; 81 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/tlsf/removeBlock (; 59 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 275
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 277
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $4
+   local.get $3
+   i32.const 4
+   i32.shr_u
+   local.set $5
+  else   
+   i32.const 31
+   local.get $3
+   i32.clz
+   i32.sub
+   local.set $4
+   local.get $3
+   local.get $4
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $5
+   local.get $4
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $4
+  end
+  local.get $4
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $5
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 290
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=16
+  local.set $6
+  local.get $1
+  i32.load offset=20
+  local.set $7
+  local.get $6
+  if
+   local.get $6
+   local.get $7
+   i32.store offset=20
+  end
+  local.get $7
+  if
+   local.get $7
+   local.get $6
+   i32.store offset=16
+  end
+  local.get $1
+  block $~lib/rt/tlsf/GETHEAD|inlined.0 (result i32)
+   local.get $0
+   local.set $10
+   local.get $4
+   local.set $9
+   local.get $5
+   local.set $8
+   local.get $10
+   local.get $9
+   i32.const 4
+   i32.shl
+   local.get $8
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  i32.eq
+  if
+   block $~lib/rt/tlsf/SETHEAD|inlined.1
+    local.get $0
+    local.set $11
+    local.get $4
+    local.set $10
+    local.get $5
+    local.set $9
+    local.get $7
+    local.set $8
+    local.get $11
+    local.get $10
+    i32.const 4
+    i32.shl
+    local.get $9
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $8
+    i32.store offset=96
+   end
+   local.get $7
+   i32.eqz
+   if
+    block $~lib/rt/tlsf/GETSL|inlined.0 (result i32)
+     local.get $0
+     local.set $9
+     local.get $4
+     local.set $8
+     local.get $9
+     local.get $8
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $8
+    block $~lib/rt/tlsf/SETSL|inlined.1
+     local.get $0
+     local.set $11
+     local.get $4
+     local.set $10
+     local.get $8
+     i32.const 1
+     local.get $5
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     local.tee $8
+     local.set $9
+     local.get $11
+     local.get $10
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $9
+     i32.store offset=4
+    end
+    local.get $8
+    i32.eqz
+    if
+     local.get $0
+     local.get $0
+     i32.load
+     i32.const 1
+     local.get $4
+     i32.shl
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.store
+    end
+   end
+  end
+ )
+ (func $~lib/rt/tlsf/insertBlock (; 60 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i32)
+  local.get $1
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 203
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 205
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETRIGHT|inlined.0 (result i32)
+   local.get $1
+   local.set $3
+   local.get $3
+   i32.const 16
+   i32.add
+   local.get $3
+   i32.load
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+  end
+  local.set $4
+  local.get $4
+  i32.load
+  local.set $5
+  local.get $5
+  i32.const 1
+  i32.and
+  if
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $3
+   local.get $3
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $4
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $2
+    i32.const 3
+    i32.and
+    local.get $3
+    i32.or
+    local.tee $2
+    i32.store
+    block $~lib/rt/tlsf/GETRIGHT|inlined.1 (result i32)
+     local.get $1
+     local.set $6
+     local.get $6
+     i32.const 16
+     i32.add
+     local.get $6
+     i32.load
+     i32.const 3
+     i32.const -1
+     i32.xor
+     i32.and
+     i32.add
+    end
+    local.set $4
+    local.get $4
+    i32.load
+    local.set $5
+   end
+  end
+  local.get $2
+  i32.const 2
+  i32.and
+  if
+   block $~lib/rt/tlsf/GETFREELEFT|inlined.0 (result i32)
+    local.get $1
+    local.set $3
+    local.get $3
+    i32.const 4
+    i32.sub
+    i32.load
+   end
+   local.set $3
+   local.get $3
+   i32.load
+   local.set $6
+   local.get $6
+   i32.const 1
+   i32.and
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 226
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $6
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $7
+   local.get $7
+   i32.const 1073741808
+   i32.lt_u
+   if
+    local.get $0
+    local.get $3
+    call $~lib/rt/tlsf/removeBlock
+    local.get $3
+    local.get $6
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
+    local.tee $2
+    i32.store
+    local.get $3
+    local.set $1
+   end
+  end
+  local.get $4
+  local.get $5
+  i32.const 2
+  i32.or
+  i32.store
+  local.get $2
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $8
+  local.get $8
+  i32.const 16
+  i32.ge_u
+  if (result i32)
+   local.get $8
+   i32.const 1073741808
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 241
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $8
+  i32.add
+  local.get $4
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 242
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $4
+  i32.const 4
+  i32.sub
+  local.get $1
+  i32.store
+  local.get $8
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $9
+   local.get $8
+   i32.const 4
+   i32.shr_u
+   local.set $10
+  else   
+   i32.const 31
+   local.get $8
+   i32.clz
+   i32.sub
+   local.set $9
+   local.get $8
+   local.get $9
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $10
+   local.get $9
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $9
+  end
+  local.get $9
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $10
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 258
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETHEAD|inlined.1 (result i32)
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   local.get $10
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 4
+   i32.shl
+   local.get $7
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=96
+  end
+  local.set $11
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  local.get $11
+  i32.store offset=20
+  local.get $11
+  if
+   local.get $11
+   local.get $1
+   i32.store offset=16
+  end
+  block $~lib/rt/tlsf/SETHEAD|inlined.2
+   local.get $0
+   local.set $12
+   local.get $9
+   local.set $3
+   local.get $10
+   local.set $6
+   local.get $1
+   local.set $7
+   local.get $12
+   local.get $3
+   i32.const 4
+   i32.shl
+   local.get $6
+   i32.add
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=96
+  end
+  local.get $0
+  local.get $0
+  i32.load
+  i32.const 1
+  local.get $9
+  i32.shl
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETSL|inlined.2
+   local.get $0
+   local.set $3
+   local.get $9
+   local.set $6
+   block $~lib/rt/tlsf/GETSL|inlined.1 (result i32)
+    local.get $0
+    local.set $13
+    local.get $9
+    local.set $12
+    local.get $13
+    local.get $12
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=4
+   end
+   i32.const 1
+   local.get $10
+   i32.shl
+   i32.or
+   local.set $7
+   local.get $3
+   local.get $6
+   i32.const 2
+   i32.shl
+   i32.add
+   local.get $7
+   i32.store offset=4
+  end
+ )
+ (func $~lib/rt/tlsf/addMemory (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  local.get $2
+  i32.le_u
+  if (result i32)
+   local.get $1
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  if (result i32)
+   local.get $2
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 384
+   i32.const 4
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETTAIL|inlined.0 (result i32)
+   local.get $0
+   local.set $3
+   local.get $3
+   i32.load offset=1568
+  end
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $4
+  if
+   local.get $1
+   local.get $4
+   i32.const 16
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 394
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   i32.const 16
+   i32.sub
+   local.get $4
+   i32.eq
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.load
+    local.set $5
+   else    
+    nop
+   end
+  else   
+   local.get $1
+   local.get $0
+   i32.const 1572
+   i32.add
+   i32.ge_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 406
+    i32.const 4
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $6
+  local.get $6
+  i32.const 48
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $6
+  i32.const 2
+  i32.const 16
+  i32.mul
+  i32.sub
+  local.set $7
+  local.get $1
+  local.set $8
+  local.get $8
+  local.get $7
+  i32.const 1
+  i32.or
+  local.get $5
+  i32.const 2
+  i32.and
+  i32.or
+  i32.store
+  local.get $8
+  i32.const 0
+  i32.store offset=16
+  local.get $8
+  i32.const 0
+  i32.store offset=20
+  local.get $1
+  local.get $6
+  i32.add
+  i32.const 16
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.const 2
+  i32.or
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.1
+   local.get $0
+   local.set $9
+   local.get $4
+   local.set $3
+   local.get $9
+   local.get $3
+   i32.store offset=1568
+  end
+  local.get $0
+  local.get $8
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+ )
+ (func $~lib/rt/tlsf/initializeRoot (; 62 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  global.get $~lib/heap/HEAP_BASE
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $0
+  current_memory
+  local.set $1
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $2
+  local.get $2
+  local.get $1
+  i32.gt_s
+  if (result i32)
+   local.get $2
+   local.get $1
+   i32.sub
+   grow_memory
+   i32.const 0
+   i32.lt_s
+  else   
+   i32.const 0
+  end
+  if
+   unreachable
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.store
+  block $~lib/rt/tlsf/SETTAIL|inlined.0
+   local.get $3
+   local.set $5
+   i32.const 0
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.store offset=1568
+  end
+  block $break|0
+   i32.const 0
+   local.set $4
+   loop $repeat|0
+    local.get $4
+    i32.const 23
+    i32.lt_u
+    i32.eqz
+    br_if $break|0
+    block $~lib/rt/tlsf/SETSL|inlined.0
+     local.get $3
+     local.set $7
+     local.get $4
+     local.set $6
+     i32.const 0
+     local.set $5
+     local.get $7
+     local.get $6
+     i32.const 2
+     i32.shl
+     i32.add
+     local.get $5
+     i32.store offset=4
+    end
+    block $break|1
+     i32.const 0
+     local.set $5
+     loop $repeat|1
+      local.get $5
+      i32.const 16
+      i32.lt_u
+      i32.eqz
+      br_if $break|1
+      block $~lib/rt/tlsf/SETHEAD|inlined.0
+       local.get $3
+       local.set $9
+       local.get $4
+       local.set $8
+       local.get $5
+       local.set $7
+       i32.const 0
+       local.set $6
+       local.get $9
+       local.get $8
+       i32.const 4
+       i32.shl
+       local.get $7
+       i32.add
+       i32.const 2
+       i32.shl
+       i32.add
+       local.get $6
+       i32.store offset=96
+      end
+      local.get $5
+      i32.const 1
+      i32.add
+      local.set $5
+      br $repeat|1
+      unreachable
+     end
+     unreachable
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $repeat|0
+    unreachable
+   end
+   unreachable
+  end
+  local.get $3
+  local.get $0
+  i32.const 1572
+  i32.add
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  current_memory
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+  local.get $3
+  global.set $~lib/rt/tlsf/ROOT
+ )
+ (func $~lib/rt/tlsf/prepareSize (; 63 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 6816
+   i32.const 6768
+   i32.const 446
+   i32.const 29
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 15
+  i32.add
+  i32.const 15
+  i32.const -1
+  i32.xor
+  i32.and
+  local.tee $1
+  i32.const 16
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_u
+  select
+ )
+ (func $~lib/rt/tlsf/searchBlock (; 64 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   i32.const 0
+   local.set $2
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $3
+  else   
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   if (result i32)
+    local.get $1
+    i32.const 1
+    i32.const 27
+    local.get $1
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.add
+    i32.const 1
+    i32.sub
+   else    
+    local.get $1
+   end
+   local.set $4
+   i32.const 31
+   local.get $4
+   i32.clz
+   i32.sub
+   local.set $2
+   local.get $4
+   local.get $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 1
+   i32.const 4
+   i32.shl
+   i32.xor
+   local.set $3
+   local.get $2
+   i32.const 8
+   i32.const 1
+   i32.sub
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  if (result i32)
+   local.get $3
+   i32.const 16
+   i32.lt_u
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 336
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $~lib/rt/tlsf/GETSL|inlined.2 (result i32)
+   local.get $0
+   local.set $5
+   local.get $2
+   local.set $4
+   local.get $5
+   local.get $4
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load offset=4
+  end
+  i32.const 0
+  i32.const -1
+  i32.xor
+  local.get $3
+  i32.shl
+  i32.and
+  local.set $6
+  local.get $6
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   i32.const 0
+   i32.const -1
+   i32.xor
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
+   i32.and
+   local.set $4
+   local.get $4
+   i32.eqz
+   if
+    i32.const 0
+    local.set $7
+   else    
+    local.get $4
+    i32.ctz
+    local.set $2
+    block $~lib/rt/tlsf/GETSL|inlined.3 (result i32)
+     local.get $0
+     local.set $8
+     local.get $2
+     local.set $5
+     local.get $8
+     local.get $5
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=4
+    end
+    local.set $6
+    local.get $6
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 6768
+     i32.const 349
+     i32.const 17
+     call $~lib/builtins/abort
+     unreachable
+    end
+    block $~lib/rt/tlsf/GETHEAD|inlined.2 (result i32)
+     local.get $0
+     local.set $9
+     local.get $2
+     local.set $8
+     local.get $6
+     i32.ctz
+     local.set $5
+     local.get $9
+     local.get $8
+     i32.const 4
+     i32.shl
+     local.get $5
+     i32.add
+     i32.const 2
+     i32.shl
+     i32.add
+     i32.load offset=96
+    end
+    local.set $7
+   end
+  else   
+   block $~lib/rt/tlsf/GETHEAD|inlined.3 (result i32)
+    local.get $0
+    local.set $8
+    local.get $2
+    local.set $5
+    local.get $6
+    i32.ctz
+    local.set $4
+    local.get $8
+    local.get $5
+    i32.const 4
+    i32.shl
+    local.get $4
+    i32.add
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load offset=96
+   end
+   local.set $7
+  end
+  local.get $7
+ )
+ (func $~lib/rt/tlsf/growMemory (; 65 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  current_memory
+  local.set $2
+  local.get $1
+  i32.const 65535
+  i32.add
+  i32.const 65535
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.const 16
+  i32.shr_u
+  local.set $3
+  local.get $2
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.set $6
+  local.get $6
+  grow_memory
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $3
+   grow_memory
+   i32.const 0
+   i32.lt_s
+   if
+    unreachable
+   end
+  end
+  current_memory
+  local.set $7
+  local.get $0
+  local.get $2
+  i32.const 16
+  i32.shl
+  local.get $7
+  i32.const 16
+  i32.shl
+  call $~lib/rt/tlsf/addMemory
+  drop
+ )
+ (func $~lib/rt/tlsf/prepareBlock (; 66 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 363
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.sub
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $2
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $5
+   call $~lib/rt/tlsf/insertBlock
+  else   
+   local.get $1
+   local.get $3
+   i32.const 1
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+   block $~lib/rt/tlsf/GETRIGHT|inlined.3 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   block $~lib/rt/tlsf/GETRIGHT|inlined.2 (result i32)
+    local.get $1
+    local.set $5
+    local.get $5
+    i32.const 16
+    i32.add
+    local.get $5
+    i32.load
+    i32.const 3
+    i32.const -1
+    i32.xor
+    i32.and
+    i32.add
+   end
+   i32.load
+   i32.const 2
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (; 67 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  call $~lib/rt/tlsf/prepareSize
+  local.set $2
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/searchBlock
+  local.set $3
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/growMemory
+   local.get $0
+   local.get $2
+   call $~lib/rt/tlsf/searchBlock
+   local.set $3
+   local.get $3
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6768
+    i32.const 476
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $3
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $2
+  i32.ge_u
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 478
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $3
+  call $~lib/rt/tlsf/removeBlock
+  local.get $0
+  local.get $3
+  local.get $2
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
+ )
+ (func $~lib/rt/tlsf/__alloc (; 68 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  local.set $2
+  local.get $2
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/initializeRoot
+   global.get $~lib/rt/tlsf/ROOT
+   local.set $2
+  end
+  local.get $2
+  local.get $0
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $3
+  local.get $3
+  local.get $1
+  i32.store offset=8
+  local.get $3
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/reallocateBlock (; 69 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
+  local.set $3
+  local.get $1
+  i32.load
+  local.set $4
+  local.get $4
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 491
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  local.get $4
+  i32.const -4
+  i32.and
+  i32.le_u
+  if
+   local.get $0
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
+   local.get $1
+   local.get $2
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  block $~lib/rt/tlsf/GETRIGHT|inlined.4 (result i32)
+   local.get $1
+   local.set $5
+   local.get $5
+   i32.const 16
+   i32.add
+   local.get $5
+   i32.load
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+  end
+  local.set $6
+  local.get $6
+  i32.load
+  local.set $7
+  local.get $7
+  i32.const 1
+  i32.and
+  if
+   local.get $4
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
+   local.get $7
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.add
+   local.set $5
+   local.get $5
+   local.get $3
+   i32.ge_u
+   if
+    local.get $0
+    local.get $6
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    i32.const 3
+    i32.and
+    local.get $5
+    i32.or
+    i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
+    local.get $0
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
+   end
+  end
+  local.get $0
+  local.get $2
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $8
+  local.get $8
+  local.get $1
+  i32.load offset=4
+  i32.store offset=4
+  local.get $8
+  local.get $1
+  i32.load offset=8
+  i32.store offset=8
+  local.get $8
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  call $~lib/memory/memory.copy
+  local.get $1
+  local.get $4
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+  local.get $8
+ )
+ (func $~lib/rt/tlsf/__realloc (; 70 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 552
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 0
+  i32.ne
+  if (result i32)
+   local.get $0
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 553
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+ )
+ (func $~lib/rt/tlsf/freeBlock (; 71 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 530
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  local.get $1
+  call $~lib/rt/tlsf/onFree
+ )
+ (func $~lib/rt/tlsf/__free (; 72 ;) (type $FUNCSIG$vi) (param $0 i32)
+  global.get $~lib/rt/tlsf/ROOT
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 560
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 0
+  i32.ne
+  if (result i32)
+   local.get $0
+   i32.const 15
+   i32.and
+   i32.eqz
+  else   
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6768
+   i32.const 561
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/tlsf/ROOT
+  local.get $0
+  i32.const 16
+  i32.sub
+  call $~lib/rt/tlsf/freeBlock
+ )
+ (func $~lib/rt/pure/increment (; 73 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 103
+   i32.const 2
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  local.get $0
+  call $~lib/rt/pure/onIncrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 106
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (; 74 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/__typeinfo (; 75 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
+  (local $1 i32)
+  global.get $~lib/rt/RTTI_BASE
+  local.set $1
+  local.get $0
+  i32.eqz
+  if (result i32)
+   i32.const 1
+  else   
+   local.get $0
+   local.get $1
+   i32.load
+   i32.gt_u
+  end
+  if
+   i32.const 2072
+   i32.const 6920
+   i32.const 23
+   i32.const 34
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $0
+  i32.const 8
+  i32.mul
+  i32.add
+  i32.load
+ )
+ (func $~lib/rt/pure/growRoots (; 76 ;) (type $FUNCSIG$v)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  global.get $~lib/rt/pure/ROOTS
+  local.set $0
+  global.get $~lib/rt/pure/CUR
+  local.get $0
+  i32.sub
+  local.set $1
+  local.get $1
+  i32.const 2
+  i32.mul
+  local.tee $2
+  i32.const 64
+  i32.const 2
+  i32.shl
+  local.tee $3
+  local.get $2
+  local.get $3
+  i32.gt_u
+  select
+  local.set $4
+  local.get $4
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.set $5
+  local.get $5
+  local.get $0
+  local.get $1
+  call $~lib/memory/memory.copy
+  local.get $5
+  global.set $~lib/rt/pure/ROOTS
+  local.get $5
+  local.get $1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+  local.get $5
+  local.get $4
+  i32.add
+  global.set $~lib/rt/pure/END
+ )
+ (func $~lib/rt/pure/appendRoot (; 77 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  global.get $~lib/rt/pure/CUR
+  local.set $1
+  local.get $1
+  global.get $~lib/rt/pure/END
+  i32.ge_u
+  if
+   call $~lib/rt/pure/growRoots
+   global.get $~lib/rt/pure/CUR
+   local.set $1
+  end
+  local.get $1
+  local.get $0
+  i32.store
+  local.get $1
+  i32.const 1
+  i32.add
+  global.set $~lib/rt/pure/CUR
+ )
+ (func $~lib/rt/pure/decrement (; 78 ;) (type $FUNCSIG$vi) (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.and
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/onDecrement
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 6872
+   i32.const 114
+   i32.const 13
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 1
+  i32.eq
+  if
+   local.get $0
+   i32.const 16
+   i32.add
+   i32.const 1
+   call $~lib/rt/__visit_members
+   local.get $1
+   i32.const -2147483648
+   i32.and
+   i32.eqz
+   if
+    global.get $~lib/rt/tlsf/ROOT
+    local.get $0
+    call $~lib/rt/tlsf/freeBlock
+   else    
+    local.get $0
+    i32.const -2147483648
+    i32.const 0
+    i32.or
+    i32.const 0
+    i32.or
+    i32.store offset=4
+   end
+  else   
+   local.get $2
+   i32.const 0
+   i32.gt_u
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 6872
+    i32.const 123
+    i32.const 15
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $0
+   i32.load offset=8
+   call $~lib/rt/__typeinfo
+   i32.const 8
+   i32.and
+   i32.eqz
+   if
+    local.get $0
+    i32.const -2147483648
+    i32.const 805306368
+    i32.or
+    local.get $2
+    i32.const 1
+    i32.sub
+    i32.or
+    i32.store offset=4
+    local.get $1
+    i32.const -2147483648
+    i32.and
+    i32.eqz
+    if
+     local.get $0
+     call $~lib/rt/pure/appendRoot
+    end
+   else    
+    local.get $0
+    local.get $1
+    i32.const 268435455
+    i32.const -1
+    i32.xor
+    i32.and
+    local.get $2
+    i32.const 1
+    i32.sub
+    i32.or
+    i32.store offset=4
+   end
+  end
+ )
+ (func $~lib/rt/pure/__retainRelease (; 79 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.ne
+  if
+   global.get $~lib/heap/HEAP_BASE
+   local.set $2
+   local.get $0
+   local.get $2
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/increment
+   end
+   local.get $1
+   local.get $2
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (; 80 ;) (type $FUNCSIG$vi) (param $0 i32)
+  local.get $0
+  global.get $~lib/heap/HEAP_BASE
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 81 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  local.get $2
+  local.get $0
+  i32.load offset=8
+  i32.add
+  local.set $3
+  block $break|0
+   loop $continue|0
+    local.get $2
+    local.get $3
+    i32.lt_u
+    if
+     local.get $2
+     i32.load
+     local.set $4
+     local.get $4
+     if
+      local.get $4
+      local.get $1
+      call $~lib/rt/pure/__visit
+     end
+     local.get $2
+     i32.const 4
+     i32.add
+     local.set $2
+     br $continue|0
+    end
+   end
+  end
+ )
+ (func $~lib/array/Array<i32>#__visit_impl (; 82 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<u32>#__visit_impl (; 83 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<u64>#__visit_impl (; 84 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/array/Array<i16>#__visit_impl (; 85 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+  nop
+ )
+ (func $~lib/rt/pure/markGray (; 86 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -10772,10 +10820,10 @@
    i32.const 16
    i32.add
    i32.const 2
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
  )
- (func $~lib/rt/purerc/scanBlack (; 82 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scanBlack (; 87 ;) (type $FUNCSIG$vi) (param $0 i32)
   local.get $0
   local.get $0
   i32.load offset=4
@@ -10790,9 +10838,9 @@
   i32.const 16
   i32.add
   i32.const 4
-  call $~lib/builtins/__visit_members
+  call $~lib/rt/__visit_members
  )
- (func $~lib/rt/purerc/scan (; 83 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/scan (; 88 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -10810,7 +10858,7 @@
    i32.gt_u
    if
     local.get $0
-    call $~lib/rt/purerc/scanBlack
+    call $~lib/rt/pure/scanBlack
    else    
     local.get $0
     local.get $1
@@ -10825,11 +10873,11 @@
     i32.const 16
     i32.add
     i32.const 3
-    call $~lib/builtins/__visit_members
+    call $~lib/rt/__visit_members
    end
   end
  )
- (func $~lib/rt/purerc/collectWhite (; 84 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $~lib/rt/pure/collectWhite (; 89 ;) (type $FUNCSIG$vi) (param $0 i32)
   (local $1 i32)
   local.get $0
   i32.load offset=4
@@ -10852,17 +10900,17 @@
    i32.const 16
    i32.add
    i32.const 5
-   call $~lib/builtins/__visit_members
+   call $~lib/rt/__visit_members
   end
   global.get $~lib/rt/tlsf/ROOT
   local.get $0
   call $~lib/rt/tlsf/freeBlock
  )
- (func $~lib/rt/purerc/__visit (; 85 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/pure/__visit (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  global.get $~lib/builtins/HEAP_BASE
+  global.get $~lib/heap/HEAP_BASE
   i32.lt_u
   if
    return
@@ -10904,7 +10952,7 @@
         end
         block
          local.get $2
-         call $~lib/rt/purerc/decrement
+         call $~lib/rt/pure/decrement
          br $break|0
          unreachable
         end
@@ -10920,7 +10968,7 @@
         i32.eqz
         if
          i32.const 0
-         i32.const 2016
+         i32.const 6872
          i32.const 74
          i32.const 17
          call $~lib/builtins/abort
@@ -10933,7 +10981,7 @@
         i32.sub
         i32.store offset=4
         local.get $2
-        call $~lib/rt/purerc/markGray
+        call $~lib/rt/pure/markGray
         br $break|0
         unreachable
        end
@@ -10941,7 +10989,7 @@
       end
       block
        local.get $2
-       call $~lib/rt/purerc/scan
+       call $~lib/rt/pure/scan
        br $break|0
        unreachable
       end
@@ -10967,7 +11015,7 @@
       i32.eqz
       if
        i32.const 0
-       i32.const 2016
+       i32.const 6872
        i32.const 85
        i32.const 6
        call $~lib/builtins/abort
@@ -10985,7 +11033,7 @@
       i32.ne
       if
        local.get $2
-       call $~lib/rt/purerc/scanBlack
+       call $~lib/rt/pure/scanBlack
       end
       br $break|0
       unreachable
@@ -10994,7 +11042,7 @@
     end
     block
      local.get $2
-     call $~lib/rt/purerc/collectWhite
+     call $~lib/rt/pure/collectWhite
      br $break|0
      unreachable
     end
@@ -11004,7 +11052,7 @@
    i32.eqz
    if
     i32.const 0
-    i32.const 2016
+    i32.const 6872
     i32.const 96
     i32.const 24
     call $~lib/builtins/abort
@@ -11012,55 +11060,7 @@
    end
   end
  )
- (func $~lib/array/Array<~lib/string/String>#__visit_impl (; 86 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $2
-  local.get $2
-  local.get $0
-  i32.load offset=8
-  i32.add
-  local.set $3
-  block $break|0
-   loop $continue|0
-    local.get $2
-    local.get $3
-    i32.lt_u
-    if
-     local.get $2
-     i32.load
-     local.set $4
-     local.get $4
-     if
-      local.get $4
-      local.get $1
-      call $~lib/rt/purerc/__visit
-     end
-     local.get $2
-     i32.const 4
-     i32.add
-     local.set $2
-     br $continue|0
-    end
-   end
-  end
- )
- (func $~lib/array/Array<i32>#__visit_impl (; 87 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<u32>#__visit_impl (; 88 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<u64>#__visit_impl (; 89 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/array/Array<i16>#__visit_impl (; 90 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
-  nop
- )
- (func $~lib/builtins/__visit_members (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
+ (func $~lib/rt/__visit_members (; 91 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
   (local $2 i32)
   block $block$16$break
    block
@@ -11200,7 +11200,7 @@
     if
      local.get $2
      local.get $1
-     call $~lib/rt/purerc/__visit
+     call $~lib/rt/pure/__visit
     end
     return
     unreachable
diff --git a/tests/compiler/switch.optimized.wat b/tests/compiler/switch.optimized.wat
index 83b701f9..cb0fb4a3 100644
--- a/tests/compiler/switch.optimized.wat
+++ b/tests/compiler/switch.optimized.wat
@@ -4,174 +4,65 @@
  (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\12\00\00\00\01\00\00\00\10\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s")
  (export "memory" (memory $0))
  (start $start)
  (func $switch/doSwitch (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  block $break|0
-   block $case4|0
-    block $case3|0
-     block $case2|0
-      block $case1|0
-       block $case0|0
-        local.get $0
-        local.set $1
-        local.get $1
-        i32.const 1
-        i32.eq
-        br_if $case0|0
-        local.get $1
-        i32.const 0
-        i32.eq
-        br_if $case1|0
-        local.get $1
-        i32.const 2
-        i32.eq
-        br_if $case3|0
-        local.get $1
-        i32.const 3
-        i32.eq
-        br_if $case4|0
-        br $case2|0
-       end
-       i32.const 1
-       return
-      end
-     end
-     i32.const 0
-     return
+  block $case4|0
+   block $case2|0
+    local.get $0
+    i32.const 1
+    i32.ne
+    if
+     local.get $0
+     i32.eqz
+     br_if $case2|0
+     local.get $0
+     i32.const 2
+     i32.eq
+     br_if $case4|0
+     local.get $0
+     i32.const 3
+     i32.eq
+     br_if $case4|0
+     br $case2|0
     end
+    i32.const 1
+    return
    end
-   i32.const 23
+   i32.const 0
    return
-   unreachable
   end
-  unreachable
-  unreachable
+  i32.const 23
  )
  (func $switch/doSwitchDefaultOmitted (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
   block $break|0
    block $case2|0
-    block $case1|0
-     block $case0|0
-      local.get $0
-      local.set $1
-      local.get $1
-      i32.const 1
-      i32.eq
-      br_if $case0|0
-      local.get $1
-      i32.const 2
-      i32.eq
-      br_if $case1|0
-      local.get $1
-      i32.const 3
-      i32.eq
-      br_if $case2|0
-      br $break|0
-     end
-     i32.const 1
-     return
+    local.get $0
+    i32.const 1
+    i32.ne
+    if
+     local.get $0
+     i32.const 2
+     i32.eq
+     br_if $case2|0
+     local.get $0
+     i32.const 3
+     i32.eq
+     br_if $case2|0
+     br $break|0
     end
+    i32.const 1
+    return
    end
    i32.const 23
    return
   end
   i32.const 0
  )
- (func $switch/doSwitchBreakCase (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  block $break|0
-   block $case1|0
-    block $case0|0
-     local.get $0
-     local.set $1
-     local.get $1
-     i32.const 1
-     i32.eq
-     br_if $case0|0
-     br $case1|0
-    end
-    br $break|0
-   end
-   i32.const 2
-   return
-  end
-  i32.const 1
- )
- (func $switch/doSwitchBreakDefault (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  block $break|0
-   block $case1|0
-    block $case0|0
-     local.get $0
-     local.set $1
-     local.get $1
-     i32.const 1
-     i32.eq
-     br_if $case0|0
-     br $case1|0
-    end
-    i32.const 1
-    return
-   end
-   br $break|0
-  end
-  i32.const 2
- )
- (func $switch/doSwitchFallThroughCase (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  block $break|0
-   block $case1|0
-    block $case0|0
-     local.get $0
-     local.set $1
-     local.get $1
-     i32.const 1
-     i32.eq
-     br_if $case1|0
-     br $case0|0
-    end
-    i32.const 2
-    return
-   end
-  end
-  i32.const 1
- )
- (func $switch/doSwitchFallThroughDefault (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  (local $1 i32)
-  block $break|0
-   block $case1|0
-    block $case0|0
-     local.get $0
-     local.set $1
-     local.get $1
-     i32.const 1
-     i32.eq
-     br_if $case0|0
-     br $case1|0
-    end
-    i32.const 1
-    return
-   end
-  end
-  i32.const 2
- )
- (func $switch/doSwitchEmpty (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
-  local.get $0
-  drop
-  i32.const 2
- )
- (func $start:switch (; 8 ;) (type $FUNCSIG$v)
+ (func $start:switch (; 3 ;) (type $FUNCSIG$v)
   i32.const 0
   call $switch/doSwitch
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -183,8 +74,7 @@
   i32.const 1
   call $switch/doSwitch
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -196,8 +86,7 @@
   i32.const 2
   call $switch/doSwitch
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -209,8 +98,7 @@
   i32.const 3
   call $switch/doSwitch
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -221,9 +109,6 @@
   end
   i32.const 4
   call $switch/doSwitch
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -234,9 +119,6 @@
   end
   i32.const 0
   call $switch/doSwitch
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -248,8 +130,7 @@
   i32.const 1
   call $switch/doSwitch
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -261,8 +142,7 @@
   i32.const 2
   call $switch/doSwitch
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -274,8 +154,7 @@
   i32.const 3
   call $switch/doSwitch
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -286,9 +165,6 @@
   end
   i32.const 4
   call $switch/doSwitch
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -299,9 +175,6 @@
   end
   i32.const 0
   call $switch/doSwitchDefaultOmitted
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -313,8 +186,7 @@
   i32.const 1
   call $switch/doSwitchDefaultOmitted
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -326,8 +198,7 @@
   i32.const 2
   call $switch/doSwitchDefaultOmitted
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -339,8 +210,7 @@
   i32.const 3
   call $switch/doSwitchDefaultOmitted
   i32.const 23
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -351,9 +221,6 @@
   end
   i32.const 4
   call $switch/doSwitchDefaultOmitted
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -362,205 +229,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 51
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakCase
-  i32.const 1
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 52
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 53
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 62
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakDefault
-  i32.const 1
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 63
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 64
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchFallThroughCase
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 73
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchFallThroughCase
-  i32.const 1
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 74
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchFallThroughCase
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 75
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchFallThroughDefault
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 84
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchFallThroughDefault
-  i32.const 1
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 85
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchFallThroughDefault
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 86
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchEmpty
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 92
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchEmpty
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 93
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchEmpty
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 94
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
  )
- (func $start (; 9 ;) (type $FUNCSIG$v)
+ (func $start (; 4 ;) (type $FUNCSIG$v)
   call $start:switch
  )
- (func $null (; 10 ;) (type $FUNCSIG$v)
+ (func $null (; 5 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/wasi.optimized.wat b/tests/compiler/wasi.optimized.wat
index be16b879..57bc5ef6 100644
--- a/tests/compiler/wasi.optimized.wat
+++ b/tests/compiler/wasi.optimized.wat
@@ -1,545 +1,15 @@
 (module
- (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
  (type $FUNCSIG$v (func))
- (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00w\00a\00s\00i\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
- (global $~lib/common/target/Target.WASM32 i32 (i32.const 0))
- (global $~lib/common/target/Target.WASM64 i32 (i32.const 1))
- (global $~lib/common/target/Target.JS i32 (i32.const 2))
- (global $~lib/ASC_TARGET i32 (i32.const 0))
+ (data (i32.const 8) "\0e\00\00\00\01\00\00\00\10\00\00\00\0e\00\00\00w\00a\00s\00i\00.\00t\00s")
  (global $wasi/sig (mut i32) (i32.const 1))
  (export "memory" (memory $0))
  (start $start)
- (func $start:wasi (; 1 ;) (type $FUNCSIG$v)
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 4
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 5
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 6
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 20
-  i32.const 20
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 7
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 24
-  i32.const 24
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 8
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 10
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 11
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 10
-  i32.const 10
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 12
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 13
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 24
-  i32.const 24
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 14
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 32
-  i32.const 32
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 15
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 17
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  i32.const 2
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 18
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 19
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 20
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 24
-  i32.const 24
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 21
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 23
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 24
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 25
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 20
-  i32.const 20
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 26
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 24
-  i32.const 24
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 27
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 32
-  i32.const 32
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 28
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 40
-  i32.const 40
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 29
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 48
-  i32.const 48
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 30
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 56
-  i32.const 56
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 31
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 33
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block
-   i32.const 4
-   i32.const 4
-   i32.eq
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 35
-    i32.const 2
-    call $~lib/builtins/abort
-    unreachable
-   end
-   i32.const 8
-   i32.const 8
-   i32.eq
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 36
-    i32.const 2
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 44
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 45
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 46
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 24
-  i32.const 24
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 47
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 32
-  i32.const 32
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 48
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 40
-  i32.const 40
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 49
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 48
-  i32.const 48
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 50
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 56
-  i32.const 56
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 51
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 53
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8
-  i32.const 8
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 54
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 16
-  i32.const 16
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 55
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 20
-  i32.const 20
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 56
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  i32.eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 24
-   i32.const 58
-   i32.const 0
-   call $~lib/builtins/abort
-   unreachable
-  end
-  block
-   i32.const 4
-   i32.const 4
-   i32.eq
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 60
-    i32.const 2
-    call $~lib/builtins/abort
-    unreachable
-   end
-   i32.const 8
-   i32.const 8
-   i32.eq
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 24
-    i32.const 61
-    i32.const 2
-    call $~lib/builtins/abort
-    unreachable
-   end
-  end
+ (func $start (; 0 ;) (type $FUNCSIG$v)
   i32.const 9
   global.set $wasi/sig
  )
- (func $start (; 2 ;) (type $FUNCSIG$v)
-  call $start:wasi
- )
- (func $null (; 3 ;) (type $FUNCSIG$v)
+ (func $null (; 1 ;) (type $FUNCSIG$v)
+  nop
  )
 )
diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat
index f8bf6182..2abcae59 100644
--- a/tests/compiler/while.optimized.wat
+++ b/tests/compiler/while.optimized.wat
@@ -3,9 +3,7 @@
  (type $FUNCSIG$v (func))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
- (data (i32.const 8) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00")
- (table $0 1 funcref)
- (elem (i32.const 0) $null)
+ (data (i32.const 8) "\10\00\00\00\01\00\00\00\10\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s")
  (global $while/n (mut i32) (i32.const 10))
  (global $while/m (mut i32) (i32.const 0))
  (global $while/o (mut i32) (i32.const 0))
@@ -13,26 +11,21 @@
  (start $start)
  (func $start:while (; 1 ;) (type $FUNCSIG$v)
   (local $0 i32)
-  block $break|0
-   loop $continue|0
+  loop $continue|0
+   global.get $while/n
+   if
     global.get $while/n
-    if
-     global.get $while/n
-     i32.const 1
-     i32.sub
-     global.set $while/n
-     global.get $while/m
-     i32.const 1
-     i32.add
-     global.set $while/m
-     br $continue|0
-    end
+    i32.const 1
+    i32.sub
+    global.set $while/n
+    global.get $while/m
+    i32.const 1
+    i32.add
+    global.set $while/m
+    br $continue|0
    end
   end
   global.get $while/n
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -43,8 +36,7 @@
   end
   global.get $while/m
   i32.const 10
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -57,66 +49,55 @@
   global.set $while/n
   i32.const 0
   global.set $while/m
-  block $break|1
-   loop $continue|1
+  loop $continue|1
+   global.get $while/n
+   if
+    global.get $while/n
+    i32.const 1
+    i32.sub
+    global.set $while/n
+    global.get $while/m
+    i32.const 1
+    i32.add
+    global.set $while/m
+    loop $continue|2
+     global.get $while/n
+     if
+      global.get $while/n
+      i32.const 1
+      i32.sub
+      global.set $while/n
+      global.get $while/o
+      i32.const 1
+      i32.add
+      global.set $while/o
+      br $continue|2
+     end
+    end
     global.get $while/n
     if
-     global.get $while/n
-     i32.const 1
-     i32.sub
-     global.set $while/n
-     global.get $while/m
-     i32.const 1
-     i32.add
-     global.set $while/m
-     block $break|2
-      loop $continue|2
-       global.get $while/n
-       if
-        global.get $while/n
-        i32.const 1
-        i32.sub
-        global.set $while/n
-        global.get $while/o
-        i32.const 1
-        i32.add
-        global.set $while/o
-        br $continue|2
-       end
-      end
-     end
-     global.get $while/n
      i32.const 0
-     i32.eq
-     i32.eqz
-     if
-      i32.const 0
-      i32.const 24
-      i32.const 21
-      i32.const 2
-      call $~lib/builtins/abort
-      unreachable
-     end
-     global.get $while/o
-     i32.const 9
-     i32.eq
-     i32.eqz
-     if
-      i32.const 0
-      i32.const 24
-      i32.const 22
-      i32.const 2
-      call $~lib/builtins/abort
-      unreachable
-     end
-     br $continue|1
+     i32.const 24
+     i32.const 21
+     i32.const 2
+     call $~lib/builtins/abort
+     unreachable
     end
+    global.get $while/o
+    i32.const 9
+    i32.ne
+    if
+     i32.const 0
+     i32.const 24
+     i32.const 22
+     i32.const 2
+     call $~lib/builtins/abort
+     unreachable
+    end
+    br $continue|1
    end
   end
   global.get $while/n
-  i32.const 0
-  i32.eq
-  i32.eqz
   if
    i32.const 0
    i32.const 24
@@ -127,8 +108,7 @@
   end
   global.get $while/m
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -139,8 +119,7 @@
   end
   global.get $while/o
   i32.const 9
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -153,36 +132,29 @@
   global.set $while/n
   i32.const 0
   global.set $while/m
-  block $break|3
-   loop $continue|3
-    block (result i32)
-     global.get $while/n
-     local.tee $0
-     i32.const 1
-     i32.sub
-     global.set $while/n
-     local.get $0
-    end
-    if (result i32)
-     global.get $while/m
-     i32.const 1
-     i32.add
-     local.tee $0
-     global.set $while/m
-     local.get $0
-    else     
-     i32.const 0
-    end
-    if
-     nop
-     br $continue|3
-    end
+  loop $continue|3
+   global.get $while/n
+   local.tee $0
+   i32.const 1
+   i32.sub
+   global.set $while/n
+   local.get $0
+   if
+    global.get $while/m
+    i32.const 1
+    i32.add
+    local.tee $0
+    global.set $while/m
+   else    
+    i32.const 0
+    local.set $0
    end
+   local.get $0
+   br_if $continue|3
   end
   global.get $while/n
   i32.const -1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -193,8 +165,7 @@
   end
   global.get $while/m
   i32.const 1
-  i32.eq
-  i32.eqz
+  i32.ne
   if
    i32.const 0
    i32.const 24
@@ -208,5 +179,6 @@
   call $start:while
  )
  (func $null (; 3 ;) (type $FUNCSIG$v)
+  nop
  )
 )