diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/brainfuck/brainfuck.js b/brainfuck/brainfuck.js new file mode 100644 index 00000000..ddabedaf --- /dev/null +++ b/brainfuck/brainfuck.js @@ -0,0 +1,187 @@ +// Auto generated by Wa Compiler, DONOT EDIT!!! + +class WaApp { + constructor() { + this._wasm_url = "./brainfuck.wasm"; + this._mem_util = this._createMemUtil(); + this._wasm_inst = null; + this._wa_print_buf = ""; + } + + _createMemUtil = () => { + return { + mem: () => { return this._wasm_inst.exports.memory; }, + mem_view: (addr, len) => { return new DataView(this._mem_util.mem().buffer, addr, len); }, + mem_array_u8: (addr, len) => { return new Uint8Array(this._mem_util.mem().buffer, addr, len); }, + mem_array_u16: (addr, len) => { return new Uint16Array(this._mem_util.mem().buffer, addr, len); }, + mem_array_u32: (addr, len) => { return new Uint32Array(this._mem_util.mem().buffer, addr, len); }, + mem_array_i32: (addr, len) => { return new Int32Array(this._mem_util.mem().buffer, addr, len); }, + mem_array_f32: (addr, len) => { return new Float32Array(this._mem_util.mem().buffer, addr, len); }, + mem_array_f64: (addr, len) => { return new Float64Array(this._mem_util.mem().buffer, addr, len); }, + get_string: (d, l) => { return new TextDecoder("utf-8").decode(this._mem_util.mem_view(d, l)); }, + set_string: (s) => { + const bytes = new TextEncoder("utf-8").encode(s); + const l = bytes.length; + const b = this._wasm_inst.exports["runtime.Block.HeapAlloc"](l, 0, 1); + const d = b + 16; + this._mem_util.mem_array_u8(d, l).set(bytes); + return [b, d, l]; + }, + get_bytes: (d, l) => { return this._mem_util.mem_array_u8(d, l).slice(0); }, + set_bytes: (bytes) => { + const l = bytes.length; + const c = l; + const b = this._wasm_inst.exports["runtime.Block.HeapAlloc"](l, 0, 1); + const d = b + 16; + this._mem_util.mem_array_u8(d, l).set(bytes); + return [b, d, l, c]; + }, + block_release: (addr) => { this._wasm_inst.exports["runtime.Block.Release"](addr); }, + //基本类型直接读写: + bool_load: (addr) => { return this._mem_util.mem_array_u8(addr, 1)[0] != 0; }, + bool_store: (addr, v) => { + if (v) { + this._mem_util.mem_array_u8(addr, 1)[0] = 1; + } else { + this._mem_util.mem_array_u8(addr, 1)[0] = 0; + } + }, + u8_load: (addr) => { return this._mem_util.mem_array_u8(addr, 1)[0]; }, + u8_store: (addr, v) => { this._mem_util.mem_array_u8(addr, 1)[0] = v; }, + u16_load: (addr) => { return this._mem_util.mem_array_u16(addr, 1)[0]; }, + u16_store: (addr, v) => { this._mem_util.mem_array_u16(addr, 1)[0] = v; }, + u32_load: (addr) => { return this._mem_util.mem_array_u32(addr, 1)[0]; }, + u32_store: (addr, v) => { this._mem_util.mem_array_u32(addr, 1)[0] = v; }, + i32_load: (addr) => { return this._mem_util.mem_array_i32(addr, 1)[0]; }, + i32_store: (addr, v) => { this._mem_util.mem_array_i32(addr, 1)[0] = v; }, + rune_load: (addr) => { return String.fromCodePoint(this._mem_util.mem_array_u32(addr, 1)[0]); }, + rune_store: (addr, v) => { this._mem_util.mem_array_u32(addr, 1)[0] = v.codePointAt(0); }, + f32_load: (addr) => { return this._mem_util.mem_array_f32(addr, 1)[0]; }, + f32_store: (addr, v) => { this._mem_util.mem_array_f32(addr, 1)[0] = v; }, + f64_load: (addr) => { return this._mem_util.mem_array_f64(addr, 1)[0]; }, + f64_store: (addr, v) => { this._mem_util.mem_array_f64(addr, 1)[0] = v; }, + string_load: (addr) => { + const d = this._mem_util.i32_load(addr + 4); + const l = this._mem_util.i32_load(addr + 8); + return this._mem_util.get_string(d, l); + }, + string_store: (addr, v) => { + const b = this._mem_util.i32_load(addr); + this._mem_util.block_release(b); + let ns = this._mem_util.set_string(v); + this._mem_util.i32_store(addr, ns[0]); + this._mem_util.i32_store(addr + 4, ns[1]); + this._mem_util.i32_store(addr + 8, ns[2]); + }, + extract_string: (arr) => { + const s = this._mem_util.get_string(arr[1], arr[2]); + this._mem_util.block_release(arr[0]); + arr.splice(0, 3); + return s; + }, + extract_bytes: (arr) => { + const b = this._mem_util.get_bytes(arr[1], arr[2]); + this._mem_util.block_release(arr[0]); + arr.splice(0, 4); + return b + }, + extract_bool: (arr) => { const v = arr[0]; arr.splice(0, 1); return v?true:false; }, + extract_rune: (arr) => { const v = arr[0]; arr.splice(0, 1); return String.fromCodePoint(v); }, + extract_number: (arr) => { const v = arr[0]; arr.splice(0, 1); return v; }, + } + }; + + _createSyscall = () => { + return { + print_bool: (b) => { this._wa_print_buf += Boolean(b).toString(); }, + print_u32: (i) => { + if (i < 0) { + i += 4294967296; + } + this._wa_print_buf += i; + }, + print_i32: (i) => { this._wa_print_buf += i }, + print_u64: (i) => { this._wa_print_buf += i }, + print_u64: (i) => { this._wa_print_buf += i }, + print_i64: (i) => { this._wa_print_buf += i }, + print_f32: (f) => { this._wa_print_buf += f }, + print_f64: (f) => { this._wa_print_buf += f }, + print_ptr: (p) => { this._wa_print_buf += p }, + print_str: (addr, len) => { this._wa_print_buf += this._mem_util.get_string(addr, len);}, + proc_exit: (code) => { alert(code) }, + print_rune: (c) => { + let ch = String.fromCodePoint(c); + if (ch == "\n") { + console.log(this._wa_print_buf); + this._wa_print_buf = ""; + } + else { + this._wa_print_buf += ch; + } + } + } + }; + + async init() { + const app = this; + const imports = { + syscall_js: this._createSyscall(), + + + // ... + }; + + try { + const source = await fetch(this._wasm_url); + const result = await WebAssembly.instantiateStreaming(source, imports); + this._wasm_inst = result.instance; + + // 全局变量: + + + // 全局函数: + + this.Run = function(code) { + // 准备参数 + let params = []; + let p0 = this._mem_util.set_string(code); +params = params.concat(p0); + + + let res = this._wasm_inst.exports["brainfuck.Run"](...params); + + if (!Array.prototype.isPrototypeOf(res)) { + res = [res]; + } + let r0 = this._mem_util.extract_string(res); + + this._mem_util.block_release(p0[0]); + + return r0; + } + + this.main = function() { + // 准备参数 + let params = []; + + + let res = this._wasm_inst.exports["brainfuck.main"](...params); + + if (!Array.prototype.isPrototypeOf(res)) { + res = [res]; + } + + + + } + + + this._wasm_inst.exports._start(); + return this + } catch (error) { + console.error('WASM 初始化失败:', error); + } + } + +} // class WaApp + diff --git a/brainfuck/brainfuck.wasm b/brainfuck/brainfuck.wasm new file mode 100644 index 00000000..9dd19423 Binary files /dev/null and b/brainfuck/brainfuck.wasm differ diff --git a/brainfuck/brainfuck.wat b/brainfuck/brainfuck.wat new file mode 100644 index 00000000..8cc09d32 --- /dev/null +++ b/brainfuck/brainfuck.wat @@ -0,0 +1,13987 @@ +(module $__walang__ + (import "syscall_js" "print_bool" (func $syscall$js.__import__print_bool (param i32))) + (import "syscall_js" "print_f32" (func $syscall$js.__import__print_f32 (param f32))) + (import "syscall_js" "print_f64" (func $syscall$js.__import__print_f64 (param f64))) + (import "syscall_js" "print_i32" (func $syscall$js.__import__print_i32 (param i32))) + (import "syscall_js" "print_i64" (func $syscall$js.__import__print_i64 (param i64))) + (import "syscall_js" "print_ptr" (func $syscall$js.__import__print_ptr (param i32))) + (import "syscall_js" "print_rune" (func $syscall$js.__import__print_rune (param i32))) + (import "syscall_js" "print_str" (func $syscall$js.__import__print_str (param i32) (param i32))) + (import "syscall_js" "print_u32" (func $syscall$js.__import__print_u32 (param i32))) + (import "syscall_js" "print_u64" (func $syscall$js.__import__print_u64 (param i64))) + (import "syscall_js" "proc_exit" (func $syscall$js.__import__proc_exit (param i32))) +;; Copyright 2023 The Wa Authors. All rights reserved. + +(memory $memory 1024) + +(export "memory" (memory $memory)) + +;; +-----------------+---------------------+--------------+ +;; | 0 <-- stack --> | <-- static-data --> | <-- heap --> | +;; +-----------------+---------------------+--------------+ + +(global $__stack_ptr (mut i32) (i32.const 1024)) ;; index=0 +;;(global $__heap_base i32 (i32.const 1048576)) ;; index=1 +(global $__heap_max i32 (i32.const 67108864)) ;; 64MB, 1024 page + + +;; --------------------------------------------------------- +;; package: runtime +;; --------------------------------------------------------- + +;; file: heap.wat.ws + +;; Copyright 2023 The Wa Authors. All rights reserved. + +(func $runtime.throw + unreachable +) + +(func $runtime.getStackPtr (result i32) + global.get $__stack_ptr +) + +(func $runtime.setStackPtr (param $sp i32) + local.get $sp + global.set $__stack_ptr +) + +(func $runtime.stackAlloc (param $size i32) (result i32) + ;; $__stack_ptr -= $size + global.get $__stack_ptr + local.get $size + i32.sub + global.set $__stack_ptr + + ;; return $__stack_ptr + global.get $__stack_ptr + return +) + +(func $runtime.stackFree (param $size i32) + ;; $__stack_ptr += $size + global.get $__stack_ptr + local.get $size + i32.add + global.set $__stack_ptr +) + +(func $runtime.heapBase(result i32) + global.get $__heap_base +) + +(func $runtime.heapMax(result i32) + global.get $__heap_max +) + +(func $runtime.HeapAlloc (export "runtime.HeapAlloc") (param $nbytes i32) (result i32) ;;result = ptr + (local $ptr i32) + + local.get $nbytes + i32.eqz + if + i32.const 0 + return + end + + local.get $nbytes + i32.const 7 + i32.add + i32.const 8 + i32.div_u + i32.const 8 + i32.mul + local.set $nbytes + + local.get $nbytes + call $runtime.malloc + local.set $ptr + + loop $zero + local.get $nbytes + i32.const 8 + i32.sub + local.tee $nbytes + local.get $ptr + i32.add + + i64.const 0 + i64.store + + local.get $nbytes + if + br $zero + end + end ;;loop $zero + + local.get $ptr +) + +(func $runtime.HeapFree (export "runtime.HeapFree") (param $ptr i32) + local.get $ptr + call $runtime.free +) + +(func $runtime.Block.Init (param $ptr i32) (param $item_count i32) (param $release_func i32) (param $item_size i32) (result i32) ;;result = ptr + local.get $ptr + + local.get $ptr + if + local.get $ptr + i32.const 1 + i32.store offset=0 align=1 + + local.get $ptr + local.get $item_count + i32.store offset=4 align=1 + + local.get $ptr + local.get $release_func + i32.store offset=8 align=1 + + local.get $ptr + local.get $item_size + i32.store offset=12 align=1 + end +) + +(func $runtime.Block.SetFinalizer (param $ptr i32) (param $release_func i32) + local.get $ptr + if + local.get $ptr + local.get $release_func + i32.store offset=8 align=1 + end +) + +(func $runtime.Block.HeapAlloc (export "runtime.Block.HeapAlloc") (param $item_count i32) (param $release_func i32) (param $item_size i32) (result i32) ;;result = ptr_block + local.get $item_count + local.get $item_size + i32.mul + i32.const 16 + i32.add + call $runtime.HeapAlloc + + local.get $item_count + local.get $release_func + local.get $item_size + call $runtime.Block.Init +) + +(func $runtime.DupI32 (param $a i32) (result i32 i32) ;;r0 = r1 = p0 + local.get $a + local.get $a +) + +(func $runtime.SwapI32 (param $a i32) (param $b i32) (result i32 i32) ;;r0 = p1, r1 = p0 + local.get $b + local.get $a +) + +(func $runtime.Block.Retain (export "runtime.Block.Retain") (param $ptr i32) (result i32) ;;result = ptr + local.get $ptr + + local.get $ptr + if + local.get $ptr + local.get $ptr + i32.load offset=0 align=1 + i32.const 1 + i32.add + i32.store offset=0 align=1 + end +) + +(func $runtime.Block.Release (export "runtime.Block.Release") (param $ptr i32) + (local $ref_count i32) + (local $item_count i32) + (local $free_func i32) + (local $item_size i32) + (local $data_ptr i32) + + local.get $ptr + i32.const 0 + i32.eq + if + return + end + + local.get $ptr + i32.load offset=0 align=1 + i32.const 1 + i32.sub + local.set $ref_count + + local.get $ref_count + if + local.get $ptr + local.get $ref_count + i32.store offset=0 align=1 + + else ;;ref_count == 0 + local.get $ptr + i32.load offset=8 align=1 + local.set $free_func + + local.get $free_func + if ;;free_func != 0 + local.get $ptr + i32.load offset=4 align=1 + local.set $item_count + + local.get $item_count + if ;;item_count > 0 + local.get $ptr + i32.load offset=12 align=1 + local.set $item_size + + local.get $ptr + i32.const 16 + i32.add + local.set $data_ptr + + loop $free_next + ;; onFree(data_ptr) + local.get $data_ptr + local.get $free_func + call_indirect (type $$onFree) + + ;; item_count-- + local.get $item_count + i32.const 1 + i32.sub + local.set $item_count + + local.get $item_count + if ;;while item_count>0 + ;; data_ptr += item_size + local.get $data_ptr + local.get $item_size + i32.add + local.set $data_ptr + + br $free_next ;;continue + end ;;while item_count>0 + end ;;loop $free_next + end ;;if item_count > 0 + end ;;free_func != 0 + + local.get $ptr + call $runtime.HeapFree + end ;;ref_count == 0 +) + +(func $$wa.runtime.i32_ref_to_ptr (param $b i32) (param $d i32) (result i32) ;;result = ptr + local.get $d +) + +(func $$wa.runtime.i64_ref_to_ptr (param $b i32) (param $d i32) (result i32) ;;result = ptr + local.get $d +) + +(func $$wa.runtime.slice_to_ptr (param $b i32) (param $d i32) (param $l i32) (param $c i32) (result i32) ;;result = ptr + local.get $d +) +;; file: interface.wat.ws + +(func $$wa.runtime.queryIface (param $d.b i32) (param $d.d i32) (param $itab i32) (param $eq i32) (param $ihash i32) + (result i32 i32 i32 i32) + (local $t i32) + local.get $itab + if (result i32 i32 i32 i32) + local.get $itab + i32.load offset=0 align=4 + local.get $ihash + i32.const 0 + call $runtime.getItab + local.set $t + local.get $t + if (result i32 i32 i32 i32) + local.get $d.b + call $runtime.Block.Retain + local.get $d.d + local.get $t + local.get $eq + else + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + unreachable + end + else + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + unreachable + end +) + +(func $$wa.runtime.queryIface_CommaOk (param $d.b i32) (param $d.d i32) (param $itab i32) (param $eq i32) (param $ihash i32) + (result i32 i32 i32 i32 i32) + (local $t i32) + local.get $itab + if (result i32 i32 i32 i32 i32) + local.get $itab + i32.load offset=0 align=4 + local.get $ihash + i32.const 1 + call $runtime.getItab + local.set $t + local.get $t + if (result i32 i32 i32 i32 i32) + local.get $d.b + call $runtime.Block.Retain + local.get $d.d + local.get $t + local.get $eq + i32.const 1 + else + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + end + else + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + end +) + +(func $runtime.Compare (param $l.d.b i32) (param $l.d.d i32) (param $l.itab i32) (param $l.comp i32) (param $r.d.b i32) (param $r.d.d i32) (param $r.itab i32) (param $r.comp i32) + (result i32) + local.get $l.comp + local.get $r.comp + i32.lt_s + if (result i32) ;;if l.comp < r.comp + i32.const -1 + else + local.get $l.comp + local.get $r.comp + i32.gt_s + if (result i32) ;;if l.comp > r.comp + i32.const 1 + else ;;if l.comp == r.comp: + local.get $l.comp + if (result i32) ;;if comp != 0, compare by type.comp: + local.get $l.d.d + local.get $r.d.d + local.get $l.comp + call_indirect (type $$wa.runtime.comp) + else ;;if comp == 0, compare as ref: + local.get $l.d.d + local.get $r.d.d + i32.le_u + if (result i32) + i32.const -1 + else + local.get $l.d.d + local.get $r.d.d + i32.gt_u + end + end + end + end +) +;; file: map.wat.ws + + +;; file: string.wat.ws + +(func $$wa.runtime.string_to_ptr (param $b i32) (param $d i32) (param $l i32) (result i32) ;;result = ptr + local.get $d +) + +(func $$wa.runtime.string_to_iter (param $b i32) (param $d i32) (param $l i32) (result i32 i32 i32) + local.get $d + local.get $l + i32.const 0 +) +;; --------------------------------------------------------- +;; package: syscall/js +;; --------------------------------------------------------- + +;; file: z_abi.wat.ws + +;; Copyright 2024 The Wa Authors. All rights reserved. + +(func $$syscall/js.__linkname__string_to_ptr (param $b i32) (param $d i32) (param $l i32) (result i32) ;;result = ptr + local.get $d +) +(data (i32.const 8224) "\24\24\77\61\64\73\24\24\30\61\73\73\65\72\74\20\66\61\69\6c\65\64\20\28\61\73\73\65\72\74\20\66\61\69\6c\65\64\3a\20\6e\69\6c\20\6d\61\70\2e\6d\61\70\2e\77\61\3a\32\30\3a\38\70\61\6e\69\63\3a\20\74\72\75\65\66\61\6c\73\65\4e\61\4e\2b\49\6e\66\2d\49\6e\66\30\31\32\33\34\35\36\37\38\39\61\62\63\64\65\66\0a\5b\2f\5d\2b\2b\2b\2b\2b\2b\2b\2b\2b\2b\5b\3e\2b\2b\2b\2b\2b\2b\2b\2b\2b\2b\3c\2d\5d\3e\2b\2b\2b\2b\2e\2b\2e\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\00\00\00\00\00\01\00\00\00\ff\ff\ff\ff\f8\95\00\00") +(table 16 funcref) +(elem (i32.const 1) $$string.$$compAddr) +(elem (i32.const 2) $$u8.$$block.$$onFree) +(elem (i32.const 3) $$string.underlying.$$onFree) +(elem (i32.const 4) $$void.$$block.$$onFree) +(elem (i32.const 5) $$void.$ref.underlying.$$onFree) +(elem (i32.const 6) $$i`0`.underlying.$$onFree) +(elem (i32.const 7) $$runtime.mapNode.$$onFree) +(elem (i32.const 8) $$runtime.mapNode.$$block.$$onFree) +(elem (i32.const 9) $$runtime.mapNode.$slice.underlying.$$onFree) +(elem (i32.const 10) $$runtime.mapImp.$$onFree) +(elem (i32.const 11) $$runtime.mapImp.$$block.$$onFree) +(elem (i32.const 12) $$runtime.mapImp.$ref.underlying.$$onFree) +(elem (i32.const 13) $$runtime.mapIter.$$onFree) +(elem (i32.const 14) $$runtime.mapNode.$array1.underlying.$$onFree) +(elem (i32.const 15) $$brainfuck$bfpkg.BrainFuck.$$onFree) +(type $$onFree (func (param i32))) +(type $$wa.runtime.comp (func (param i32) (param i32) (result i32))) +(global $$wa.runtime.closure_data (mut i32) (i32.const 0)) +(global $$wa.runtime._concretTypeCount (mut i32) (i32.const 1)) +(global $$wa.runtime._interfaceCount (mut i32) (i32.const 1)) +(global $$wa.runtime._itabsPtr (mut i32) (i32.const 38400)) +(global $runtime.init$guard (mut i32) (i32.const 0)) +(global $$knr_basep (mut i32) (i32.const 0)) +(global $$knr_freep (mut i32) (i32.const 0)) +(global $brainfuck$bfpkg.init$guard (mut i32) (i32.const 0)) +(global $brainfuck.init$guard (mut i32) (i32.const 0)) +(global $syscall$js.init$guard (mut i32) (i32.const 0)) +(global $runtime.zptr (mut i32) (i32.const 8368)) +(global $__heap_base i32 (i32.const 38432)) + + +(func $$string.appendstr (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32 i32 i32) + (local $x_len i32) + (local $y_len i32) + (local $new_len i32) + (local $item i32) + (local $src i32) + (local $dest i32) + local.get $x.2 + local.set $x_len + local.get $y.2 + local.set $y_len + local.get $x_len + local.get $y_len + i32.add + local.set $new_len + local.get $new_len + i32.const 1 + i32.mul + i32.const 16 + i32.add + call $runtime.HeapAlloc + local.get $new_len + i32.const 0 + i32.const 1 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + call $runtime.DupI32 + local.set $dest + local.get $new_len + local.get $x.1 + local.set $src + block $block2 + loop $loop2 + local.get $x_len + i32.eqz + if + br $block2 + else + end + local.get $src + i32.load8_u offset=0 align=1 + local.set $item + local.get $dest + local.get $item + i32.store8 offset=0 align=1 + local.get $src + i32.const 1 + i32.add + local.set $src + local.get $dest + i32.const 1 + i32.add + local.set $dest + local.get $x_len + i32.const 1 + i32.sub + local.set $x_len + br $loop2 + end ;;loop2 + end ;;block2 + local.get $y.1 + local.set $src + block $block3 + loop $loop3 + local.get $y_len + i32.eqz + if + br $block3 + else + end + local.get $src + i32.load8_u offset=0 align=1 + local.set $item + local.get $dest + local.get $item + i32.store8 offset=0 align=1 + local.get $src + i32.const 1 + i32.add + local.set $src + local.get $dest + i32.const 1 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop3 + end ;;loop3 + end ;;block3 +) ;;$string.appendstr + +(func $$string.equal (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $ret i32) + i32.const 1 + local.set $ret + local.get $x.2 + local.get $y.2 + i32.ne + if + i32.const 0 + local.set $ret + else + loop $loop1 + local.get $x.2 + if + local.get $x.1 + local.get $x.2 + i32.add + i32.const 1 + i32.sub + i32.load8_u offset=0 align=1 + local.get $y.1 + local.get $x.2 + i32.add + i32.const 1 + i32.sub + i32.load8_u offset=0 align=1 + i32.eq + if + local.get $x.2 + i32.const 1 + i32.sub + local.set $x.2 + br $loop1 + else + i32.const 0 + local.set $ret + end + else + end + end ;;loop1 + end + local.get $ret +) ;;$string.equal + +(func $$string.$$compAddr (param $p0 i32) (param $p1 i32) (result i32) + (local $v0.0 i32) + (local $v0.1 i32) + (local $v0.2 i32) + (local $v1.0 i32) + (local $v1.1 i32) + (local $v1.2 i32) + local.get $p0 + if + local.get $p0 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $p0 + i32.load offset=4 align=4 + local.get $p0 + i32.load offset=8 align=4 + local.set $v0.2 + local.set $v0.1 + local.get $v0.0 + call $runtime.Block.Release + local.set $v0.0 + else + end + local.get $p1 + if + local.get $p1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $p1 + i32.load offset=4 align=4 + local.get $p1 + i32.load offset=8 align=4 + local.set $v1.2 + local.set $v1.1 + local.get $v1.0 + call $runtime.Block.Release + local.set $v1.0 + else + end + local.get $v0.0 + local.get $v0.1 + local.get $v0.2 + local.get $v1.0 + local.get $v1.1 + local.get $v1.2 + call $$wa.runtime.string_Comp + local.get $v0.0 + call $runtime.Block.Release + local.get $v1.0 + call $runtime.Block.Release +) ;;$string.$$compAddr + +(func $$u8.$$block.$$onFree (param $ptr i32) + local.get $ptr + i32.load offset=0 align=1 + call $runtime.Block.Release + local.get $ptr + i32.const 0 + i32.store offset=0 align=1 +) ;;$u8.$$block.$$onFree + +(func $$string.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 2 + call_indirect (type $$onFree) +) ;;$string.underlying.$$onFree + +(func $runtime.ActivateEmptyInterface + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0.0.0 i32) + (local $$t0.0.1 i32) + (local $$t0.1 i32) + (local $$t0.2 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;make interface{} <- string ("":string) + i32.const 28 + call $runtime.HeapAlloc + i32.const 1 + i32.const 3 + i32.const 12 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + call $runtime.DupI32 + call $runtime.DupI32 + i32.const 0 + call $runtime.SwapI32 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + call $runtime.DupI32 + i32.const 8224 + i32.store offset=4 align=4 + call $runtime.DupI32 + i32.const 0 + i32.store offset=8 align=4 + i32.const 1 + i32.const -1 + i32.const 0 + call $runtime.getItab + i32.const 1 + local.set $$t0.2 + local.set $$t0.1 + local.set $$t0.0.1 + local.get $$t0.0.0 + call $runtime.Block.Release + local.set $$t0.0.0 + + ;;typeassert t0.(string) + local.get $$t0.1 + i32.load offset=0 align=4 + i32.const 1 + i32.eq + if (result i32 i32 i32) + local.get $$t0.0.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t0.0.1 + i32.load offset=4 align=4 + local.get $$t0.0.1 + i32.load offset=8 align=4 + else + i32.const 0 + i32.const 8232 + i32.const 1 + unreachable + end + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;println(t1) + local.get $$t1.1 + local.get $$t1.2 + call $$runtime.waPuts + i32.const 10 + call $$runtime.waPrintChar + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t0.0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release +) ;;runtime.ActivateEmptyInterface + +(func $$runtime.argsGet (param $result_argv i32) (param $result_argv_buf i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$runtime.argsGet + +(func $$runtime.argsSizesGet (param $result_argc i32) (param $result_argv_len i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$runtime.argsSizesGet + +(func $$runtime.assert (param $ok i32) (param $pos_msg_ptr i32) (param $pos_msg_len i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;ok == 0:i32 + local.get $ok + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;printString("assert failed (":string) + i32.const 0 + i32.const 8233 + i32.const 15 + call $runtime.printString + + ;;waPuts(pos_msg_ptr, pos_msg_len) + local.get $pos_msg_ptr + local.get $pos_msg_len + call $$runtime.waPuts + + ;;waPrintRune(41:i32) + i32.const 41 + call $$runtime.waPrintRune + + ;;waPrintRune(10:i32) + i32.const 10 + call $$runtime.waPrintRune + + ;;procExit(1:i32) + i32.const 1 + call $$runtime.procExit + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.assert + +(func $$runtime.assertWithMessage (param $ok i32) (param $msg_ptr i32) (param $msg_len i32) (param $pos_msg_ptr i32) (param $pos_msg_len i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;ok == 0:i32 + local.get $ok + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;printString("assert failed: ":string) + i32.const 0 + i32.const 8248 + i32.const 15 + call $runtime.printString + + ;;waPuts(msg_ptr, msg_len) + local.get $msg_ptr + local.get $msg_len + call $$runtime.waPuts + + ;;printString(" (":string) + i32.const 0 + i32.const 8246 + i32.const 2 + call $runtime.printString + + ;;waPuts(pos_msg_ptr, pos_msg_len) + local.get $pos_msg_ptr + local.get $pos_msg_len + call $$runtime.waPuts + + ;;waPrintRune(41:i32) + i32.const 41 + call $$runtime.waPrintRune + + ;;waPrintRune(10:i32) + i32.const 10 + call $$runtime.waPrintRune + + ;;procExit(1:i32) + i32.const 1 + call $$runtime.procExit + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.assertWithMessage + +(func $$wa.runtime.complex128_Add (param $a f64) (param $ai f64) (param $b f64) (param $bi f64) (result f64 f64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f64) + (local $$ret_1 f64) + (local $$t0 f64) + (local $$t1 f64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a + b + local.get $a + local.get $b + f64.add + local.set $$t0 + + ;;ai + bi + local.get $ai + local.get $bi + f64.add + local.set $$t1 + + ;;return t0, t1 + local.get $$t0 + local.set $$ret_0 + local.get $$t1 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex128_Add + +(func $$wa.runtime.complex128_Div (param $a f64) (param $ai f64) (param $b f64) (param $bi f64) (result f64 f64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f64) + (local $$ret_1 f64) + (local $$t0 f64) + (local $$t1 f64) + (local $$t2 f64) + (local $$t3 f64) + (local $$t4 f64) + (local $$t5 f64) + (local $$t6 f64) + (local $$t7 f64) + (local $$t8 f64) + (local $$t9 f64) + (local $$t10 f64) + (local $$t11 f64) + (local $$t12 f64) + (local $$t13 f64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a * b + local.get $a + local.get $b + f64.mul + local.set $$t0 + + ;;ai * bi + local.get $ai + local.get $bi + f64.mul + local.set $$t1 + + ;;t0 + t1 + local.get $$t0 + local.get $$t1 + f64.add + local.set $$t2 + + ;;b * b + local.get $b + local.get $b + f64.mul + local.set $$t3 + + ;;bi * bi + local.get $bi + local.get $bi + f64.mul + local.set $$t4 + + ;;t3 + t4 + local.get $$t3 + local.get $$t4 + f64.add + local.set $$t5 + + ;;t2 / t5 + local.get $$t2 + local.get $$t5 + f64.div + local.set $$t6 + + ;;ai * b + local.get $ai + local.get $b + f64.mul + local.set $$t7 + + ;;a * bi + local.get $a + local.get $bi + f64.mul + local.set $$t8 + + ;;t7 - t8 + local.get $$t7 + local.get $$t8 + f64.sub + local.set $$t9 + + ;;b * b + local.get $b + local.get $b + f64.mul + local.set $$t10 + + ;;bi * bi + local.get $bi + local.get $bi + f64.mul + local.set $$t11 + + ;;t10 + t11 + local.get $$t10 + local.get $$t11 + f64.add + local.set $$t12 + + ;;t9 / t12 + local.get $$t9 + local.get $$t12 + f64.div + local.set $$t13 + + ;;return t6, t13 + local.get $$t6 + local.set $$ret_0 + local.get $$t13 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex128_Div + +(func $$wa.runtime.complex128_Mul (param $a f64) (param $ai f64) (param $b f64) (param $bi f64) (result f64 f64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f64) + (local $$ret_1 f64) + (local $$t0 f64) + (local $$t1 f64) + (local $$t2 f64) + (local $$t3 f64) + (local $$t4 f64) + (local $$t5 f64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a * b + local.get $a + local.get $b + f64.mul + local.set $$t0 + + ;;ai * bi + local.get $ai + local.get $bi + f64.mul + local.set $$t1 + + ;;t0 - t1 + local.get $$t0 + local.get $$t1 + f64.sub + local.set $$t2 + + ;;ai * b + local.get $ai + local.get $b + f64.mul + local.set $$t3 + + ;;a * bi + local.get $a + local.get $bi + f64.mul + local.set $$t4 + + ;;t3 + t4 + local.get $$t3 + local.get $$t4 + f64.add + local.set $$t5 + + ;;return t2, t5 + local.get $$t2 + local.set $$ret_0 + local.get $$t5 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex128_Mul + +(func $$wa.runtime.complex128_Sub (param $a f64) (param $ai f64) (param $b f64) (param $bi f64) (result f64 f64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f64) + (local $$ret_1 f64) + (local $$t0 f64) + (local $$t1 f64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a - b + local.get $a + local.get $b + f64.sub + local.set $$t0 + + ;;ai - bi + local.get $ai + local.get $bi + f64.sub + local.set $$t1 + + ;;return t0, t1 + local.get $$t0 + local.set $$ret_0 + local.get $$t1 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex128_Sub + +(func $$wa.runtime.complex64_Add (param $a f32) (param $ai f32) (param $b f32) (param $bi f32) (result f32 f32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f32) + (local $$ret_1 f32) + (local $$t0 f32) + (local $$t1 f32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a + b + local.get $a + local.get $b + f32.add + local.set $$t0 + + ;;ai + bi + local.get $ai + local.get $bi + f32.add + local.set $$t1 + + ;;return t0, t1 + local.get $$t0 + local.set $$ret_0 + local.get $$t1 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex64_Add + +(func $$wa.runtime.complex64_Div (param $a f32) (param $ai f32) (param $b f32) (param $bi f32) (result f32 f32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f32) + (local $$ret_1 f32) + (local $$t0 f32) + (local $$t1 f32) + (local $$t2 f32) + (local $$t3 f32) + (local $$t4 f32) + (local $$t5 f32) + (local $$t6 f32) + (local $$t7 f32) + (local $$t8 f32) + (local $$t9 f32) + (local $$t10 f32) + (local $$t11 f32) + (local $$t12 f32) + (local $$t13 f32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a * b + local.get $a + local.get $b + f32.mul + local.set $$t0 + + ;;ai * bi + local.get $ai + local.get $bi + f32.mul + local.set $$t1 + + ;;t0 + t1 + local.get $$t0 + local.get $$t1 + f32.add + local.set $$t2 + + ;;b * b + local.get $b + local.get $b + f32.mul + local.set $$t3 + + ;;bi * bi + local.get $bi + local.get $bi + f32.mul + local.set $$t4 + + ;;t3 + t4 + local.get $$t3 + local.get $$t4 + f32.add + local.set $$t5 + + ;;t2 / t5 + local.get $$t2 + local.get $$t5 + f32.div + local.set $$t6 + + ;;ai * b + local.get $ai + local.get $b + f32.mul + local.set $$t7 + + ;;a * bi + local.get $a + local.get $bi + f32.mul + local.set $$t8 + + ;;t7 - t8 + local.get $$t7 + local.get $$t8 + f32.sub + local.set $$t9 + + ;;b * b + local.get $b + local.get $b + f32.mul + local.set $$t10 + + ;;bi * bi + local.get $bi + local.get $bi + f32.mul + local.set $$t11 + + ;;t10 + t11 + local.get $$t10 + local.get $$t11 + f32.add + local.set $$t12 + + ;;t9 / t12 + local.get $$t9 + local.get $$t12 + f32.div + local.set $$t13 + + ;;return t6, t13 + local.get $$t6 + local.set $$ret_0 + local.get $$t13 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex64_Div + +(func $$wa.runtime.complex64_Mul (param $a f32) (param $ai f32) (param $b f32) (param $bi f32) (result f32 f32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f32) + (local $$ret_1 f32) + (local $$t0 f32) + (local $$t1 f32) + (local $$t2 f32) + (local $$t3 f32) + (local $$t4 f32) + (local $$t5 f32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a * b + local.get $a + local.get $b + f32.mul + local.set $$t0 + + ;;ai * bi + local.get $ai + local.get $bi + f32.mul + local.set $$t1 + + ;;t0 - t1 + local.get $$t0 + local.get $$t1 + f32.sub + local.set $$t2 + + ;;ai * b + local.get $ai + local.get $b + f32.mul + local.set $$t3 + + ;;a * bi + local.get $a + local.get $bi + f32.mul + local.set $$t4 + + ;;t3 + t4 + local.get $$t3 + local.get $$t4 + f32.add + local.set $$t5 + + ;;return t2, t5 + local.get $$t2 + local.set $$ret_0 + local.get $$t5 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex64_Mul + +(func $$wa.runtime.complex64_Sub (param $a f32) (param $ai f32) (param $b f32) (param $bi f32) (result f32 f32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 f32) + (local $$ret_1 f32) + (local $$t0 f32) + (local $$t1 f32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;a - b + local.get $a + local.get $b + f32.sub + local.set $$t0 + + ;;ai - bi + local.get $ai + local.get $bi + f32.sub + local.set $$t1 + + ;;return t0, t1 + local.get $$t0 + local.set $$ret_0 + local.get $$t1 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 +) ;;$wa.runtime.complex64_Sub + +(func $$runtime.environGet (param $result_environv i32) (param $result_environv_buf i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$runtime.environGet + +(func $$runtime.environSizesGet (param $result_environc i32) (param $result_environv_len i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$runtime.environSizesGet + +(func $$runtime.fdWrite (param $fd i32) (param $io i32) (param $iovs_len i32) (param $nwritten i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$runtime.fdWrite + +(func $runtime.free (param $ap i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14 i32) + (local $$t15 i32) + (local $$t16 i32) + (local $$t17 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20 i32) + (local $$t21 i32) + (local $$t22 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24 i32) + (local $$t25 i32) + (local $$t26 i32) + (local $$t27.0 i32) + (local $$t27.1 i32) + (local $$t28 i32) + (local $$t29.0 i32) + (local $$t29.1 i32) + (local $$t30 i32) + (local $$t31 i32) + (local $$t32 i32) + (local $$t33 i32) + (local $$t34.0 i32) + (local $$t34.1 i32) + (local $$t35 i32) + (local $$t36 i32) + (local $$t37 i32) + (local $$t38 i32) + (local $$t39 i32) + (local $$t40.0 i32) + (local $$t40.1 i32) + (local $$t41 i32) + (local $$t42 i32) + (local $$t43 i32) + (local $$t44 i32) + (local $$t45.0 i32) + (local $$t45.1 i32) + (local $$t46.0 i32) + (local $$t46.1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_18 + block $$Block_17 + block $$Block_16 + block $$Block_15 + block $$Block_14 + block $$Block_13 + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;ap == 0:u32 + local.get $ap + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 3 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_2 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;ap - 8:u32 + local.get $ap + i32.const 8 + i32.sub + local.set $$t1 + + ;;local knr_Header (bp) + i32.const 0 + local.set $$t2.0 + i32.const 0 + local.set $$t2.1 + + ;;knr_getBlockHeader(t1) + local.get $$t1 + call $runtime.knr_getBlockHeader + local.set $$t3.1 + local.set $$t3.0 + + ;;*t2 = t3 + local.get $$t3.0 + local.get $$t3.1 + local.set $$t2.1 + local.set $$t2.0 + + ;;&t2.size [#1] + + ;;*t4 + local.get $$t2.1 + local.set $$t4 + + ;;t5 <= 1:u32 + local.get $$t4 + i32.const 1 + i32.le_u + local.set $$t5 + + ;;if t6 goto 4 else 5 + local.get $$t5 + if + br $$Block_3 + else + br $$Block_4 + end + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;ap % 8:u32 + local.get $ap + i32.const 8 + i32.rem_u + local.set $$t6 + + ;;t7 != 0:u32 + local.get $$t6 + i32.const 0 + i32.eq + i32.eqz + local.set $$t7 + + ;;if t8 goto 1 else 2 + local.get $$t7 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;*knr_freep + global.get $$knr_freep + local.set $$t8 + + ;;local knr_Header (p) + i32.const 0 + local.set $$t9.0 + i32.const 0 + local.set $$t9.1 + + ;;knr_getBlockHeader(t9) + local.get $$t8 + call $runtime.knr_getBlockHeader + local.set $$t10.1 + local.set $$t10.0 + + ;;*t10 = t11 + local.get $$t10.0 + local.get $$t10.1 + local.set $$t9.1 + local.set $$t9.0 + + ;;jump 8 + br $$Block_7 + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;&t10.ptr [#0] + + ;;*t12 + local.get $$t9.0 + local.set $$t11 + + ;;t22 >= t13 + local.get $$t12 + local.get $$t11 + i32.ge_u + local.set $$t13 + + ;;if t14 goto 11 else 10 + local.get $$t13 + if + br $$Block_10 + else + br $$Block_9 + end + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;&t2.size [#1] + + ;;*t15 + local.get $$t2.1 + local.set $$t14 + + ;;t16 * 8:u32 + local.get $$t14 + i32.const 8 + i32.mul + local.set $$t15 + + ;;t1 + t17 + local.get $$t1 + local.get $$t15 + i32.add + local.set $$t16 + + ;;&t10.ptr [#0] + + ;;*t19 + local.get $$t9.0 + local.set $$t17 + + ;;t18 == t20 + local.get $$t16 + local.get $$t17 + i32.eq + local.set $$t18 + + ;;if t21 goto 13 else 15 + local.get $$t18 + if + br $$Block_12 + else + br $$Block_14 + end + + end ;;$Block_7 + ;;phi [5: t9, 10: t28] #p_addr + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + local.get $$t8 + else + local.get $$t19 + end + local.set $$t12 + + i32.const 8 + local.set $$current_block + + ;;t1 > t22 + local.get $$t1 + local.get $$t12 + i32.gt_u + local.set $$t20 + + ;;if t23 goto 9 else 6 + local.get $$t20 + if + br $$Block_8 + else + i32.const 6 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;&t10.ptr [#0] + + ;;*t24 + local.get $$t9.0 + local.set $$t21 + + ;;t1 < t25 + local.get $$t1 + local.get $$t21 + i32.lt_u + local.set $$t22 + + ;;if t26 goto 7 else 6 + local.get $$t22 + if + i32.const 7 + local.set $$block_selector + br $$BlockDisp + else + i32.const 6 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_9 + i32.const 10 + local.set $$current_block + + ;;&t10.ptr [#0] + + ;;*t27 + local.get $$t9.0 + local.set $$t19 + + ;;knr_getBlockHeader(t28) + local.get $$t19 + call $runtime.knr_getBlockHeader + local.set $$t23.1 + local.set $$t23.0 + + ;;*t10 = t29 + local.get $$t23.0 + local.get $$t23.1 + local.set $$t9.1 + local.set $$t9.0 + + ;;jump 8 + i32.const 8 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_10 + i32.const 11 + local.set $$current_block + + ;;t1 > t22 + local.get $$t1 + local.get $$t12 + i32.gt_u + local.set $$t24 + + ;;if t30 goto 7 else 12 + local.get $$t24 + if + i32.const 7 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_11 + end + + end ;;$Block_11 + i32.const 12 + local.set $$current_block + + ;;&t10.ptr [#0] + + ;;*t31 + local.get $$t9.0 + local.set $$t25 + + ;;t1 < t32 + local.get $$t1 + local.get $$t25 + i32.lt_u + local.set $$t26 + + ;;if t33 goto 7 else 10 + local.get $$t26 + if + i32.const 7 + local.set $$block_selector + br $$BlockDisp + else + i32.const 10 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_12 + i32.const 13 + local.set $$current_block + + ;;local knr_Header (p_ptr) + i32.const 0 + local.set $$t27.0 + i32.const 0 + local.set $$t27.1 + + ;;&t10.ptr [#0] + + ;;*t35 + local.get $$t9.0 + local.set $$t28 + + ;;knr_getBlockHeader(t36) + local.get $$t28 + call $runtime.knr_getBlockHeader + local.set $$t29.1 + local.set $$t29.0 + + ;;*t34 = t37 + local.get $$t29.0 + local.get $$t29.1 + local.set $$t27.1 + local.set $$t27.0 + + ;;&t2.size [#1] + + ;;&t34.size [#1] + + ;;*t39 + local.get $$t27.1 + local.set $$t30 + + ;;*t38 + local.get $$t2.1 + local.set $$t31 + + ;;t41 + t40 + local.get $$t31 + local.get $$t30 + i32.add + local.set $$t32 + + ;;*t38 = t42 + local.get $$t32 + local.set $$t2.1 + + ;;&t2.ptr [#0] + + ;;&t34.ptr [#0] + + ;;*t44 + local.get $$t27.0 + local.set $$t33 + + ;;*t43 = t45 + local.get $$t33 + local.set $$t2.0 + + ;;*t2 + local.get $$t2.0 + local.get $$t2.1 + local.set $$t34.1 + local.set $$t34.0 + + ;;knr_setBlockHeader(t1, t46) + local.get $$t1 + local.get $$t34.0 + local.get $$t34.1 + call $runtime.knr_setBlockHeader + + ;;jump 14 + br $$Block_13 + + end ;;$Block_13 + i32.const 14 + local.set $$current_block + + ;;&t10.size [#1] + + ;;*t48 + local.get $$t9.1 + local.set $$t35 + + ;;t49 * 8:u32 + local.get $$t35 + i32.const 8 + i32.mul + local.set $$t36 + + ;;t22 + t50 + local.get $$t12 + local.get $$t36 + i32.add + local.set $$t37 + + ;;t51 == t1 + local.get $$t37 + local.get $$t1 + i32.eq + local.set $$t38 + + ;;if t52 goto 16 else 18 + local.get $$t38 + if + br $$Block_15 + else + br $$Block_17 + end + + end ;;$Block_14 + i32.const 15 + local.set $$current_block + + ;;&t2.ptr [#0] + + ;;&t10.ptr [#0] + + ;;*t54 + local.get $$t9.0 + local.set $$t39 + + ;;*t53 = t55 + local.get $$t39 + local.set $$t2.0 + + ;;*t2 + local.get $$t2.0 + local.get $$t2.1 + local.set $$t40.1 + local.set $$t40.0 + + ;;knr_setBlockHeader(t1, t56) + local.get $$t1 + local.get $$t40.0 + local.get $$t40.1 + call $runtime.knr_setBlockHeader + + ;;jump 14 + i32.const 14 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_15 + i32.const 16 + local.set $$current_block + + ;;&t10.size [#1] + + ;;&t2.size [#1] + + ;;*t59 + local.get $$t2.1 + local.set $$t41 + + ;;*t58 + local.get $$t9.1 + local.set $$t42 + + ;;t61 + t60 + local.get $$t42 + local.get $$t41 + i32.add + local.set $$t43 + + ;;*t58 = t62 + local.get $$t43 + local.set $$t9.1 + + ;;&t10.ptr [#0] + + ;;&t2.ptr [#0] + + ;;*t64 + local.get $$t2.0 + local.set $$t44 + + ;;*t63 = t65 + local.get $$t44 + local.set $$t9.0 + + ;;*t10 + local.get $$t9.0 + local.get $$t9.1 + local.set $$t45.1 + local.set $$t45.0 + + ;;knr_setBlockHeader(t22, t66) + local.get $$t12 + local.get $$t45.0 + local.get $$t45.1 + call $runtime.knr_setBlockHeader + + ;;jump 17 + br $$Block_16 + + end ;;$Block_16 + i32.const 17 + local.set $$current_block + + ;;*knr_freep = t22 + local.get $$t12 + global.set $$knr_freep + + ;;return + br $$BlockFnBody + + end ;;$Block_17 + i32.const 18 + local.set $$current_block + + ;;&t10.ptr [#0] + + ;;*t68 = t1 + local.get $$t1 + local.set $$t9.0 + + ;;*t10 + local.get $$t9.0 + local.get $$t9.1 + local.set $$t46.1 + local.set $$t46.0 + + ;;knr_setBlockHeader(t22, t69) + local.get $$t12 + local.get $$t46.0 + local.get $$t46.1 + call $runtime.knr_setBlockHeader + + ;;jump 17 + i32.const 17 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_18 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.free + +(func $runtime.getItab (param $dhash i32) (param $ihash i32) (param $commanok i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;*_itabsPtr + global.get $$wa.runtime._itabsPtr + local.set $$t0 + + ;;dhash - 1:i32 + local.get $dhash + i32.const 1 + i32.sub + local.set $$t1 + + ;;*_interfaceCount + global.get $$wa.runtime._interfaceCount + local.set $$t2 + + ;;t1 * t2 + local.get $$t1 + local.get $$t2 + i32.mul + local.set $$t3 + + ;;t3 - ihash + local.get $$t3 + local.get $ihash + i32.sub + local.set $$t4 + + ;;t4 - 1:i32 + local.get $$t4 + i32.const 1 + i32.sub + local.set $$t5 + + ;;t5 * 4:i32 + local.get $$t5 + i32.const 4 + i32.mul + local.set $$t6 + + ;;t0 + t6 + local.get $$t0 + local.get $$t6 + i32.add + local.set $$t7 + + ;;convert u32 <- i32 (t7) + local.get $$t7 + local.set $$t8 + + ;;getU32(t8) + local.get $$t8 + call $runtime.getU32 + local.set $$t9 + + ;;return t9 + local.get $$t9 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;runtime.getItab + +(func $$wa.runtime.getTypePtr (param $hash i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;return 0:uintptr + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$wa.runtime.getTypePtr + +(func $runtime.getU32 (param $addr i32) (result i32) + local.get $addr + i32.load offset=0 align=4 +) ;;runtime.getU32 + +(func $runtime.get_u8 (param $addr i32) (result i32) + local.get $addr + i32.load8_u offset=0 align=1 +) ;;runtime.get_u8 + +(func $runtime.init + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;*init$guard + global.get $runtime.init$guard + local.set $$t0 + + ;;if t0 goto 2 else 1 + local.get $$t0 + if + br $$Block_1 + else + br $$Block_0 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;*init$guard = true:bool + i32.const 1 + global.set $runtime.init$guard + + ;;syscall/js.init() + call $syscall$js.init + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.init + +(func $runtime.knr_getBlockHeader (param $addr i32) (result i32 i32) + local.get $addr + i32.load offset=0 align=4 + local.get $addr + i32.load offset=4 align=4 +) ;;runtime.knr_getBlockHeader + +(func $runtime.knr_setBlockHeader (param $addr i32) (param $data.0 i32) (param $data.1 i32) + local.get $addr + local.get $data.0 + i32.store offset=0 align=4 + local.get $addr + local.get $data.1 + i32.store offset=4 align=4 +) ;;runtime.knr_setBlockHeader + +(func $runtime.malloc (param $nbytes i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t10 i32) + (local $$t11 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14 i32) + (local $$t15 i32) + (local $$t16 i32) + (local $$t17.0 i32) + (local $$t17.1 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20 i32) + (local $$t21 i32) + (local $$t22 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24.0 i32) + (local $$t24.1 i32) + (local $$t25 i32) + (local $$t26.0 i32) + (local $$t26.1 i32) + (local $$t27.0 i32) + (local $$t27.1 i32) + (local $$t28 i32) + (local $$t29 i32) + (local $$t30 i32) + (local $$t31 i32) + (local $$t32 i32) + (local $$t33 i32) + (local $$t34 i32) + (local $$t35 i32) + (local $$t36 i32) + (local $$t37 i32) + (local $$t38.0 i32) + (local $$t38.1 i32) + (local $$t39 i32) + (local $$t40 i32) + (local $$t41 i32) + (local $$t42 i32) + (local $$t43 i32) + (local $$t44.0 i32) + (local $$t44.1 i32) + (local $$t45 i32) + (local $$t46 i32) + (local $$t47.0 i32) + (local $$t47.1 i32) + (local $$t48.0 i32) + (local $$t48.1 i32) + (local $$t49.0 i32) + (local $$t49.1 i32) + (local $$t50.0 i32) + (local $$t50.1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_13 + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;nbytes == 0:u32 + local.get $nbytes + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 3 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_2 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;return 0:u32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;*knr_basep + global.get $$knr_basep + local.set $$t1 + + ;;t1 == 0:u32 + local.get $$t1 + i32.const 0 + i32.eq + local.set $$t2 + + ;;if t2 goto 4 else 5 + local.get $$t2 + if + br $$Block_3 + else + br $$Block_4 + end + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;heapMax() + call $runtime.heapMax + local.set $$t3 + + ;;*knr_basep + global.get $$knr_basep + local.set $$t4 + + ;;t3 - t4 + local.get $$t3 + local.get $$t4 + i32.sub + local.set $$t5 + + ;;nbytes >= t5 + local.get $nbytes + local.get $$t5 + i32.ge_u + local.set $$t6 + + ;;if t6 goto 1 else 2 + local.get $$t6 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;heapBase() + call $runtime.heapBase + local.set $$t7 + + ;;*knr_basep = t7 + local.get $$t7 + global.set $$knr_basep + + ;;*knr_basep + global.get $$knr_basep + local.set $$t8 + + ;;*knr_freep = t8 + local.get $$t8 + global.set $$knr_freep + + ;;local knr_Header (base) + i32.const 0 + local.set $$t9.0 + i32.const 0 + local.set $$t9.1 + + ;;&t9.ptr [#0] + + ;;*knr_basep + global.get $$knr_basep + local.set $$t10 + + ;;&t9.size [#1] + + ;;heapMax() + call $runtime.heapMax + local.set $$t11 + + ;;*knr_basep + global.get $$knr_basep + local.set $$t12 + + ;;t13 - t14 + local.get $$t11 + local.get $$t12 + i32.sub + local.set $$t13 + + ;;t15 / 8:u32 + local.get $$t13 + i32.const 8 + i32.div_u + local.set $$t14 + + ;;t16 - 1:u32 + local.get $$t14 + i32.const 1 + i32.sub + local.set $$t15 + + ;;*t10 = t11 + local.get $$t10 + local.set $$t9.0 + + ;;*t12 = t17 + local.get $$t15 + local.set $$t9.1 + + ;;*knr_basep + global.get $$knr_basep + local.set $$t16 + + ;;*t9 + local.get $$t9.0 + local.get $$t9.1 + local.set $$t17.1 + local.set $$t17.0 + + ;;knr_setBlockHeader(t18, t19) + local.get $$t16 + local.get $$t17.0 + local.get $$t17.1 + call $runtime.knr_setBlockHeader + + ;;jump 5 + br $$Block_4 + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;nbytes + 8:u32 + local.get $nbytes + i32.const 8 + i32.add + local.set $$t18 + + ;;t21 - 1:u32 + local.get $$t18 + i32.const 1 + i32.sub + local.set $$t19 + + ;;t22 / 8:u32 + local.get $$t19 + i32.const 8 + i32.div_u + local.set $$t20 + + ;;t23 + 1:u32 + local.get $$t20 + i32.const 1 + i32.add + local.set $$t21 + + ;;*knr_freep + global.get $$knr_freep + local.set $$t22 + + ;;local knr_Header (prevp) + i32.const 0 + local.set $$t23.0 + i32.const 0 + local.set $$t23.1 + + ;;knr_getBlockHeader(t25) + local.get $$t22 + call $runtime.knr_getBlockHeader + local.set $$t24.1 + local.set $$t24.0 + + ;;*t26 = t27 + local.get $$t24.0 + local.get $$t24.1 + local.set $$t23.1 + local.set $$t23.0 + + ;;&t26.ptr [#0] + + ;;*t28 + local.get $$t23.0 + local.set $$t25 + + ;;local knr_Header (p) + i32.const 0 + local.set $$t26.0 + i32.const 0 + local.set $$t26.1 + + ;;knr_getBlockHeader(t29) + local.get $$t25 + call $runtime.knr_getBlockHeader + local.set $$t27.1 + local.set $$t27.0 + + ;;*t30 = t31 + local.get $$t27.0 + local.get $$t27.1 + local.set $$t26.1 + local.set $$t26.0 + + ;;jump 6 + br $$Block_5 + + end ;;$Block_5 + ;;phi [5: t25, 13: t33] #prevp_addr + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + local.get $$t22 + else + local.get $$t28 + end + local.set $$t29 + + ;;phi [5: t29, 13: t64] #p_addr + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + local.get $$t25 + else + local.get $$t30 + end + local.set $$t28 + + i32.const 6 + local.set $$current_block + + ;;&t30.size [#1] + + ;;*t34 + local.get $$t26.1 + local.set $$t31 + + ;;t35 >= t24 + local.get $$t31 + local.get $$t21 + i32.ge_u + local.set $$t32 + + ;;if t36 goto 7 else 8 + local.get $$t32 + if + br $$Block_6 + else + br $$Block_7 + end + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;&t30.size [#1] + + ;;*t37 + local.get $$t26.1 + local.set $$t33 + + ;;t38 == t24 + local.get $$t33 + local.get $$t21 + i32.eq + local.set $$t34 + + ;;if t39 goto 9 else 11 + local.get $$t34 + if + br $$Block_8 + else + br $$Block_10 + end + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;*knr_freep + global.get $$knr_freep + local.set $$t35 + + ;;t33 == t40 + local.get $$t28 + local.get $$t35 + i32.eq + local.set $$t36 + + ;;if t41 goto 12 else 13 + local.get $$t36 + if + br $$Block_11 + else + br $$Block_12 + end + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;&t26.ptr [#0] + + ;;&t30.ptr [#0] + + ;;*t43 + local.get $$t26.0 + local.set $$t37 + + ;;*t42 = t44 + local.get $$t37 + local.set $$t23.0 + + ;;*t26 + local.get $$t23.0 + local.get $$t23.1 + local.set $$t38.1 + local.set $$t38.0 + + ;;knr_setBlockHeader(t32, t45) + local.get $$t29 + local.get $$t38.0 + local.get $$t38.1 + call $runtime.knr_setBlockHeader + + ;;jump 10 + br $$Block_9 + + end ;;$Block_9 + ;;phi [9: t33, 11: t57] #p_addr + local.get $$current_block + i32.const 9 + i32.eq + if (result i32) + local.get $$t28 + else + local.get $$t39 + end + local.set $$t40 + + i32.const 10 + local.set $$current_block + + ;;*knr_freep = t32 + local.get $$t29 + global.set $$knr_freep + + ;;t47 + 8:u32 + local.get $$t40 + i32.const 8 + i32.add + local.set $$t41 + + ;;return t48 + local.get $$t41 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_10 + i32.const 11 + local.set $$current_block + + ;;&t30.size [#1] + + ;;*t49 + local.get $$t26.1 + local.set $$t42 + + ;;t50 - t24 + local.get $$t42 + local.get $$t21 + i32.sub + local.set $$t43 + + ;;*t49 = t51 + local.get $$t43 + local.set $$t26.1 + + ;;*t30 + local.get $$t26.0 + local.get $$t26.1 + local.set $$t44.1 + local.set $$t44.0 + + ;;knr_setBlockHeader(t33, t52) + local.get $$t28 + local.get $$t44.0 + local.get $$t44.1 + call $runtime.knr_setBlockHeader + + ;;&t30.size [#1] + + ;;*t54 + local.get $$t26.1 + local.set $$t45 + + ;;t55 * 8:u32 + local.get $$t45 + i32.const 8 + i32.mul + local.set $$t46 + + ;;t33 + t56 + local.get $$t28 + local.get $$t46 + i32.add + local.set $$t39 + + ;;knr_getBlockHeader(t57) + local.get $$t39 + call $runtime.knr_getBlockHeader + local.set $$t47.1 + local.set $$t47.0 + + ;;*t30 = t58 + local.get $$t47.0 + local.get $$t47.1 + local.set $$t26.1 + local.set $$t26.0 + + ;;&t30.size [#1] + + ;;*t59 = t24 + local.get $$t21 + local.set $$t26.1 + + ;;*t30 + local.get $$t26.0 + local.get $$t26.1 + local.set $$t48.1 + local.set $$t48.0 + + ;;knr_setBlockHeader(t57, t60) + local.get $$t39 + local.get $$t48.0 + local.get $$t48.1 + call $runtime.knr_setBlockHeader + + ;;jump 10 + i32.const 10 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_11 + i32.const 12 + local.set $$current_block + + ;;return 0:u32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_12 + i32.const 13 + local.set $$current_block + + ;;knr_getBlockHeader(t33) + local.get $$t28 + call $runtime.knr_getBlockHeader + local.set $$t49.1 + local.set $$t49.0 + + ;;*t26 = t62 + local.get $$t49.0 + local.get $$t49.1 + local.set $$t23.1 + local.set $$t23.0 + + ;;&t30.ptr [#0] + + ;;*t63 + local.get $$t26.0 + local.set $$t30 + + ;;knr_getBlockHeader(t64) + local.get $$t30 + call $runtime.knr_getBlockHeader + local.set $$t50.1 + local.set $$t50.0 + + ;;*t30 = t65 + local.get $$t50.0 + local.get $$t50.1 + local.set $$t26.1 + local.set $$t26.0 + + ;;jump 6 + i32.const 6 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_13 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;runtime.malloc + +(func $runtime.mapLen (param $m.0 i32) (param $m.1 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t2.2 i32) + (local $$t2.3 i32) + (local $$t3 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;m == nil:*mapImp + local.get $m.1 + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;return 0:int + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;*t1 + local.get $$t1.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=4 align=4 + local.get $$t1.1 + i32.load offset=8 align=4 + local.get $$t1.1 + i32.load offset=12 align=4 + local.set $$t2.3 + local.set $$t2.2 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;len(t2) + local.get $$t2.2 + local.set $$t3 + + ;;return t3 + local.get $$t3 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release +) ;;runtime.mapLen + +(func $$void.$$block.$$onFree (param $ptr i32) + local.get $ptr + i32.load offset=0 align=1 + call $runtime.Block.Release + local.get $ptr + i32.const 0 + i32.store offset=0 align=1 +) ;;$void.$$block.$$onFree + +(func $$void.$ref.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 4 + call_indirect (type $$onFree) +) ;;$void.$ref.underlying.$$onFree + +(func $$i`0`.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 5 + call_indirect (type $$onFree) +) ;;$i`0`.underlying.$$onFree + +(func $$runtime.mapNode.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 6 + call_indirect (type $$onFree) + local.get $$ptr + i32.const 16 + i32.add + i32.const 6 + call_indirect (type $$onFree) +) ;;$runtime.mapNode.$$onFree + +(func $runtime.mapLookup (param $m.0 i32) (param $m.1 i32) (param $k.0.0 i32) (param $k.0.1 i32) (param $k.1 i32) (param $k.2 i32) (result i32 i32 i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0.0 i32) + (local $$ret_0.0.1 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$ret_1 i32) + (local $$t0 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t3.2 i32) + (local $$t3.3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t9.0.0.0 i32) + (local $$t9.0.0.1 i32) + (local $$t9.0.1 i32) + (local $$t9.0.2 i32) + (local $$t9.1.0.0 i32) + (local $$t9.1.0.1 i32) + (local $$t9.1.1 i32) + (local $$t9.1.2 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11.0.0 i32) + (local $$t11.0.1 i32) + (local $$t11.1 i32) + (local $$t11.2 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14.0 i32) + (local $$t14.1 i32) + (local $$t15.0.0 i32) + (local $$t15.0.1 i32) + (local $$t15.1 i32) + (local $$t15.2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;m == nil:*mapImp + local.get $m.1 + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;return nil:interface{}, false:bool + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.set $$ret_0.0.1 + local.get $$ret_0.0.0 + call $runtime.Block.Release + local.set $$ret_0.0.0 + i32.const 0 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;local mapNode (n) + i32.const 48 + call $runtime.HeapAlloc + i32.const 1 + i32.const 7 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;*t2 + local.get $$t2.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t2.1 + i32.load offset=4 align=4 + local.get $$t2.1 + i32.load offset=8 align=4 + local.get $$t2.1 + i32.load offset=12 align=4 + local.set $$t3.3 + local.set $$t3.2 + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;len(t3) + local.get $$t3.2 + local.set $$t4 + + ;;jump 3 + br $$Block_2 + + end ;;$Block_2 + ;;phi [2: -1:int, 4: t6] + local.get $$current_block + i32.const 2 + i32.eq + if (result i32) + i32.const -1 + else + local.get $$t5 + end + local.set $$t6 + + i32.const 3 + local.set $$current_block + + ;;t5 + 1:int + local.get $$t6 + i32.const 1 + i32.add + local.set $$t5 + + ;;t6 < t4 + local.get $$t5 + local.get $$t4 + i32.lt_s + local.set $$t7 + + ;;if t7 goto 4 else 5 + local.get $$t7 + if + br $$Block_3 + else + br $$Block_4 + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;&t3[t6] + local.get $$t3.0 + call $runtime.Block.Retain + local.get $$t3.1 + i32.const 32 + local.get $$t5 + i32.mul + i32.add + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;*t8 + local.get $$t8.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t8.1 + i32.load offset=4 align=4 + local.get $$t8.1 + i32.load offset=8 align=4 + local.get $$t8.1 + i32.load offset=12 align=4 + local.get $$t8.1 + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $$t8.1 + i32.load offset=20 align=4 + local.get $$t8.1 + i32.load offset=24 align=4 + local.get $$t8.1 + i32.load offset=28 align=4 + local.set $$t9.1.2 + local.set $$t9.1.1 + local.set $$t9.1.0.1 + local.get $$t9.1.0.0 + call $runtime.Block.Release + local.set $$t9.1.0.0 + local.set $$t9.0.2 + local.set $$t9.0.1 + local.set $$t9.0.0.1 + local.get $$t9.0.0.0 + call $runtime.Block.Release + local.set $$t9.0.0.0 + + ;;*t1 = t9 + local.get $$t1.1 + local.get $$t9.0.0.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t1.1 + local.get $$t9.0.0.1 + i32.store offset=4 align=4 + local.get $$t1.1 + local.get $$t9.0.1 + i32.store offset=8 align=4 + local.get $$t1.1 + local.get $$t9.0.2 + i32.store offset=12 align=4 + local.get $$t1.1 + local.get $$t9.1.0.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $$t1.1 + local.get $$t9.1.0.1 + i32.store offset=20 align=4 + local.get $$t1.1 + local.get $$t9.1.1 + i32.store offset=24 align=4 + local.get $$t1.1 + local.get $$t9.1.2 + i32.store offset=28 align=4 + + ;;&t1.k [#0] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 0 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t10 + local.get $$t10.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t10.1 + i32.load offset=4 align=4 + local.get $$t10.1 + i32.load offset=8 align=4 + local.get $$t10.1 + i32.load offset=12 align=4 + local.set $$t11.2 + local.set $$t11.1 + local.set $$t11.0.1 + local.get $$t11.0.0 + call $runtime.Block.Release + local.set $$t11.0.0 + + ;;Compare(t11, k) + local.get $$t11.0.0 + local.get $$t11.0.1 + local.get $$t11.1 + local.get $$t11.2 + local.get $k.0.0 + local.get $k.0.1 + local.get $k.1 + local.get $k.2 + call $runtime.Compare + local.set $$t12 + + ;;t12 == 0:i32 + local.get $$t12 + i32.const 0 + i32.eq + local.set $$t13 + + ;;if t13 goto 6 else 3 + local.get $$t13 + if + br $$Block_5 + else + i32.const 3 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;return nil:interface{}, false:bool + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.set $$ret_0.0.1 + local.get $$ret_0.0.0 + call $runtime.Block.Release + local.set $$ret_0.0.0 + i32.const 0 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;&t1.v [#1] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 16 + i32.add + local.set $$t14.1 + local.get $$t14.0 + call $runtime.Block.Release + local.set $$t14.0 + + ;;*t14 + local.get $$t14.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t14.1 + i32.load offset=4 align=4 + local.get $$t14.1 + i32.load offset=8 align=4 + local.get $$t14.1 + i32.load offset=12 align=4 + local.set $$t15.2 + local.set $$t15.1 + local.set $$t15.0.1 + local.get $$t15.0.0 + call $runtime.Block.Release + local.set $$t15.0.0 + + ;;return t15, true:bool + local.get $$t15.0.0 + call $runtime.Block.Retain + local.get $$t15.0.1 + local.get $$t15.1 + local.get $$t15.2 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.set $$ret_0.0.1 + local.get $$ret_0.0.0 + call $runtime.Block.Release + local.set $$ret_0.0.0 + i32.const 1 + local.set $$ret_1 + br $$BlockFnBody + + end ;;$Block_6 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0.0 + call $runtime.Block.Retain + local.get $$ret_0.0.1 + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_1 + local.get $$ret_0.0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t9.1.0.0 + call $runtime.Block.Release + local.get $$t9.0.0.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t11.0.0 + call $runtime.Block.Release + local.get $$t14.0 + call $runtime.Block.Release + local.get $$t15.0.0 + call $runtime.Block.Release +) ;;runtime.mapLookup + +(func $$runtime.mapNode.$$block.$$onFree (param $ptr i32) + local.get $ptr + i32.load offset=0 align=1 + call $runtime.Block.Release + local.get $ptr + i32.const 0 + i32.store offset=0 align=1 +) ;;$runtime.mapNode.$$block.$$onFree + +(func $$runtime.mapNode.$slice.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 8 + call_indirect (type $$onFree) +) ;;$runtime.mapNode.$slice.underlying.$$onFree + +(func $$runtime.mapImp.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 9 + call_indirect (type $$onFree) +) ;;$runtime.mapImp.$$onFree + +(func $runtime.mapMake (result i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new mapImp (m) + i32.const 32 + call $runtime.HeapAlloc + i32.const 1 + i32.const 10 + i32.const 16 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;return t0 + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release +) ;;runtime.mapMake + +(func $$runtime.mapImp.$$block.$$onFree (param $ptr i32) + local.get $ptr + i32.load offset=0 align=1 + call $runtime.Block.Release + local.get $ptr + i32.const 0 + i32.store offset=0 align=1 +) ;;$runtime.mapImp.$$block.$$onFree + +(func $$runtime.mapImp.$ref.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 11 + call_indirect (type $$onFree) +) ;;$runtime.mapImp.$ref.underlying.$$onFree + +(func $$runtime.mapIter.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 12 + call_indirect (type $$onFree) +) ;;$runtime.mapIter.$$onFree + +(func $runtime.mapNext (param $iter.0.0 i32) (param $iter.0.1 i32) (param $iter.1 i32) (result i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$ret_1.0.0 i32) + (local $$ret_1.0.1 i32) + (local $$ret_1.1 i32) + (local $$ret_1.2 i32) + (local $$ret_2.0.0 i32) + (local $$ret_2.0.1 i32) + (local $$ret_2.1 i32) + (local $$ret_2.2 i32) + (local $$ret_3 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3 i32) + (local $$t4.0 i32) + (local $$t4.1 i32) + (local $$t5 i32) + (local $$t6.0 i32) + (local $$t6.1 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11.0 i32) + (local $$t11.1 i32) + (local $$t11.2 i32) + (local $$t11.3 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14.0 i32) + (local $$t14.1 i32) + (local $$t15 i32) + (local $$t16.0 i32) + (local $$t16.1 i32) + (local $$t17.0 i32) + (local $$t17.1 i32) + (local $$t18.0 i32) + (local $$t18.1 i32) + (local $$t19.0 i32) + (local $$t19.1 i32) + (local $$t20.0 i32) + (local $$t20.1 i32) + (local $$t20.2 i32) + (local $$t20.3 i32) + (local $$t21.0 i32) + (local $$t21.1 i32) + (local $$t22 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24.0.0.0 i32) + (local $$t24.0.0.1 i32) + (local $$t24.0.1 i32) + (local $$t24.0.2 i32) + (local $$t24.1.0.0 i32) + (local $$t24.1.0.1 i32) + (local $$t24.1.1 i32) + (local $$t24.1.2 i32) + (local $$t25.0 i32) + (local $$t25.1 i32) + (local $$t26.0.0 i32) + (local $$t26.0.1 i32) + (local $$t26.1 i32) + (local $$t26.2 i32) + (local $$t27.0 i32) + (local $$t27.1 i32) + (local $$t28.0.0 i32) + (local $$t28.0.1 i32) + (local $$t28.1 i32) + (local $$t28.2 i32) + (local $$t29.0 i32) + (local $$t29.1 i32) + (local $$t30 i32) + (local $$t31 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;local mapIter (iter) + i32.const 28 + call $runtime.HeapAlloc + i32.const 1 + i32.const 13 + i32.const 12 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;*t0 = iter + local.get $$t0.1 + local.get $iter.0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t0.1 + local.get $iter.0.1 + i32.store offset=4 align=4 + local.get $$t0.1 + local.get $iter.1 + i32.store offset=8 align=4 + + ;;&t0.m [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;*t1 + local.get $$t1.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=4 align=4 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;t2 == nil:*mapImp + local.get $$t2.1 + i32.const 0 + i32.eq + local.set $$t3 + + ;;if t3 goto 1 else 2 + local.get $$t3 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&t0.pos [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t4.1 + local.get $$t4.0 + call $runtime.Block.Release + local.set $$t4.0 + + ;;*t4 + local.get $$t4.1 + i32.load offset=0 align=4 + local.set $$t5 + + ;;return false:bool, nil:interface{}, nil:interface{}, t5 + i32.const 0 + local.set $$ret_0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_1.2 + local.set $$ret_1.1 + local.set $$ret_1.0.1 + local.get $$ret_1.0.0 + call $runtime.Block.Release + local.set $$ret_1.0.0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_2.2 + local.set $$ret_2.1 + local.set $$ret_2.0.1 + local.get $$ret_2.0.0 + call $runtime.Block.Release + local.set $$ret_2.0.0 + local.get $$t5 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;&t0.pos [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t6.1 + local.get $$t6.0 + call $runtime.Block.Release + local.set $$t6.0 + + ;;*t6 + local.get $$t6.1 + i32.load offset=0 align=4 + local.set $$t7 + + ;;&t0.m [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;*t8 + local.get $$t8.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t8.1 + i32.load offset=4 align=4 + local.set $$t9.1 + local.get $$t9.0 + call $runtime.Block.Release + local.set $$t9.0 + + ;;&t9.nodes [#0] + local.get $$t9.0 + call $runtime.Block.Retain + local.get $$t9.1 + i32.const 0 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t10 + local.get $$t10.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t10.1 + i32.load offset=4 align=4 + local.get $$t10.1 + i32.load offset=8 align=4 + local.get $$t10.1 + i32.load offset=12 align=4 + local.set $$t11.3 + local.set $$t11.2 + local.set $$t11.1 + local.get $$t11.0 + call $runtime.Block.Release + local.set $$t11.0 + + ;;len(t11) + local.get $$t11.2 + local.set $$t12 + + ;;t7 >= t12 + local.get $$t7 + local.get $$t12 + i32.ge_s + local.set $$t13 + + ;;if t13 goto 3 else 4 + local.get $$t13 + if + br $$Block_2 + else + br $$Block_3 + end + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;&t0.pos [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t14.1 + local.get $$t14.0 + call $runtime.Block.Release + local.set $$t14.0 + + ;;*t14 + local.get $$t14.1 + i32.load offset=0 align=4 + local.set $$t15 + + ;;return false:bool, nil:interface{}, nil:interface{}, t15 + i32.const 0 + local.set $$ret_0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_1.2 + local.set $$ret_1.1 + local.set $$ret_1.0.1 + local.get $$ret_1.0.0 + call $runtime.Block.Release + local.set $$ret_1.0.0 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + local.set $$ret_2.2 + local.set $$ret_2.1 + local.set $$ret_2.0.1 + local.get $$ret_2.0.0 + call $runtime.Block.Release + local.set $$ret_2.0.0 + local.get $$t15 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;local mapNode (node) + i32.const 48 + call $runtime.HeapAlloc + i32.const 1 + i32.const 7 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t16.1 + local.get $$t16.0 + call $runtime.Block.Release + local.set $$t16.0 + + ;;&t0.m [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t17.1 + local.get $$t17.0 + call $runtime.Block.Release + local.set $$t17.0 + + ;;*t17 + local.get $$t17.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t17.1 + i32.load offset=4 align=4 + local.set $$t18.1 + local.get $$t18.0 + call $runtime.Block.Release + local.set $$t18.0 + + ;;&t18.nodes [#0] + local.get $$t18.0 + call $runtime.Block.Retain + local.get $$t18.1 + i32.const 0 + i32.add + local.set $$t19.1 + local.get $$t19.0 + call $runtime.Block.Release + local.set $$t19.0 + + ;;*t19 + local.get $$t19.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t19.1 + i32.load offset=4 align=4 + local.get $$t19.1 + i32.load offset=8 align=4 + local.get $$t19.1 + i32.load offset=12 align=4 + local.set $$t20.3 + local.set $$t20.2 + local.set $$t20.1 + local.get $$t20.0 + call $runtime.Block.Release + local.set $$t20.0 + + ;;&t0.pos [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t21.1 + local.get $$t21.0 + call $runtime.Block.Release + local.set $$t21.0 + + ;;*t21 + local.get $$t21.1 + i32.load offset=0 align=4 + local.set $$t22 + + ;;&t20[t22] + local.get $$t20.0 + call $runtime.Block.Retain + local.get $$t20.1 + i32.const 32 + local.get $$t22 + i32.mul + i32.add + local.set $$t23.1 + local.get $$t23.0 + call $runtime.Block.Release + local.set $$t23.0 + + ;;*t23 + local.get $$t23.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t23.1 + i32.load offset=4 align=4 + local.get $$t23.1 + i32.load offset=8 align=4 + local.get $$t23.1 + i32.load offset=12 align=4 + local.get $$t23.1 + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $$t23.1 + i32.load offset=20 align=4 + local.get $$t23.1 + i32.load offset=24 align=4 + local.get $$t23.1 + i32.load offset=28 align=4 + local.set $$t24.1.2 + local.set $$t24.1.1 + local.set $$t24.1.0.1 + local.get $$t24.1.0.0 + call $runtime.Block.Release + local.set $$t24.1.0.0 + local.set $$t24.0.2 + local.set $$t24.0.1 + local.set $$t24.0.0.1 + local.get $$t24.0.0.0 + call $runtime.Block.Release + local.set $$t24.0.0.0 + + ;;*t16 = t24 + local.get $$t16.1 + local.get $$t24.0.0.0 + call $runtime.Block.Retain + local.get $$t16.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t16.1 + local.get $$t24.0.0.1 + i32.store offset=4 align=4 + local.get $$t16.1 + local.get $$t24.0.1 + i32.store offset=8 align=4 + local.get $$t16.1 + local.get $$t24.0.2 + i32.store offset=12 align=4 + local.get $$t16.1 + local.get $$t24.1.0.0 + call $runtime.Block.Retain + local.get $$t16.1 + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $$t16.1 + local.get $$t24.1.0.1 + i32.store offset=20 align=4 + local.get $$t16.1 + local.get $$t24.1.1 + i32.store offset=24 align=4 + local.get $$t16.1 + local.get $$t24.1.2 + i32.store offset=28 align=4 + + ;;&t16.k [#0] + local.get $$t16.0 + call $runtime.Block.Retain + local.get $$t16.1 + i32.const 0 + i32.add + local.set $$t25.1 + local.get $$t25.0 + call $runtime.Block.Release + local.set $$t25.0 + + ;;*t25 + local.get $$t25.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t25.1 + i32.load offset=4 align=4 + local.get $$t25.1 + i32.load offset=8 align=4 + local.get $$t25.1 + i32.load offset=12 align=4 + local.set $$t26.2 + local.set $$t26.1 + local.set $$t26.0.1 + local.get $$t26.0.0 + call $runtime.Block.Release + local.set $$t26.0.0 + + ;;&t16.v [#1] + local.get $$t16.0 + call $runtime.Block.Retain + local.get $$t16.1 + i32.const 16 + i32.add + local.set $$t27.1 + local.get $$t27.0 + call $runtime.Block.Release + local.set $$t27.0 + + ;;*t27 + local.get $$t27.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t27.1 + i32.load offset=4 align=4 + local.get $$t27.1 + i32.load offset=8 align=4 + local.get $$t27.1 + i32.load offset=12 align=4 + local.set $$t28.2 + local.set $$t28.1 + local.set $$t28.0.1 + local.get $$t28.0.0 + call $runtime.Block.Release + local.set $$t28.0.0 + + ;;&t0.pos [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t29.1 + local.get $$t29.0 + call $runtime.Block.Release + local.set $$t29.0 + + ;;*t29 + local.get $$t29.1 + i32.load offset=0 align=4 + local.set $$t30 + + ;;t30 + 1:int + local.get $$t30 + i32.const 1 + i32.add + local.set $$t31 + + ;;return true:bool, t26, t28, t31 + i32.const 1 + local.set $$ret_0 + local.get $$t26.0.0 + call $runtime.Block.Retain + local.get $$t26.0.1 + local.get $$t26.1 + local.get $$t26.2 + local.set $$ret_1.2 + local.set $$ret_1.1 + local.set $$ret_1.0.1 + local.get $$ret_1.0.0 + call $runtime.Block.Release + local.set $$ret_1.0.0 + local.get $$t28.0.0 + call $runtime.Block.Retain + local.get $$t28.0.1 + local.get $$t28.1 + local.get $$t28.2 + local.set $$ret_2.2 + local.set $$ret_2.1 + local.set $$ret_2.0.1 + local.get $$ret_2.0.0 + call $runtime.Block.Release + local.set $$ret_2.0.0 + local.get $$t31 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_4 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1.0.0 + call $runtime.Block.Retain + local.get $$ret_1.0.1 + local.get $$ret_1.1 + local.get $$ret_1.2 + local.get $$ret_2.0.0 + call $runtime.Block.Retain + local.get $$ret_2.0.1 + local.get $$ret_2.1 + local.get $$ret_2.2 + local.get $$ret_3 + local.get $$ret_1.0.0 + call $runtime.Block.Release + local.get $$ret_2.0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t4.0 + call $runtime.Block.Release + local.get $$t6.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t9.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t11.0 + call $runtime.Block.Release + local.get $$t14.0 + call $runtime.Block.Release + local.get $$t16.0 + call $runtime.Block.Release + local.get $$t17.0 + call $runtime.Block.Release + local.get $$t18.0 + call $runtime.Block.Release + local.get $$t19.0 + call $runtime.Block.Release + local.get $$t20.0 + call $runtime.Block.Release + local.get $$t21.0 + call $runtime.Block.Release + local.get $$t23.0 + call $runtime.Block.Release + local.get $$t24.1.0.0 + call $runtime.Block.Release + local.get $$t24.0.0.0 + call $runtime.Block.Release + local.get $$t25.0 + call $runtime.Block.Release + local.get $$t26.0.0 + call $runtime.Block.Release + local.get $$t27.0 + call $runtime.Block.Release + local.get $$t28.0.0 + call $runtime.Block.Release + local.get $$t29.0 + call $runtime.Block.Release +) ;;runtime.mapNext + +(func $$runtime.mapNode.$array1.underlying.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 6 + call_indirect (type $$onFree) + local.get $$ptr + i32.const 16 + i32.add + i32.const 6 + call_indirect (type $$onFree) +) ;;$runtime.mapNode.$array1.underlying.$$onFree + +(func $$runtime.mapNode.$slice.append (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $x.3 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (param $y.3 i32) (result i32 i32 i32 i32) + (local $item.0.0.0 i32) + (local $item.0.0.1 i32) + (local $item.0.1 i32) + (local $item.0.2 i32) + (local $item.1.0.0 i32) + (local $item.1.0.1 i32) + (local $item.1.1 i32) + (local $item.1.2 i32) + (local $x_len i32) + (local $y_len i32) + (local $new_len i32) + (local $src i32) + (local $dest i32) + (local $new_cap i32) + local.get $x.2 + local.set $x_len + local.get $y.2 + local.set $y_len + local.get $x_len + local.get $y_len + i32.add + local.set $new_len + local.get $new_len + local.get $x.3 + i32.le_u + if (result i32 i32 i32 i32) + local.get $x.0 + call $runtime.Block.Retain + local.get $x.1 + local.get $new_len + local.get $x.3 + local.get $y.1 + local.set $src + local.get $x.1 + i32.const 32 + local.get $x_len + i32.mul + i32.add + local.set $dest + block $block1 + loop $loop1 + local.get $y_len + i32.eqz + if + br $block1 + else + end + local.get $src + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=4 align=4 + local.get $src + i32.load offset=8 align=4 + local.get $src + i32.load offset=12 align=4 + local.get $src + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=20 align=4 + local.get $src + i32.load offset=24 align=4 + local.get $src + i32.load offset=28 align=4 + local.set $item.1.2 + local.set $item.1.1 + local.set $item.1.0.1 + local.get $item.1.0.0 + call $runtime.Block.Release + local.set $item.1.0.0 + local.set $item.0.2 + local.set $item.0.1 + local.set $item.0.0.1 + local.get $item.0.0.0 + call $runtime.Block.Release + local.set $item.0.0.0 + local.get $dest + local.get $item.0.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $dest + local.get $item.0.0.1 + i32.store offset=4 align=4 + local.get $dest + local.get $item.0.1 + i32.store offset=8 align=4 + local.get $dest + local.get $item.0.2 + i32.store offset=12 align=4 + local.get $dest + local.get $item.1.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $dest + local.get $item.1.0.1 + i32.store offset=20 align=4 + local.get $dest + local.get $item.1.1 + i32.store offset=24 align=4 + local.get $dest + local.get $item.1.2 + i32.store offset=28 align=4 + local.get $src + i32.const 32 + i32.add + local.set $src + local.get $dest + i32.const 32 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop1 + end ;;loop1 + end ;;block1 + else + local.get $new_len + i32.const 2 + i32.mul + local.set $new_cap + local.get $new_cap + i32.const 32 + i32.mul + i32.const 16 + i32.add + call $runtime.HeapAlloc + local.get $new_cap + i32.const 7 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + call $runtime.DupI32 + local.set $dest + local.get $new_len + local.get $new_cap + local.get $x.1 + local.set $src + block $block2 + loop $loop2 + local.get $x_len + i32.eqz + if + br $block2 + else + end + local.get $src + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=4 align=4 + local.get $src + i32.load offset=8 align=4 + local.get $src + i32.load offset=12 align=4 + local.get $src + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=20 align=4 + local.get $src + i32.load offset=24 align=4 + local.get $src + i32.load offset=28 align=4 + local.set $item.1.2 + local.set $item.1.1 + local.set $item.1.0.1 + local.get $item.1.0.0 + call $runtime.Block.Release + local.set $item.1.0.0 + local.set $item.0.2 + local.set $item.0.1 + local.set $item.0.0.1 + local.get $item.0.0.0 + call $runtime.Block.Release + local.set $item.0.0.0 + local.get $dest + local.get $item.0.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $dest + local.get $item.0.0.1 + i32.store offset=4 align=4 + local.get $dest + local.get $item.0.1 + i32.store offset=8 align=4 + local.get $dest + local.get $item.0.2 + i32.store offset=12 align=4 + local.get $dest + local.get $item.1.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $dest + local.get $item.1.0.1 + i32.store offset=20 align=4 + local.get $dest + local.get $item.1.1 + i32.store offset=24 align=4 + local.get $dest + local.get $item.1.2 + i32.store offset=28 align=4 + local.get $src + i32.const 32 + i32.add + local.set $src + local.get $dest + i32.const 32 + i32.add + local.set $dest + local.get $x_len + i32.const 1 + i32.sub + local.set $x_len + br $loop2 + end ;;loop2 + end ;;block2 + local.get $y.1 + local.set $src + block $block3 + loop $loop3 + local.get $y_len + i32.eqz + if + br $block3 + else + end + local.get $src + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=4 align=4 + local.get $src + i32.load offset=8 align=4 + local.get $src + i32.load offset=12 align=4 + local.get $src + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $src + i32.load offset=20 align=4 + local.get $src + i32.load offset=24 align=4 + local.get $src + i32.load offset=28 align=4 + local.set $item.1.2 + local.set $item.1.1 + local.set $item.1.0.1 + local.get $item.1.0.0 + call $runtime.Block.Release + local.set $item.1.0.0 + local.set $item.0.2 + local.set $item.0.1 + local.set $item.0.0.1 + local.get $item.0.0.0 + call $runtime.Block.Release + local.set $item.0.0.0 + local.get $dest + local.get $item.0.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $dest + local.get $item.0.0.1 + i32.store offset=4 align=4 + local.get $dest + local.get $item.0.1 + i32.store offset=8 align=4 + local.get $dest + local.get $item.0.2 + i32.store offset=12 align=4 + local.get $dest + local.get $item.1.0.0 + call $runtime.Block.Retain + local.get $dest + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $dest + local.get $item.1.0.1 + i32.store offset=20 align=4 + local.get $dest + local.get $item.1.1 + i32.store offset=24 align=4 + local.get $dest + local.get $item.1.2 + i32.store offset=28 align=4 + local.get $src + i32.const 32 + i32.add + local.set $src + local.get $dest + i32.const 32 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop3 + end ;;loop3 + end ;;block3 + end + local.get $item.1.0.0 + call $runtime.Block.Release + local.get $item.0.0.0 + call $runtime.Block.Release +) ;;$runtime.mapNode.$slice.append + +(func $runtime.mapUpdate (param $m.0 i32) (param $m.1 i32) (param $k.0.0 i32) (param $k.0.1 i32) (param $k.1 i32) (param $k.2 i32) (param $v.0.0 i32) (param $v.0.1 i32) (param $v.1 i32) (param $v.2 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t3.2 i32) + (local $$t3.3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t9.0.0.0 i32) + (local $$t9.0.0.1 i32) + (local $$t9.0.1 i32) + (local $$t9.0.2 i32) + (local $$t9.1.0.0 i32) + (local $$t9.1.0.1 i32) + (local $$t9.1.1 i32) + (local $$t9.1.2 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11.0.0 i32) + (local $$t11.0.1 i32) + (local $$t11.1 i32) + (local $$t11.2 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14.0 i32) + (local $$t14.1 i32) + (local $$t15.0 i32) + (local $$t15.1 i32) + (local $$t16.0 i32) + (local $$t16.1 i32) + (local $$t16.2 i32) + (local $$t16.3 i32) + (local $$t17.0 i32) + (local $$t17.1 i32) + (local $$t18.0 i32) + (local $$t18.1 i32) + (local $$t19.0 i32) + (local $$t19.1 i32) + (local $$t20.0.0.0 i32) + (local $$t20.0.0.1 i32) + (local $$t20.0.1 i32) + (local $$t20.0.2 i32) + (local $$t20.1.0.0 i32) + (local $$t20.1.0.1 i32) + (local $$t20.1.1 i32) + (local $$t20.1.2 i32) + (local $$t21.0 i32) + (local $$t21.1 i32) + (local $$t22.0 i32) + (local $$t22.1 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t23.2 i32) + (local $$t23.3 i32) + (local $$t24.0 i32) + (local $$t24.1 i32) + (local $$t24.2 i32) + (local $$t24.3 i32) + (local $$t25.0 i32) + (local $$t25.1 i32) + (local $$t26.0 i32) + (local $$t26.1 i32) + (local $$t26.2 i32) + (local $$t26.3 i32) + (local $$t27.0 i32) + (local $$t27.1 i32) + (local $$t28.0 i32) + (local $$t28.1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;m == nil:*mapImp + local.get $m.1 + i32.const 0 + i32.eq + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;panic "nil map.":string + i32.const 8263 + i32.const 8 + i32.const 8271 + i32.const 11 + call $$runtime.panic_ + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;local mapNode (n) + i32.const 48 + call $runtime.HeapAlloc + i32.const 1 + i32.const 7 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;*t2 + local.get $$t2.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t2.1 + i32.load offset=4 align=4 + local.get $$t2.1 + i32.load offset=8 align=4 + local.get $$t2.1 + i32.load offset=12 align=4 + local.set $$t3.3 + local.set $$t3.2 + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;len(t3) + local.get $$t3.2 + local.set $$t4 + + ;;jump 3 + br $$Block_2 + + end ;;$Block_2 + ;;phi [2: -1:int, 4: t6] + local.get $$current_block + i32.const 2 + i32.eq + if (result i32) + i32.const -1 + else + local.get $$t5 + end + local.set $$t6 + + i32.const 3 + local.set $$current_block + + ;;t5 + 1:int + local.get $$t6 + i32.const 1 + i32.add + local.set $$t5 + + ;;t6 < t4 + local.get $$t5 + local.get $$t4 + i32.lt_s + local.set $$t7 + + ;;if t7 goto 4 else 5 + local.get $$t7 + if + br $$Block_3 + else + br $$Block_4 + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;&t3[t6] + local.get $$t3.0 + call $runtime.Block.Retain + local.get $$t3.1 + i32.const 32 + local.get $$t5 + i32.mul + i32.add + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;*t8 + local.get $$t8.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t8.1 + i32.load offset=4 align=4 + local.get $$t8.1 + i32.load offset=8 align=4 + local.get $$t8.1 + i32.load offset=12 align=4 + local.get $$t8.1 + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $$t8.1 + i32.load offset=20 align=4 + local.get $$t8.1 + i32.load offset=24 align=4 + local.get $$t8.1 + i32.load offset=28 align=4 + local.set $$t9.1.2 + local.set $$t9.1.1 + local.set $$t9.1.0.1 + local.get $$t9.1.0.0 + call $runtime.Block.Release + local.set $$t9.1.0.0 + local.set $$t9.0.2 + local.set $$t9.0.1 + local.set $$t9.0.0.1 + local.get $$t9.0.0.0 + call $runtime.Block.Release + local.set $$t9.0.0.0 + + ;;*t1 = t9 + local.get $$t1.1 + local.get $$t9.0.0.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t1.1 + local.get $$t9.0.0.1 + i32.store offset=4 align=4 + local.get $$t1.1 + local.get $$t9.0.1 + i32.store offset=8 align=4 + local.get $$t1.1 + local.get $$t9.0.2 + i32.store offset=12 align=4 + local.get $$t1.1 + local.get $$t9.1.0.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $$t1.1 + local.get $$t9.1.0.1 + i32.store offset=20 align=4 + local.get $$t1.1 + local.get $$t9.1.1 + i32.store offset=24 align=4 + local.get $$t1.1 + local.get $$t9.1.2 + i32.store offset=28 align=4 + + ;;&t1.k [#0] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 0 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t10 + local.get $$t10.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t10.1 + i32.load offset=4 align=4 + local.get $$t10.1 + i32.load offset=8 align=4 + local.get $$t10.1 + i32.load offset=12 align=4 + local.set $$t11.2 + local.set $$t11.1 + local.set $$t11.0.1 + local.get $$t11.0.0 + call $runtime.Block.Release + local.set $$t11.0.0 + + ;;Compare(t11, k) + local.get $$t11.0.0 + local.get $$t11.0.1 + local.get $$t11.1 + local.get $$t11.2 + local.get $k.0.0 + local.get $k.0.1 + local.get $k.1 + local.get $k.2 + call $runtime.Compare + local.set $$t12 + + ;;t12 == 0:i32 + local.get $$t12 + i32.const 0 + i32.eq + local.set $$t13 + + ;;if t13 goto 6 else 3 + local.get $$t13 + if + br $$Block_5 + else + i32.const 3 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t14.1 + local.get $$t14.0 + call $runtime.Block.Release + local.set $$t14.0 + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t15.1 + local.get $$t15.0 + call $runtime.Block.Release + local.set $$t15.0 + + ;;*t15 + local.get $$t15.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t15.1 + i32.load offset=4 align=4 + local.get $$t15.1 + i32.load offset=8 align=4 + local.get $$t15.1 + i32.load offset=12 align=4 + local.set $$t16.3 + local.set $$t16.2 + local.set $$t16.1 + local.get $$t16.0 + call $runtime.Block.Release + local.set $$t16.0 + + ;;local mapNode (complit) + i32.const 48 + call $runtime.HeapAlloc + i32.const 1 + i32.const 7 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t17.1 + local.get $$t17.0 + call $runtime.Block.Release + local.set $$t17.0 + + ;;&t17.k [#0] + local.get $$t17.0 + call $runtime.Block.Retain + local.get $$t17.1 + i32.const 0 + i32.add + local.set $$t18.1 + local.get $$t18.0 + call $runtime.Block.Release + local.set $$t18.0 + + ;;&t17.v [#1] + local.get $$t17.0 + call $runtime.Block.Retain + local.get $$t17.1 + i32.const 16 + i32.add + local.set $$t19.1 + local.get $$t19.0 + call $runtime.Block.Release + local.set $$t19.0 + + ;;*t18 = k + local.get $$t18.1 + local.get $k.0.0 + call $runtime.Block.Retain + local.get $$t18.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t18.1 + local.get $k.0.1 + i32.store offset=4 align=4 + local.get $$t18.1 + local.get $k.1 + i32.store offset=8 align=4 + local.get $$t18.1 + local.get $k.2 + i32.store offset=12 align=4 + + ;;*t19 = v + local.get $$t19.1 + local.get $v.0.0 + call $runtime.Block.Retain + local.get $$t19.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t19.1 + local.get $v.0.1 + i32.store offset=4 align=4 + local.get $$t19.1 + local.get $v.1 + i32.store offset=8 align=4 + local.get $$t19.1 + local.get $v.2 + i32.store offset=12 align=4 + + ;;*t17 + local.get $$t17.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t17.1 + i32.load offset=4 align=4 + local.get $$t17.1 + i32.load offset=8 align=4 + local.get $$t17.1 + i32.load offset=12 align=4 + local.get $$t17.1 + i32.load offset=16 align=4 + call $runtime.Block.Retain + local.get $$t17.1 + i32.load offset=20 align=4 + local.get $$t17.1 + i32.load offset=24 align=4 + local.get $$t17.1 + i32.load offset=28 align=4 + local.set $$t20.1.2 + local.set $$t20.1.1 + local.set $$t20.1.0.1 + local.get $$t20.1.0.0 + call $runtime.Block.Release + local.set $$t20.1.0.0 + local.set $$t20.0.2 + local.set $$t20.0.1 + local.set $$t20.0.0.1 + local.get $$t20.0.0.0 + call $runtime.Block.Release + local.set $$t20.0.0.0 + + ;;new [1]mapNode (varargs) + i32.const 48 + call $runtime.HeapAlloc + i32.const 1 + i32.const 14 + i32.const 32 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t21.1 + local.get $$t21.0 + call $runtime.Block.Release + local.set $$t21.0 + + ;;&t21[0:int] + local.get $$t21.0 + call $runtime.Block.Retain + local.get $$t21.1 + i32.const 32 + i32.const 0 + i32.mul + i32.add + local.set $$t22.1 + local.get $$t22.0 + call $runtime.Block.Release + local.set $$t22.0 + + ;;*t22 = t20 + local.get $$t22.1 + local.get $$t20.0.0.0 + call $runtime.Block.Retain + local.get $$t22.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t22.1 + local.get $$t20.0.0.1 + i32.store offset=4 align=4 + local.get $$t22.1 + local.get $$t20.0.1 + i32.store offset=8 align=4 + local.get $$t22.1 + local.get $$t20.0.2 + i32.store offset=12 align=4 + local.get $$t22.1 + local.get $$t20.1.0.0 + call $runtime.Block.Retain + local.get $$t22.1 + i32.load offset=16 align=1 + call $runtime.Block.Release + i32.store offset=16 align=1 + local.get $$t22.1 + local.get $$t20.1.0.1 + i32.store offset=20 align=4 + local.get $$t22.1 + local.get $$t20.1.1 + i32.store offset=24 align=4 + local.get $$t22.1 + local.get $$t20.1.2 + i32.store offset=28 align=4 + + ;;slice t21[:] + local.get $$t21.0 + call $runtime.Block.Retain + local.get $$t21.1 + i32.const 32 + i32.const 0 + i32.mul + i32.add + i32.const 1 + i32.const 0 + i32.sub + i32.const 1 + i32.const 0 + i32.sub + local.set $$t23.3 + local.set $$t23.2 + local.set $$t23.1 + local.get $$t23.0 + call $runtime.Block.Release + local.set $$t23.0 + + ;;append(t16, t23...) + local.get $$t16.0 + local.get $$t16.1 + local.get $$t16.2 + local.get $$t16.3 + local.get $$t23.0 + local.get $$t23.1 + local.get $$t23.2 + local.get $$t23.3 + call $$runtime.mapNode.$slice.append + local.set $$t24.3 + local.set $$t24.2 + local.set $$t24.1 + local.get $$t24.0 + call $runtime.Block.Release + local.set $$t24.0 + + ;;*t14 = t24 + local.get $$t14.1 + local.get $$t24.0 + call $runtime.Block.Retain + local.get $$t14.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t14.1 + local.get $$t24.1 + i32.store offset=4 align=4 + local.get $$t14.1 + local.get $$t24.2 + i32.store offset=8 align=4 + local.get $$t14.1 + local.get $$t24.3 + i32.store offset=12 align=4 + + ;;return + br $$BlockFnBody + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;&m.nodes [#0] + local.get $m.0 + call $runtime.Block.Retain + local.get $m.1 + i32.const 0 + i32.add + local.set $$t25.1 + local.get $$t25.0 + call $runtime.Block.Release + local.set $$t25.0 + + ;;*t25 + local.get $$t25.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t25.1 + i32.load offset=4 align=4 + local.get $$t25.1 + i32.load offset=8 align=4 + local.get $$t25.1 + i32.load offset=12 align=4 + local.set $$t26.3 + local.set $$t26.2 + local.set $$t26.1 + local.get $$t26.0 + call $runtime.Block.Release + local.set $$t26.0 + + ;;&t26[t6] + local.get $$t26.0 + call $runtime.Block.Retain + local.get $$t26.1 + i32.const 32 + local.get $$t5 + i32.mul + i32.add + local.set $$t27.1 + local.get $$t27.0 + call $runtime.Block.Release + local.set $$t27.0 + + ;;&t27.v [#1] + local.get $$t27.0 + call $runtime.Block.Retain + local.get $$t27.1 + i32.const 16 + i32.add + local.set $$t28.1 + local.get $$t28.0 + call $runtime.Block.Release + local.set $$t28.0 + + ;;*t28 = v + local.get $$t28.1 + local.get $v.0.0 + call $runtime.Block.Retain + local.get $$t28.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t28.1 + local.get $v.0.1 + i32.store offset=4 align=4 + local.get $$t28.1 + local.get $v.1 + i32.store offset=8 align=4 + local.get $$t28.1 + local.get $v.2 + i32.store offset=12 align=4 + + ;;return + br $$BlockFnBody + + end ;;$Block_6 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t9.1.0.0 + call $runtime.Block.Release + local.get $$t9.0.0.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t11.0.0 + call $runtime.Block.Release + local.get $$t14.0 + call $runtime.Block.Release + local.get $$t15.0 + call $runtime.Block.Release + local.get $$t16.0 + call $runtime.Block.Release + local.get $$t17.0 + call $runtime.Block.Release + local.get $$t18.0 + call $runtime.Block.Release + local.get $$t19.0 + call $runtime.Block.Release + local.get $$t20.1.0.0 + call $runtime.Block.Release + local.get $$t20.0.0.0 + call $runtime.Block.Release + local.get $$t21.0 + call $runtime.Block.Release + local.get $$t22.0 + call $runtime.Block.Release + local.get $$t23.0 + call $runtime.Block.Release + local.get $$t24.0 + call $runtime.Block.Release + local.get $$t25.0 + call $runtime.Block.Release + local.get $$t26.0 + call $runtime.Block.Release + local.get $$t27.0 + call $runtime.Block.Release + local.get $$t28.0 + call $runtime.Block.Release +) ;;runtime.mapUpdate + +(func $runtime.next_rune (param $iter.0 i32) (param $iter.1 i32) (param $iter.2 i32) (result i32 i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$ret_1 i32) + (local $$ret_2 i32) + (local $$ret_3 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t2 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6.0 i32) + (local $$t6.1 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t9 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11 i32) + (local $$t12 i32) + (local $$t13.0 i32) + (local $$t13.1 i32) + (local $$t14 i32) + (local $$t15 i32) + (local $$t16 i32) + (local $$t17 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20 i32) + (local $$t21.0 i32) + (local $$t21.1 i32) + (local $$t22 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24 i32) + (local $$t25 i32) + (local $$t26 i32) + (local $$t27 i32) + (local $$t28 i32) + (local $$t29 i32) + (local $$t30.0 i32) + (local $$t30.1 i32) + (local $$t31 i32) + (local $$t32 i32) + (local $$t33.0 i32) + (local $$t33.1 i32) + (local $$t34 i32) + (local $$t35 i32) + (local $$t36 i32) + (local $$t37 i32) + (local $$t38 i32) + (local $$t39 i32) + (local $$t40 i32) + (local $$t41.0 i32) + (local $$t41.1 i32) + (local $$t42 i32) + (local $$t43 i32) + (local $$t44.0 i32) + (local $$t44.1 i32) + (local $$t45 i32) + (local $$t46 i32) + (local $$t47 i32) + (local $$t48 i32) + (local $$t49 i32) + (local $$t50 i32) + (local $$t51.0 i32) + (local $$t51.1 i32) + (local $$t52 i32) + (local $$t53 i32) + (local $$t54.0 i32) + (local $$t54.1 i32) + (local $$t55 i32) + (local $$t56 i32) + (local $$t57 i32) + (local $$t58 i32) + (local $$t59 i32) + (local $$t60 i32) + (local $$t61 i32) + (local $$t62 i32) + (local $$t63.0 i32) + (local $$t63.1 i32) + (local $$t64 i32) + (local $$t65 i32) + (local $$t66.0 i32) + (local $$t66.1 i32) + (local $$t67 i32) + (local $$t68 i32) + (local $$t69 i32) + (local $$t70 i32) + (local $$t71 i32) + (local $$t72 i32) + (local $$t73 i32) + (local $$t74.0 i32) + (local $$t74.1 i32) + (local $$t75 i32) + (local $$t76 i32) + (local $$t77 i32) + (local $$t78.0 i32) + (local $$t78.1 i32) + (local $$t79 i32) + (local $$t80 i32) + (local $$t81 i32) + (local $$t82 i32) + (local $$t83 i32) + (local $$t84 i32) + (local $$t85.0 i32) + (local $$t85.1 i32) + (local $$t86 i32) + (local $$t87 i32) + (local $$t88.0 i32) + (local $$t88.1 i32) + (local $$t89 i32) + (local $$t90 i32) + (local $$t91 i32) + (local $$t92 i32) + (local $$t93 i32) + (local $$t94 i32) + (local $$t95 i32) + (local $$t96 i32) + (local $$t97.0 i32) + (local $$t97.1 i32) + (local $$t98 i32) + (local $$t99 i32) + (local $$t100.0 i32) + (local $$t100.1 i32) + (local $$t101 i32) + (local $$t102 i32) + (local $$t103 i32) + (local $$t104 i32) + (local $$t105 i32) + (local $$t106 i32) + (local $$t107 i32) + (local $$t108 i32) + (local $$t109.0 i32) + (local $$t109.1 i32) + (local $$t110 i32) + (local $$t111 i32) + (local $$t112.0 i32) + (local $$t112.1 i32) + (local $$t113 i32) + (local $$t114 i32) + (local $$t115 i32) + (local $$t116 i32) + (local $$t117 i32) + (local $$t118 i32) + (local $$t119 i32) + (local $$t120.0 i32) + (local $$t120.1 i32) + (local $$t121 i32) + (local $$t122 i32) + (local $$t123 i32) + (local $$t124 i32) + (local $$t125.0 i32) + (local $$t125.1 i32) + (local $$t126 i32) + (local $$t127 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;local stringIter (iter) + i32.const 28 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 12 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;*t0 = iter + local.get $$t0.1 + local.get $iter.0 + i32.store offset=0 align=4 + local.get $$t0.1 + local.get $iter.1 + i32.store offset=4 align=4 + local.get $$t0.1 + local.get $iter.2 + i32.store offset=8 align=4 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;*t1 + local.get $$t1.1 + i32.load offset=0 align=4 + local.set $$t2 + + ;;&t0.len [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 4 + i32.add + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;*t3 + local.get $$t3.1 + i32.load offset=0 align=4 + local.set $$t4 + + ;;t2 >= t4 + local.get $$t2 + local.get $$t4 + i32.ge_s + local.set $$t5 + + ;;if t5 goto 1 else 2 + local.get $$t5 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t6.1 + local.get $$t6.0 + call $runtime.Block.Release + local.set $$t6.0 + + ;;*t6 + local.get $$t6.1 + i32.load offset=0 align=4 + local.set $$t7 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;*t8 + local.get $$t8.1 + i32.load offset=0 align=4 + local.set $$t9 + + ;;return false:bool, t7, 0:rune, t9 + i32.const 0 + local.set $$ret_0 + local.get $$t7 + local.set $$ret_1 + i32.const 0 + local.set $$ret_2 + local.get $$t9 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t10 + local.get $$t10.1 + i32.load offset=0 align=4 + local.set $$t11 + + ;;convert u32 <- uint (t11) + local.get $$t11 + local.set $$t12 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t13.1 + local.get $$t13.0 + call $runtime.Block.Release + local.set $$t13.0 + + ;;*t13 + local.get $$t13.1 + i32.load offset=0 align=4 + local.set $$t14 + + ;;convert u32 <- int (t14) + local.get $$t14 + local.set $$t15 + + ;;t12 + t15 + local.get $$t12 + local.get $$t15 + i32.add + local.set $$t16 + + ;;get_u8(t16) + local.get $$t16 + call $runtime.get_u8 + local.set $$t17 + + ;;convert i32 <- u8 (t17) + local.get $$t17 + local.set $$t18 + + ;;t18 & 128:i32 + local.get $$t18 + i32.const 128 + i32.and + local.set $$t19 + + ;;t19 == 0:i32 + local.get $$t19 + i32.const 0 + i32.eq + local.set $$t20 + + ;;if t20 goto 3 else 4 + local.get $$t20 + if + br $$Block_2 + else + br $$Block_3 + end + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t21.1 + local.get $$t21.0 + call $runtime.Block.Release + local.set $$t21.0 + + ;;*t21 + local.get $$t21.1 + i32.load offset=0 align=4 + local.set $$t22 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t23.1 + local.get $$t23.0 + call $runtime.Block.Release + local.set $$t23.0 + + ;;*t23 + local.get $$t23.1 + i32.load offset=0 align=4 + local.set $$t24 + + ;;t24 + 1:int + local.get $$t24 + i32.const 1 + i32.add + local.set $$t25 + + ;;return true:bool, t22, t18, t25 + i32.const 1 + local.set $$ret_0 + local.get $$t22 + local.set $$ret_1 + local.get $$t18 + local.set $$ret_2 + local.get $$t25 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;t18 & 224:i32 + local.get $$t18 + i32.const 224 + i32.and + local.set $$t26 + + ;;t26 == 192:i32 + local.get $$t26 + i32.const 192 + i32.eq + local.set $$t27 + + ;;if t27 goto 5 else 6 + local.get $$t27 + if + br $$Block_4 + else + br $$Block_5 + end + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;t18 & 31:i32 + local.get $$t18 + i32.const 31 + i32.and + local.set $$t28 + + ;;t28 << 6:uint64 + local.get $$t28 + i64.const 6 + i32.wrap_i64 + i32.shl + local.set $$t29 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t30.1 + local.get $$t30.0 + call $runtime.Block.Release + local.set $$t30.0 + + ;;*t30 + local.get $$t30.1 + i32.load offset=0 align=4 + local.set $$t31 + + ;;convert u32 <- uint (t31) + local.get $$t31 + local.set $$t32 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t33.1 + local.get $$t33.0 + call $runtime.Block.Release + local.set $$t33.0 + + ;;*t33 + local.get $$t33.1 + i32.load offset=0 align=4 + local.set $$t34 + + ;;convert u32 <- int (t34) + local.get $$t34 + local.set $$t35 + + ;;t32 + t35 + local.get $$t32 + local.get $$t35 + i32.add + local.set $$t36 + + ;;t36 + 1:u32 + local.get $$t36 + i32.const 1 + i32.add + local.set $$t37 + + ;;get_u8(t37) + local.get $$t37 + call $runtime.get_u8 + local.set $$t38 + + ;;convert i32 <- u8 (t38) + local.get $$t38 + local.set $$t39 + + ;;t39 & 63:i32 + local.get $$t39 + i32.const 63 + i32.and + local.set $$t40 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t41.1 + local.get $$t41.0 + call $runtime.Block.Release + local.set $$t41.0 + + ;;*t41 + local.get $$t41.1 + i32.load offset=0 align=4 + local.set $$t42 + + ;;t29 | t40 + local.get $$t29 + local.get $$t40 + i32.or + local.set $$t43 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t44.1 + local.get $$t44.0 + call $runtime.Block.Release + local.set $$t44.0 + + ;;*t44 + local.get $$t44.1 + i32.load offset=0 align=4 + local.set $$t45 + + ;;t45 + 2:int + local.get $$t45 + i32.const 2 + i32.add + local.set $$t46 + + ;;return true:bool, t42, t43, t46 + i32.const 1 + local.set $$ret_0 + local.get $$t42 + local.set $$ret_1 + local.get $$t43 + local.set $$ret_2 + local.get $$t46 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;t18 & 240:i32 + local.get $$t18 + i32.const 240 + i32.and + local.set $$t47 + + ;;t47 == 224:i32 + local.get $$t47 + i32.const 224 + i32.eq + local.set $$t48 + + ;;if t48 goto 7 else 8 + local.get $$t48 + if + br $$Block_6 + else + br $$Block_7 + end + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;t18 & 15:i32 + local.get $$t18 + i32.const 15 + i32.and + local.set $$t49 + + ;;t49 << 12:uint64 + local.get $$t49 + i64.const 12 + i32.wrap_i64 + i32.shl + local.set $$t50 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t51.1 + local.get $$t51.0 + call $runtime.Block.Release + local.set $$t51.0 + + ;;*t51 + local.get $$t51.1 + i32.load offset=0 align=4 + local.set $$t52 + + ;;convert u32 <- uint (t52) + local.get $$t52 + local.set $$t53 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t54.1 + local.get $$t54.0 + call $runtime.Block.Release + local.set $$t54.0 + + ;;*t54 + local.get $$t54.1 + i32.load offset=0 align=4 + local.set $$t55 + + ;;convert u32 <- int (t55) + local.get $$t55 + local.set $$t56 + + ;;t53 + t56 + local.get $$t53 + local.get $$t56 + i32.add + local.set $$t57 + + ;;t57 + 1:u32 + local.get $$t57 + i32.const 1 + i32.add + local.set $$t58 + + ;;get_u8(t58) + local.get $$t58 + call $runtime.get_u8 + local.set $$t59 + + ;;convert i32 <- u8 (t59) + local.get $$t59 + local.set $$t60 + + ;;t60 & 63:i32 + local.get $$t60 + i32.const 63 + i32.and + local.set $$t61 + + ;;t61 << 6:uint64 + local.get $$t61 + i64.const 6 + i32.wrap_i64 + i32.shl + local.set $$t62 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t63.1 + local.get $$t63.0 + call $runtime.Block.Release + local.set $$t63.0 + + ;;*t63 + local.get $$t63.1 + i32.load offset=0 align=4 + local.set $$t64 + + ;;convert u32 <- uint (t64) + local.get $$t64 + local.set $$t65 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t66.1 + local.get $$t66.0 + call $runtime.Block.Release + local.set $$t66.0 + + ;;*t66 + local.get $$t66.1 + i32.load offset=0 align=4 + local.set $$t67 + + ;;convert u32 <- int (t67) + local.get $$t67 + local.set $$t68 + + ;;t65 + t68 + local.get $$t65 + local.get $$t68 + i32.add + local.set $$t69 + + ;;t69 + 2:u32 + local.get $$t69 + i32.const 2 + i32.add + local.set $$t70 + + ;;get_u8(t70) + local.get $$t70 + call $runtime.get_u8 + local.set $$t71 + + ;;convert i32 <- u8 (t71) + local.get $$t71 + local.set $$t72 + + ;;t72 & 63:i32 + local.get $$t72 + i32.const 63 + i32.and + local.set $$t73 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t74.1 + local.get $$t74.0 + call $runtime.Block.Release + local.set $$t74.0 + + ;;*t74 + local.get $$t74.1 + i32.load offset=0 align=4 + local.set $$t75 + + ;;t50 | t62 + local.get $$t50 + local.get $$t62 + i32.or + local.set $$t76 + + ;;t76 | t73 + local.get $$t76 + local.get $$t73 + i32.or + local.set $$t77 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t78.1 + local.get $$t78.0 + call $runtime.Block.Release + local.set $$t78.0 + + ;;*t78 + local.get $$t78.1 + i32.load offset=0 align=4 + local.set $$t79 + + ;;t79 + 3:int + local.get $$t79 + i32.const 3 + i32.add + local.set $$t80 + + ;;return true:bool, t75, t77, t80 + i32.const 1 + local.set $$ret_0 + local.get $$t75 + local.set $$ret_1 + local.get $$t77 + local.set $$ret_2 + local.get $$t80 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;t18 & 248:i32 + local.get $$t18 + i32.const 248 + i32.and + local.set $$t81 + + ;;t81 == 240:i32 + local.get $$t81 + i32.const 240 + i32.eq + local.set $$t82 + + ;;if t82 goto 9 else 10 + local.get $$t82 + if + br $$Block_8 + else + br $$Block_9 + end + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;t18 & 7:i32 + local.get $$t18 + i32.const 7 + i32.and + local.set $$t83 + + ;;t83 << 18:uint64 + local.get $$t83 + i64.const 18 + i32.wrap_i64 + i32.shl + local.set $$t84 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t85.1 + local.get $$t85.0 + call $runtime.Block.Release + local.set $$t85.0 + + ;;*t85 + local.get $$t85.1 + i32.load offset=0 align=4 + local.set $$t86 + + ;;convert u32 <- uint (t86) + local.get $$t86 + local.set $$t87 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t88.1 + local.get $$t88.0 + call $runtime.Block.Release + local.set $$t88.0 + + ;;*t88 + local.get $$t88.1 + i32.load offset=0 align=4 + local.set $$t89 + + ;;convert u32 <- int (t89) + local.get $$t89 + local.set $$t90 + + ;;t87 + t90 + local.get $$t87 + local.get $$t90 + i32.add + local.set $$t91 + + ;;t91 + 1:u32 + local.get $$t91 + i32.const 1 + i32.add + local.set $$t92 + + ;;get_u8(t92) + local.get $$t92 + call $runtime.get_u8 + local.set $$t93 + + ;;convert i32 <- u8 (t93) + local.get $$t93 + local.set $$t94 + + ;;t94 & 63:i32 + local.get $$t94 + i32.const 63 + i32.and + local.set $$t95 + + ;;t95 << 12:uint64 + local.get $$t95 + i64.const 12 + i32.wrap_i64 + i32.shl + local.set $$t96 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t97.1 + local.get $$t97.0 + call $runtime.Block.Release + local.set $$t97.0 + + ;;*t97 + local.get $$t97.1 + i32.load offset=0 align=4 + local.set $$t98 + + ;;convert u32 <- uint (t98) + local.get $$t98 + local.set $$t99 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t100.1 + local.get $$t100.0 + call $runtime.Block.Release + local.set $$t100.0 + + ;;*t100 + local.get $$t100.1 + i32.load offset=0 align=4 + local.set $$t101 + + ;;convert u32 <- int (t101) + local.get $$t101 + local.set $$t102 + + ;;t99 + t102 + local.get $$t99 + local.get $$t102 + i32.add + local.set $$t103 + + ;;t103 + 2:u32 + local.get $$t103 + i32.const 2 + i32.add + local.set $$t104 + + ;;get_u8(t104) + local.get $$t104 + call $runtime.get_u8 + local.set $$t105 + + ;;convert i32 <- u8 (t105) + local.get $$t105 + local.set $$t106 + + ;;t106 & 63:i32 + local.get $$t106 + i32.const 63 + i32.and + local.set $$t107 + + ;;t107 << 6:uint64 + local.get $$t107 + i64.const 6 + i32.wrap_i64 + i32.shl + local.set $$t108 + + ;;&t0.ptr [#0] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 0 + i32.add + local.set $$t109.1 + local.get $$t109.0 + call $runtime.Block.Release + local.set $$t109.0 + + ;;*t109 + local.get $$t109.1 + i32.load offset=0 align=4 + local.set $$t110 + + ;;convert u32 <- uint (t110) + local.get $$t110 + local.set $$t111 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t112.1 + local.get $$t112.0 + call $runtime.Block.Release + local.set $$t112.0 + + ;;*t112 + local.get $$t112.1 + i32.load offset=0 align=4 + local.set $$t113 + + ;;convert u32 <- int (t113) + local.get $$t113 + local.set $$t114 + + ;;t111 + t114 + local.get $$t111 + local.get $$t114 + i32.add + local.set $$t115 + + ;;t115 + 3:u32 + local.get $$t115 + i32.const 3 + i32.add + local.set $$t116 + + ;;get_u8(t116) + local.get $$t116 + call $runtime.get_u8 + local.set $$t117 + + ;;convert i32 <- u8 (t117) + local.get $$t117 + local.set $$t118 + + ;;t118 & 63:i32 + local.get $$t118 + i32.const 63 + i32.and + local.set $$t119 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t120.1 + local.get $$t120.0 + call $runtime.Block.Release + local.set $$t120.0 + + ;;*t120 + local.get $$t120.1 + i32.load offset=0 align=4 + local.set $$t121 + + ;;t84 | t96 + local.get $$t84 + local.get $$t96 + i32.or + local.set $$t122 + + ;;t122 | t108 + local.get $$t122 + local.get $$t108 + i32.or + local.set $$t123 + + ;;t123 | t119 + local.get $$t123 + local.get $$t119 + i32.or + local.set $$t124 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t125.1 + local.get $$t125.0 + call $runtime.Block.Release + local.set $$t125.0 + + ;;*t125 + local.get $$t125.1 + i32.load offset=0 align=4 + local.set $$t126 + + ;;t126 + 4:int + local.get $$t126 + i32.const 4 + i32.add + local.set $$t127 + + ;;return true:bool, t121, t124, t127 + i32.const 1 + local.set $$ret_0 + local.get $$t121 + local.set $$ret_1 + local.get $$t124 + local.set $$ret_2 + local.get $$t127 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_9 + i32.const 10 + local.set $$current_block + + ;;return false:bool, 0:int, 0:rune, 0:int + i32.const 0 + local.set $$ret_0 + i32.const 0 + local.set $$ret_1 + i32.const 0 + local.set $$ret_2 + i32.const 0 + local.set $$ret_3 + br $$BlockFnBody + + end ;;$Block_10 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$ret_1 + local.get $$ret_2 + local.get $$ret_3 + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t6.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t13.0 + call $runtime.Block.Release + local.get $$t21.0 + call $runtime.Block.Release + local.get $$t23.0 + call $runtime.Block.Release + local.get $$t30.0 + call $runtime.Block.Release + local.get $$t33.0 + call $runtime.Block.Release + local.get $$t41.0 + call $runtime.Block.Release + local.get $$t44.0 + call $runtime.Block.Release + local.get $$t51.0 + call $runtime.Block.Release + local.get $$t54.0 + call $runtime.Block.Release + local.get $$t63.0 + call $runtime.Block.Release + local.get $$t66.0 + call $runtime.Block.Release + local.get $$t74.0 + call $runtime.Block.Release + local.get $$t78.0 + call $runtime.Block.Release + local.get $$t85.0 + call $runtime.Block.Release + local.get $$t88.0 + call $runtime.Block.Release + local.get $$t97.0 + call $runtime.Block.Release + local.get $$t100.0 + call $runtime.Block.Release + local.get $$t109.0 + call $runtime.Block.Release + local.get $$t112.0 + call $runtime.Block.Release + local.get $$t120.0 + call $runtime.Block.Release + local.get $$t125.0 + call $runtime.Block.Release +) ;;runtime.next_rune + +(func $$runtime.panic_ (param $msg_ptr i32) (param $msg_len i32) (param $pos_msg_ptr i32) (param $pos_msg_len i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;waPrintString("panic: ":string) + i32.const 0 + i32.const 8282 + i32.const 7 + call $$runtime.waPrintString + + ;;waPuts(msg_ptr, msg_len) + local.get $msg_ptr + local.get $msg_len + call $$runtime.waPuts + + ;;waPrintString(" (":string) + i32.const 0 + i32.const 8246 + i32.const 2 + call $$runtime.waPrintString + + ;;waPuts(pos_msg_ptr, pos_msg_len) + local.get $pos_msg_ptr + local.get $pos_msg_len + call $$runtime.waPuts + + ;;waPrintRune(41:i32) + i32.const 41 + call $$runtime.waPrintRune + + ;;waPrintRune(10:i32) + i32.const 10 + call $$runtime.waPrintRune + + ;;procExit(1:i32) + i32.const 1 + call $$runtime.procExit + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.panic_ + +(func $runtime.printBool (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;if v goto 1 else 3 + local.get $v + if + br $$Block_0 + else + br $$Block_2 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;printString("true":string) + i32.const 0 + i32.const 8289 + i32.const 4 + call $runtime.printString + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;printString("false":string) + i32.const 0 + i32.const 8293 + i32.const 5 + call $runtime.printString + + ;;jump 2 + i32.const 2 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_3 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printBool + +(func $runtime.printBytes (param $b.0 i32) (param $b.1 i32) (param $b.2 i32) (param $b.3 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;len(b) + local.get $b.2 + local.set $$t0 + + ;;t0 > 0:int + local.get $$t0 + i32.const 0 + i32.gt_s + local.set $$t1 + + ;;if t1 goto 1 else 2 + local.get $$t1 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;refToPtr_byteSlice(b) + local.get $b.0 + local.get $b.1 + local.get $b.2 + local.get $b.3 + call $runtime.refToPtr_byteSlice + local.set $$t2 + + ;;convert i32 <- int (t0) + local.get $$t0 + local.set $$t3 + + ;;waPuts(t2, t3) + local.get $$t2 + local.get $$t3 + call $$runtime.waPuts + + ;;return + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printBytes + +(func $runtime.printF64 (param $v f64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 f64) + (local $$t2 i32) + (local $$t3 f64) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7.0 i32) + (local $$t7.1 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t9 i32) + (local $$t10 i32) + (local $$t11 i32) + (local $$t12 f64) + (local $$t13 i32) + (local $$t14 f64) + (local $$t15 f64) + (local $$t16 f64) + (local $$t17 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20 i32) + (local $$t21.0 i32) + (local $$t21.1 i32) + (local $$t22 f64) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24 i32) + (local $$t25 i32) + (local $$t26 f64) + (local $$t27 f64) + (local $$t28 i32) + (local $$t29 i32) + (local $$t30 f64) + (local $$t31 f64) + (local $$t32 i32) + (local $$t33 f64) + (local $$t34 f64) + (local $$t35 i32) + (local $$t36 i32) + (local $$t37 i32) + (local $$t38 i32) + (local $$t39 f64) + (local $$t40 i32) + (local $$t41 i32) + (local $$t42 i32) + (local $$t43.0 i32) + (local $$t43.1 i32) + (local $$t44 i32) + (local $$t45 i32) + (local $$t46 f64) + (local $$t47 f64) + (local $$t48 f64) + (local $$t49 i32) + (local $$t50.0 i32) + (local $$t50.1 i32) + (local $$t51.0 i32) + (local $$t51.1 i32) + (local $$t52 i32) + (local $$t53.0 i32) + (local $$t53.1 i32) + (local $$t54.0 i32) + (local $$t54.1 i32) + (local $$t55.0 i32) + (local $$t55.1 i32) + (local $$t56 i32) + (local $$t57 i32) + (local $$t58 i32) + (local $$t59.0 i32) + (local $$t59.1 i32) + (local $$t60 i32) + (local $$t61.0 i32) + (local $$t61.1 i32) + (local $$t62 i32) + (local $$t63 i32) + (local $$t64 i32) + (local $$t65.0 i32) + (local $$t65.1 i32) + (local $$t66 i32) + (local $$t67 i32) + (local $$t68 i32) + (local $$t69 i32) + (local $$t70.0 i32) + (local $$t70.1 i32) + (local $$t71 i32) + (local $$t72 i32) + (local $$t73 i32) + (local $$t74.0 i32) + (local $$t74.1 i32) + (local $$t74.2 i32) + (local $$t74.3 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_29 + block $$Block_28 + block $$Block_27 + block $$Block_26 + block $$Block_25 + block $$Block_24 + block $$Block_23 + block $$Block_22 + block $$Block_21 + block $$Block_20 + block $$Block_19 + block $$Block_18 + block $$Block_17 + block $$Block_16 + block $$Block_15 + block $$Block_14 + block $$Block_13 + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;v != v + local.get $v + local.get $v + f64.eq + i32.eqz + local.set $$t0 + + ;;if t0 goto 1 else 3 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_2 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;printString("NaN":string) + i32.const 0 + i32.const 8298 + i32.const 3 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;printString("+Inf":string) + i32.const 0 + i32.const 8301 + i32.const 4 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;v + v + local.get $v + local.get $v + f64.add + local.set $$t1 + + ;;t3 == v + local.get $$t1 + local.get $v + f64.eq + local.set $$t2 + + ;;if t4 goto 6 else 7 + local.get $$t2 + if + br $$Block_5 + else + br $$Block_6 + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;printString("-Inf":string) + i32.const 0 + i32.const 8305 + i32.const 4 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;v + v + local.get $v + local.get $v + f64.add + local.set $$t3 + + ;;t6 == v + local.get $$t3 + local.get $v + f64.eq + local.set $$t4 + + ;;if t7 goto 9 else 10 + local.get $$t4 + if + br $$Block_8 + else + br $$Block_9 + end + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;v > 0:f64 + local.get $v + f64.const 0 + f64.gt + local.set $$t5 + + ;;jump 7 + br $$Block_6 + + end ;;$Block_6 + ;;phi [3: false:bool, 6: t8] #&& + local.get $$current_block + i32.const 3 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t5 + end + local.set $$t6 + + i32.const 7 + local.set $$current_block + + ;;if t9 goto 2 else 5 + local.get $$t6 + if + i32.const 2 + local.set $$block_selector + br $$BlockDisp + else + i32.const 5 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;new [14]byte (buf) + i32.const 30 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 14 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t7.1 + local.get $$t7.0 + call $runtime.Block.Release + local.set $$t7.0 + + ;;&t10[0:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;*t11 = 43:byte + local.get $$t8.1 + i32.const 43 + i32.store8 offset=0 align=1 + + ;;v == 0:f64 + local.get $v + f64.const 0 + f64.eq + local.set $$t9 + + ;;if t12 goto 11 else 13 + local.get $$t9 + if + br $$Block_10 + else + br $$Block_12 + end + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;v < 0:f64 + local.get $v + f64.const 0 + f64.lt + local.set $$t10 + + ;;jump 10 + br $$Block_9 + + end ;;$Block_9 + ;;phi [5: false:bool, 9: t13] #&& + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t10 + end + local.set $$t11 + + i32.const 10 + local.set $$current_block + + ;;if t14 goto 4 else 8 + local.get $$t11 + if + i32.const 4 + local.set $$block_selector + br $$BlockDisp + else + i32.const 8 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_10 + i32.const 11 + local.set $$current_block + + ;;1:f64 / v + f64.const 1 + local.get $v + f64.div + local.set $$t12 + + ;;t15 < 0:f64 + local.get $$t12 + f64.const 0 + f64.lt + local.set $$t13 + + ;;if t16 goto 14 else 12 + local.get $$t13 + if + br $$Block_13 + else + br $$Block_11 + end + + end ;;$Block_11 + ;;phi [11: v, 22: t35, 14: v, 24: t41] #v + local.get $$current_block + i32.const 11 + i32.eq + if (result f64) + local.get $v + else + local.get $$current_block + i32.const 22 + i32.eq + if (result f64) + local.get $$t14 + else + local.get $$current_block + i32.const 14 + i32.eq + if (result f64) + local.get $v + else + local.get $$t15 + end + end + end + local.set $$t16 + + ;;phi [11: 0:int, 22: t31, 14: 0:int, 24: t40] #e + local.get $$current_block + i32.const 11 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$current_block + i32.const 22 + i32.eq + if (result i32) + local.get $$t17 + else + local.get $$current_block + i32.const 14 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t18 + end + end + end + local.set $$t19 + + i32.const 12 + local.set $$current_block + + ;;jump 27 + br $$Block_26 + + end ;;$Block_12 + i32.const 13 + local.set $$current_block + + ;;v < 0:f64 + local.get $v + f64.const 0 + f64.lt + local.set $$t20 + + ;;if t19 goto 15 else 17 + local.get $$t20 + if + br $$Block_14 + else + br $$Block_16 + end + + end ;;$Block_13 + i32.const 14 + local.set $$current_block + + ;;&t10[0:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t21.1 + local.get $$t21.0 + call $runtime.Block.Release + local.set $$t21.0 + + ;;*t20 = 45:byte + local.get $$t21.1 + i32.const 45 + i32.store8 offset=0 align=1 + + ;;jump 12 + i32.const 12 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_14 + i32.const 15 + local.set $$current_block + + ;;-v + f64.const 0 + local.get $v + f64.sub + local.set $$t22 + + ;;&t10[0:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t23.1 + local.get $$t23.0 + call $runtime.Block.Release + local.set $$t23.0 + + ;;*t22 = 45:byte + local.get $$t23.1 + i32.const 45 + i32.store8 offset=0 align=1 + + ;;jump 17 + br $$Block_16 + + end ;;$Block_15 + i32.const 16 + local.set $$current_block + + ;;t26 + 1:int + local.get $$t24 + i32.const 1 + i32.add + local.set $$t25 + + ;;t25 / 10:f64 + local.get $$t26 + f64.const 10 + f64.div + local.set $$t27 + + ;;jump 17 + br $$Block_16 + + end ;;$Block_16 + ;;phi [13: v, 16: t24, 15: t21] #v + local.get $$current_block + i32.const 13 + i32.eq + if (result f64) + local.get $v + else + local.get $$current_block + i32.const 16 + i32.eq + if (result f64) + local.get $$t27 + else + local.get $$t22 + end + end + local.set $$t26 + + ;;phi [13: 0:int, 16: t23, 15: 0:int] #e + local.get $$current_block + i32.const 13 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$current_block + i32.const 16 + i32.eq + if (result i32) + local.get $$t25 + else + i32.const 0 + end + end + local.set $$t24 + + i32.const 17 + local.set $$current_block + + ;;t25 >= 10:f64 + local.get $$t26 + f64.const 10 + f64.ge + local.set $$t28 + + ;;if t27 goto 16 else 20 + local.get $$t28 + if + i32.const 16 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_19 + end + + end ;;$Block_17 + i32.const 18 + local.set $$current_block + + ;;t31 - 1:int + local.get $$t17 + i32.const 1 + i32.sub + local.set $$t29 + + ;;t30 * 10:f64 + local.get $$t30 + f64.const 10 + f64.mul + local.set $$t31 + + ;;jump 20 + br $$Block_19 + + end ;;$Block_18 + i32.const 19 + local.set $$current_block + + ;;jump 23 + br $$Block_22 + + end ;;$Block_19 + ;;phi [17: t25, 18: t29] #v + local.get $$current_block + i32.const 17 + i32.eq + if (result f64) + local.get $$t26 + else + local.get $$t31 + end + local.set $$t30 + + ;;phi [17: t26, 18: t28] #e + local.get $$current_block + i32.const 17 + i32.eq + if (result i32) + local.get $$t24 + else + local.get $$t29 + end + local.set $$t17 + + i32.const 20 + local.set $$current_block + + ;;t30 < 1:f64 + local.get $$t30 + f64.const 1 + f64.lt + local.set $$t32 + + ;;if t32 goto 18 else 19 + local.get $$t32 + if + i32.const 18 + local.set $$block_selector + br $$BlockDisp + else + i32.const 19 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_20 + i32.const 21 + local.set $$current_block + + ;;t37 / 10:float64 + local.get $$t33 + f64.const 10 + f64.div + local.set $$t34 + + ;;t38 + 1:int + local.get $$t35 + i32.const 1 + i32.add + local.set $$t36 + + ;;jump 23 + br $$Block_22 + + end ;;$Block_21 + i32.const 22 + local.set $$current_block + + ;;t30 + t37 + local.get $$t30 + local.get $$t33 + f64.add + local.set $$t14 + + ;;t35 >= 10:f64 + local.get $$t14 + f64.const 10 + f64.ge + local.set $$t37 + + ;;if t36 goto 24 else 12 + local.get $$t37 + if + br $$Block_23 + else + i32.const 12 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_22 + ;;phi [19: 5:float64, 21: t33] #h + local.get $$current_block + i32.const 19 + i32.eq + if (result f64) + f64.const 5 + else + local.get $$t34 + end + local.set $$t33 + + ;;phi [19: 0:int, 21: t34] #i + local.get $$current_block + i32.const 19 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t36 + end + local.set $$t35 + + i32.const 23 + local.set $$current_block + + ;;t38 < 7:int + local.get $$t35 + i32.const 7 + i32.lt_s + local.set $$t38 + + ;;if t39 goto 21 else 22 + local.get $$t38 + if + i32.const 21 + local.set $$block_selector + br $$BlockDisp + else + i32.const 22 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_23 + i32.const 24 + local.set $$current_block + + ;;t31 + 1:int + local.get $$t17 + i32.const 1 + i32.add + local.set $$t18 + + ;;t35 / 10:f64 + local.get $$t14 + f64.const 10 + f64.div + local.set $$t15 + + ;;jump 12 + i32.const 12 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_24 + i32.const 25 + local.set $$current_block + + ;;convert int <- f64 (t58) + local.get $$t39 + i32.trunc_f64_s + local.set $$t40 + + ;;t59 + 2:int + local.get $$t41 + i32.const 2 + i32.add + local.set $$t42 + + ;;&t10[t43] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + local.get $$t42 + i32.mul + i32.add + local.set $$t43.1 + local.get $$t43.0 + call $runtime.Block.Release + local.set $$t43.0 + + ;;t42 + 48:int + local.get $$t40 + i32.const 48 + i32.add + local.set $$t44 + + ;;convert byte <- int (t45) + local.get $$t44 + i32.const 255 + i32.and + local.set $$t45 + + ;;*t44 = t46 + local.get $$t43.1 + local.get $$t45 + i32.store8 offset=0 align=1 + + ;;convert float64 <- int (t42) + local.get $$t40 + f64.convert_i32_s + local.set $$t46 + + ;;t58 - t47 + local.get $$t39 + local.get $$t46 + f64.sub + local.set $$t47 + + ;;t48 * 10:f64 + local.get $$t47 + f64.const 10 + f64.mul + local.set $$t48 + + ;;t59 + 1:int + local.get $$t41 + i32.const 1 + i32.add + local.set $$t49 + + ;;jump 27 + br $$Block_26 + + end ;;$Block_25 + i32.const 26 + local.set $$current_block + + ;;&t10[1:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t50.1 + local.get $$t50.0 + call $runtime.Block.Release + local.set $$t50.0 + + ;;&t10[2:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t51.1 + local.get $$t51.0 + call $runtime.Block.Release + local.set $$t51.0 + + ;;*t52 + local.get $$t51.1 + i32.load8_u offset=0 align=1 + local.set $$t52 + + ;;*t51 = t53 + local.get $$t50.1 + local.get $$t52 + i32.store8 offset=0 align=1 + + ;;&t10[2:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t53.1 + local.get $$t53.0 + call $runtime.Block.Release + local.set $$t53.0 + + ;;*t54 = 46:byte + local.get $$t53.1 + i32.const 46 + i32.store8 offset=0 align=1 + + ;;&t10[9:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 9 + i32.mul + i32.add + local.set $$t54.1 + local.get $$t54.0 + call $runtime.Block.Release + local.set $$t54.0 + + ;;*t55 = 101:byte + local.get $$t54.1 + i32.const 101 + i32.store8 offset=0 align=1 + + ;;&t10[10:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 10 + i32.mul + i32.add + local.set $$t55.1 + local.get $$t55.0 + call $runtime.Block.Release + local.set $$t55.0 + + ;;*t56 = 43:byte + local.get $$t55.1 + i32.const 43 + i32.store8 offset=0 align=1 + + ;;t18 < 0:int + local.get $$t19 + i32.const 0 + i32.lt_s + local.set $$t56 + + ;;if t57 goto 28 else 29 + local.get $$t56 + if + br $$Block_27 + else + br $$Block_28 + end + + end ;;$Block_26 + ;;phi [12: t17, 25: t49] #v + local.get $$current_block + i32.const 12 + i32.eq + if (result f64) + local.get $$t16 + else + local.get $$t48 + end + local.set $$t39 + + ;;phi [12: 0:int, 25: t50] #i + local.get $$current_block + i32.const 12 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t49 + end + local.set $$t41 + + i32.const 27 + local.set $$current_block + + ;;t59 < 7:int + local.get $$t41 + i32.const 7 + i32.lt_s + local.set $$t57 + + ;;if t60 goto 25 else 26 + local.get $$t57 + if + i32.const 25 + local.set $$block_selector + br $$BlockDisp + else + i32.const 26 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_27 + i32.const 28 + local.set $$current_block + + ;;-t18 + i32.const 0 + local.get $$t19 + i32.sub + local.set $$t58 + + ;;&t10[10:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 10 + i32.mul + i32.add + local.set $$t59.1 + local.get $$t59.0 + call $runtime.Block.Release + local.set $$t59.0 + + ;;*t62 = 45:byte + local.get $$t59.1 + i32.const 45 + i32.store8 offset=0 align=1 + + ;;jump 29 + br $$Block_28 + + end ;;$Block_28 + ;;phi [26: t18, 28: t61] #e + local.get $$current_block + i32.const 26 + i32.eq + if (result i32) + local.get $$t19 + else + local.get $$t58 + end + local.set $$t60 + + i32.const 29 + local.set $$current_block + + ;;&t10[11:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 11 + i32.mul + i32.add + local.set $$t61.1 + local.get $$t61.0 + call $runtime.Block.Release + local.set $$t61.0 + + ;;t63 / 100:int + local.get $$t60 + i32.const 100 + i32.div_s + local.set $$t62 + + ;;convert byte <- int (t65) + local.get $$t62 + i32.const 255 + i32.and + local.set $$t63 + + ;;t66 + 48:byte + local.get $$t63 + i32.const 48 + i32.add + i32.const 255 + i32.and + local.set $$t64 + + ;;*t64 = t67 + local.get $$t61.1 + local.get $$t64 + i32.store8 offset=0 align=1 + + ;;&t10[12:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 12 + i32.mul + i32.add + local.set $$t65.1 + local.get $$t65.0 + call $runtime.Block.Release + local.set $$t65.0 + + ;;t63 / 10:int + local.get $$t60 + i32.const 10 + i32.div_s + local.set $$t66 + + ;;convert byte <- int (t69) + local.get $$t66 + i32.const 255 + i32.and + local.set $$t67 + + ;;t70 % 10:byte + local.get $$t67 + i32.const 10 + i32.rem_u + local.set $$t68 + + ;;t71 + 48:byte + local.get $$t68 + i32.const 48 + i32.add + i32.const 255 + i32.and + local.set $$t69 + + ;;*t68 = t72 + local.get $$t65.1 + local.get $$t69 + i32.store8 offset=0 align=1 + + ;;&t10[13:int] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 13 + i32.mul + i32.add + local.set $$t70.1 + local.get $$t70.0 + call $runtime.Block.Release + local.set $$t70.0 + + ;;t63 % 10:int + local.get $$t60 + i32.const 10 + i32.rem_s + local.set $$t71 + + ;;convert byte <- int (t74) + local.get $$t71 + i32.const 255 + i32.and + local.set $$t72 + + ;;t75 + 48:byte + local.get $$t72 + i32.const 48 + i32.add + i32.const 255 + i32.and + local.set $$t73 + + ;;*t73 = t76 + local.get $$t70.1 + local.get $$t73 + i32.store8 offset=0 align=1 + + ;;slice t10[:] + local.get $$t7.0 + call $runtime.Block.Retain + local.get $$t7.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + i32.const 14 + i32.const 0 + i32.sub + i32.const 14 + i32.const 0 + i32.sub + local.set $$t74.3 + local.set $$t74.2 + local.set $$t74.1 + local.get $$t74.0 + call $runtime.Block.Release + local.set $$t74.0 + + ;;printBytes(t77) + local.get $$t74.0 + local.get $$t74.1 + local.get $$t74.2 + local.get $$t74.3 + call $runtime.printBytes + + ;;return + br $$BlockFnBody + + end ;;$Block_29 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t7.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t21.0 + call $runtime.Block.Release + local.get $$t23.0 + call $runtime.Block.Release + local.get $$t43.0 + call $runtime.Block.Release + local.get $$t50.0 + call $runtime.Block.Release + local.get $$t51.0 + call $runtime.Block.Release + local.get $$t53.0 + call $runtime.Block.Release + local.get $$t54.0 + call $runtime.Block.Release + local.get $$t55.0 + call $runtime.Block.Release + local.get $$t59.0 + call $runtime.Block.Release + local.get $$t61.0 + call $runtime.Block.Release + local.get $$t65.0 + call $runtime.Block.Release + local.get $$t70.0 + call $runtime.Block.Release + local.get $$t74.0 + call $runtime.Block.Release +) ;;runtime.printF64 + +(func $runtime.printHex (param $v i64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t4 i64) + (local $$t5 i64) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t10 i32) + (local $$t11.0 i32) + (local $$t11.1 i32) + (local $$t12.0 i32) + (local $$t12.1 i32) + (local $$t12.2 i32) + (local $$t12.3 i32) + (local $$t13 i64) + (local $$t14 i32) + (local $$t15 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new [64]byte (buf) + i32.const 80 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 64 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;64:int - 1:int + i32.const 64 + i32.const 1 + i32.sub + local.set $$t1 + + ;;jump 3 + br $$Block_2 + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&t0[t13] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t2 + i32.mul + i32.add + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;t12 % 16:u64 + local.get $$t4 + i64.const 16 + i64.rem_u + local.set $$t5 + + ;;"0123456789abcdef":untyped string[t3] + i32.const 8309 + local.get $$t5 + i32.wrap_i64 + i32.add + i32.load8_u offset=0 align=1 + local.set $$t6 + + ;;*t2 = t4 + local.get $$t3.1 + local.get $$t6 + i32.store8 offset=0 align=1 + + ;;t12 < 16:u64 + local.get $$t4 + i64.const 16 + i64.lt_u + local.set $$t7 + + ;;if t5 goto 2 else 4 + local.get $$t7 + if + br $$Block_1 + else + br $$Block_3 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;t13 - 1:int + local.get $$t2 + i32.const 1 + i32.sub + local.set $$t8 + + ;;&t0[t6] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t8 + i32.mul + i32.add + local.set $$t9.1 + local.get $$t9.0 + call $runtime.Block.Release + local.set $$t9.0 + + ;;*t7 = 120:byte + local.get $$t9.1 + i32.const 120 + i32.store8 offset=0 align=1 + + ;;t6 - 1:int + local.get $$t8 + i32.const 1 + i32.sub + local.set $$t10 + + ;;&t0[t8] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t10 + i32.mul + i32.add + local.set $$t11.1 + local.get $$t11.0 + call $runtime.Block.Release + local.set $$t11.0 + + ;;*t9 = 48:byte + local.get $$t11.1 + i32.const 48 + i32.store8 offset=0 align=1 + + ;;slice t0[t8:] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t10 + i32.mul + i32.add + i32.const 64 + local.get $$t10 + i32.sub + i32.const 64 + local.get $$t10 + i32.sub + local.set $$t12.3 + local.set $$t12.2 + local.set $$t12.1 + local.get $$t12.0 + call $runtime.Block.Release + local.set $$t12.0 + + ;;printBytes(t10) + local.get $$t12.0 + local.get $$t12.1 + local.get $$t12.2 + local.get $$t12.3 + call $runtime.printBytes + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + ;;phi [0: v, 4: t15] #v + local.get $$current_block + i32.const 0 + i32.eq + if (result i64) + local.get $v + else + local.get $$t13 + end + local.set $$t4 + + ;;phi [0: t1, 4: t16] #i + local.get $$current_block + i32.const 0 + i32.eq + if (result i32) + local.get $$t1 + else + local.get $$t14 + end + local.set $$t2 + + i32.const 3 + local.set $$current_block + + ;;t13 > 0:int + local.get $$t2 + i32.const 0 + i32.gt_s + local.set $$t15 + + ;;if t14 goto 1 else 2 + local.get $$t15 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;t12 / 16:u64 + local.get $$t4 + i64.const 16 + i64.div_u + local.set $$t13 + + ;;t13 - 1:int + local.get $$t2 + i32.const 1 + i32.sub + local.set $$t14 + + ;;jump 3 + i32.const 3 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_4 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t9.0 + call $runtime.Block.Release + local.get $$t11.0 + call $runtime.Block.Release + local.get $$t12.0 + call $runtime.Block.Release +) ;;runtime.printHex + +(func $runtime.printI64 (param $v i64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i64) + (local $$t2 i64) + (local $$t3 i64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;v < 0:i64 + local.get $v + i64.const 0 + i64.lt_s + local.set $$t0 + + ;;if t0 goto 1 else 2 + local.get $$t0 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;printString("-":string) + i32.const 0 + i32.const 8305 + i32.const 1 + call $runtime.printString + + ;;-v + i64.const 0 + local.get $v + i64.sub + local.set $$t1 + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + ;;phi [0: v, 1: t2] #v + local.get $$current_block + i32.const 0 + i32.eq + if (result i64) + local.get $v + else + local.get $$t1 + end + local.set $$t2 + + i32.const 2 + local.set $$current_block + + ;;convert u64 <- i64 (t3) + local.get $$t2 + local.set $$t3 + + ;;printU64(t4) + local.get $$t3 + call $runtime.printU64 + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printI64 + +(func $runtime.printNewline + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;printString("\n":string) + i32.const 0 + i32.const 8325 + i32.const 1 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printNewline + +(func $runtime.printSlice (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) (param $s.3 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3 i64) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;len(s) + local.get $s.2 + local.set $$t0 + + ;;cap(s) + local.get $s.3 + local.set $$t1 + + ;;print("[":string, t0, "/":string, t1, "]":string) + i32.const 8326 + i32.const 1 + call $$runtime.waPuts + i32.const 32 + call $$runtime.waPrintRune + local.get $$t0 + call $$runtime.waPrintI32 + i32.const 32 + call $$runtime.waPrintRune + i32.const 8327 + i32.const 1 + call $$runtime.waPuts + i32.const 32 + call $$runtime.waPrintRune + local.get $$t1 + call $$runtime.waPrintI32 + i32.const 32 + call $$runtime.waPrintRune + i32.const 8328 + i32.const 1 + call $$runtime.waPuts + + ;;refToPtr_byteSlice(s) + local.get $s.0 + local.get $s.1 + local.get $s.2 + local.get $s.3 + call $runtime.refToPtr_byteSlice + local.set $$t2 + + ;;convert u64 <- i32 (t3) + local.get $$t2 + i64.extend_i32_u + local.set $$t3 + + ;;printHex(t4) + local.get $$t3 + call $runtime.printHex + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printSlice + +(func $runtime.printSpace + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;printString(" ":string) + i32.const 0 + i32.const 8239 + i32.const 1 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printSpace + +(func $runtime.printString (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;len(s) + local.get $s.2 + local.set $$t0 + + ;;t0 > 0:int + local.get $$t0 + i32.const 0 + i32.gt_s + local.set $$t1 + + ;;if t1 goto 1 else 2 + local.get $$t1 + if + br $$Block_0 + else + br $$Block_1 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;refToPtr_string(s) + local.get $s.0 + local.get $s.1 + local.get $s.2 + call $runtime.refToPtr_string + local.set $$t2 + + ;;convert i32 <- int (t0) + local.get $$t0 + local.set $$t3 + + ;;waPuts(t2, t3) + local.get $$t2 + local.get $$t3 + call $$runtime.waPuts + + ;;return + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;runtime.printString + +(func $runtime.printU64 (param $v i64) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1 i32) + (local $$t2 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t4 i64) + (local $$t5 i64) + (local $$t6 i64) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t9.2 i32) + (local $$t9.3 i32) + (local $$t10 i64) + (local $$t11 i32) + (local $$t12 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new [64]byte (buf) + i32.const 80 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 64 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;64:int - 1:int + i32.const 64 + i32.const 1 + i32.sub + local.set $$t1 + + ;;jump 3 + br $$Block_2 + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&t0[t10] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t2 + i32.mul + i32.add + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;t9 % 10:u64 + local.get $$t4 + i64.const 10 + i64.rem_u + local.set $$t5 + + ;;t3 + 48:u64 + local.get $$t5 + i64.const 48 + i64.add + local.set $$t6 + + ;;convert byte <- u64 (t4) + local.get $$t6 + i32.wrap_i64 + i32.const 255 + i32.and + local.set $$t7 + + ;;*t2 = t5 + local.get $$t3.1 + local.get $$t7 + i32.store8 offset=0 align=1 + + ;;t9 < 10:u64 + local.get $$t4 + i64.const 10 + i64.lt_u + local.set $$t8 + + ;;if t6 goto 2 else 4 + local.get $$t8 + if + br $$Block_1 + else + br $$Block_3 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;slice t0[t10:] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + local.get $$t2 + i32.mul + i32.add + i32.const 64 + local.get $$t2 + i32.sub + i32.const 64 + local.get $$t2 + i32.sub + local.set $$t9.3 + local.set $$t9.2 + local.set $$t9.1 + local.get $$t9.0 + call $runtime.Block.Release + local.set $$t9.0 + + ;;printBytes(t7) + local.get $$t9.0 + local.get $$t9.1 + local.get $$t9.2 + local.get $$t9.3 + call $runtime.printBytes + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + ;;phi [0: v, 4: t12] #v + local.get $$current_block + i32.const 0 + i32.eq + if (result i64) + local.get $v + else + local.get $$t10 + end + local.set $$t4 + + ;;phi [0: t1, 4: t13] #i + local.get $$current_block + i32.const 0 + i32.eq + if (result i32) + local.get $$t1 + else + local.get $$t11 + end + local.set $$t2 + + i32.const 3 + local.set $$current_block + + ;;t10 > 0:int + local.get $$t2 + i32.const 0 + i32.gt_s + local.set $$t12 + + ;;if t11 goto 1 else 2 + local.get $$t12 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;t9 / 10:u64 + local.get $$t4 + i64.const 10 + i64.div_u + local.set $$t10 + + ;;t10 - 1:int + local.get $$t2 + i32.const 1 + i32.sub + local.set $$t11 + + ;;jump 3 + i32.const 3 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_4 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t9.0 + call $runtime.Block.Release +) ;;runtime.printU64 + +(func $$runtime.procExit (param $code i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.ProcExit(code) + local.get $code + call $syscall$js.ProcExit + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.procExit + +(func $runtime.refToPtr_byteSlice (param $t.0 i32) (param $t.1 i32) (param $t.2 i32) (param $t.3 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;U8_slice_to_ptr(t) + local.get $t.0 + local.get $t.1 + local.get $t.2 + local.get $t.3 + call $$wa.runtime.slice_to_ptr + local.set $$t0 + + ;;return t0 + local.get $$t0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;runtime.refToPtr_byteSlice + +(func $runtime.refToPtr_i32 (param $p.0 i32) (param $p.1 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;I32_ref_to_ptr(p) + local.get $p.0 + local.get $p.1 + call $$wa.runtime.i32_ref_to_ptr + local.set $$t0 + + ;;return t0 + local.get $$t0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;runtime.refToPtr_i32 + +(func $runtime.refToPtr_string (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;U8_string_to_ptr(s) + local.get $s.0 + local.get $s.1 + local.get $s.2 + call $$wa.runtime.string_to_ptr + local.set $$t0 + + ;;return t0 + local.get $$t0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;runtime.refToPtr_string + +(func $$rune.$slice.append (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $x.3 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (param $y.3 i32) (result i32 i32 i32 i32) + (local $item i32) + (local $x_len i32) + (local $y_len i32) + (local $new_len i32) + (local $src i32) + (local $dest i32) + (local $new_cap i32) + local.get $x.2 + local.set $x_len + local.get $y.2 + local.set $y_len + local.get $x_len + local.get $y_len + i32.add + local.set $new_len + local.get $new_len + local.get $x.3 + i32.le_u + if (result i32 i32 i32 i32) + local.get $x.0 + call $runtime.Block.Retain + local.get $x.1 + local.get $new_len + local.get $x.3 + local.get $y.1 + local.set $src + local.get $x.1 + i32.const 4 + local.get $x_len + i32.mul + i32.add + local.set $dest + block $block1 + loop $loop1 + local.get $y_len + i32.eqz + if + br $block1 + else + end + local.get $src + i32.load offset=0 align=4 + local.set $item + local.get $dest + local.get $item + i32.store offset=0 align=4 + local.get $src + i32.const 4 + i32.add + local.set $src + local.get $dest + i32.const 4 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop1 + end ;;loop1 + end ;;block1 + else + local.get $new_len + i32.const 2 + i32.mul + local.set $new_cap + local.get $new_cap + i32.const 4 + i32.mul + i32.const 16 + i32.add + call $runtime.HeapAlloc + local.get $new_cap + i32.const 0 + i32.const 4 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + call $runtime.DupI32 + local.set $dest + local.get $new_len + local.get $new_cap + local.get $x.1 + local.set $src + block $block2 + loop $loop2 + local.get $x_len + i32.eqz + if + br $block2 + else + end + local.get $src + i32.load offset=0 align=4 + local.set $item + local.get $dest + local.get $item + i32.store offset=0 align=4 + local.get $src + i32.const 4 + i32.add + local.set $src + local.get $dest + i32.const 4 + i32.add + local.set $dest + local.get $x_len + i32.const 1 + i32.sub + local.set $x_len + br $loop2 + end ;;loop2 + end ;;block2 + local.get $y.1 + local.set $src + block $block3 + loop $loop3 + local.get $y_len + i32.eqz + if + br $block3 + else + end + local.get $src + i32.load offset=0 align=4 + local.set $item + local.get $dest + local.get $item + i32.store offset=0 align=4 + local.get $src + i32.const 4 + i32.add + local.set $src + local.get $dest + i32.const 4 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop3 + end ;;loop3 + end ;;block3 + end +) ;;$rune.$slice.append + +(func $runtime.runeSliceFromString (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) (result i32 i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$ret_0.3 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t0.2 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t1.3 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t2.2 i32) + (local $$t2.3 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t3.2 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6.0 i32) + (local $$t6.1 i32) + (local $$t7.0 i32) + (local $$t7.1 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t8.2 i32) + (local $$t8.3 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;range s + local.get $s.1 + local.get $s.2 + i32.const 0 + local.set $$t0.2 + local.set $$t0.1 + local.set $$t0.0 + + ;;jump 1 + br $$Block_0 + + end ;;$Block_0 + ;;phi [0: nil:[]rune, 2: t8] #rs + local.get $$current_block + i32.const 0 + i32.eq + if (result i32 i32 i32 i32) + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + else + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + local.get $$t1.2 + local.get $$t1.3 + end + local.set $$t2.3 + local.set $$t2.2 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + i32.const 1 + local.set $$current_block + + ;;next t0 + local.get $$t0.0 + local.get $$t0.1 + local.get $$t0.2 + call $runtime.next_rune + local.set $$t0.2 + local.set $$t3.2 + local.set $$t3.1 + local.set $$t3.0 + + ;;extract t2 #0 + local.get $$t3.0 + local.set $$t4 + + ;;if t3 goto 2 else 3 + local.get $$t4 + if + br $$Block_1 + else + br $$Block_2 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;extract t2 #2 + local.get $$t3.2 + local.set $$t5 + + ;;new [1]rune (varargs) + i32.const 20 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 4 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t6.1 + local.get $$t6.0 + call $runtime.Block.Release + local.set $$t6.0 + + ;;&t5[0:int] + local.get $$t6.0 + call $runtime.Block.Retain + local.get $$t6.1 + i32.const 4 + i32.const 0 + i32.mul + i32.add + local.set $$t7.1 + local.get $$t7.0 + call $runtime.Block.Release + local.set $$t7.0 + + ;;*t6 = t4 + local.get $$t7.1 + local.get $$t5 + i32.store offset=0 align=4 + + ;;slice t5[:] + local.get $$t6.0 + call $runtime.Block.Retain + local.get $$t6.1 + i32.const 4 + i32.const 0 + i32.mul + i32.add + i32.const 1 + i32.const 0 + i32.sub + i32.const 1 + i32.const 0 + i32.sub + local.set $$t8.3 + local.set $$t8.2 + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;append(t1, t7...) + local.get $$t2.0 + local.get $$t2.1 + local.get $$t2.2 + local.get $$t2.3 + local.get $$t8.0 + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + call $$rune.$slice.append + local.set $$t1.3 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;return t1 + local.get $$t2.0 + call $runtime.Block.Retain + local.get $$t2.1 + local.get $$t2.2 + local.get $$t2.3 + local.set $$ret_0.3 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_3 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_0.3 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t6.0 + call $runtime.Block.Release + local.get $$t7.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release +) ;;runtime.runeSliceFromString + +(func $runtime.set_u8 (param $addr i32) (param $data i32) + local.get $addr + local.get $data + i32.store8 offset=0 align=1 +) ;;runtime.set_u8 + +(func $runtime.stringFromRune (param $r i32) (result i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t1.3 i32) + (local $$t2 i32) + (local $$t3 i32) + (local $$t4 i32) + (local $$t5.0 i32) + (local $$t5.1 i32) + (local $$t5.2 i32) + (local $$t5.3 i32) + (local $$t6.0 i32) + (local $$t6.1 i32) + (local $$t6.2 i32) + (local $$t7.0 i32) + (local $$t7.1 i32) + (local $$t8 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t10 i32) + (local $$t11.0 i32) + (local $$t11.1 i32) + (local $$t12 i32) + (local $$t13 i32) + (local $$t14 i32) + (local $$t15.0 i32) + (local $$t15.1 i32) + (local $$t16 i32) + (local $$t17 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20.0 i32) + (local $$t20.1 i32) + (local $$t21 i32) + (local $$t22.0 i32) + (local $$t22.1 i32) + (local $$t23 i32) + (local $$t24 i32) + (local $$t25 i32) + (local $$t26.0 i32) + (local $$t26.1 i32) + (local $$t27 i32) + (local $$t28 i32) + (local $$t29 i32) + (local $$t30 i32) + (local $$t31.0 i32) + (local $$t31.1 i32) + (local $$t32 i32) + (local $$t33 i32) + (local $$t34 i32) + (local $$t35 i32) + (local $$t36.0 i32) + (local $$t36.1 i32) + (local $$t37 i32) + (local $$t38.0 i32) + (local $$t38.1 i32) + (local $$t39 i32) + (local $$t40 i32) + (local $$t41 i32) + (local $$t42.0 i32) + (local $$t42.1 i32) + (local $$t43 i32) + (local $$t44 i32) + (local $$t45 i32) + (local $$t46 i32) + (local $$t47.0 i32) + (local $$t47.1 i32) + (local $$t48 i32) + (local $$t49 i32) + (local $$t50 i32) + (local $$t51 i32) + (local $$t52 i32) + (local $$t53 i32) + (local $$t54 i32) + (local $$t55.0 i32) + (local $$t55.1 i32) + (local $$t56 i32) + (local $$t57.0 i32) + (local $$t57.1 i32) + (local $$t58 i32) + (local $$t59 i32) + (local $$t60 i32) + (local $$t61.0 i32) + (local $$t61.1 i32) + (local $$t62 i32) + (local $$t63 i32) + (local $$t64 i32) + (local $$t65 i32) + (local $$t66.0 i32) + (local $$t66.1 i32) + (local $$t67 i32) + (local $$t68 i32) + (local $$t69 i32) + (local $$t70 i32) + (local $$t71.0 i32) + (local $$t71.1 i32) + (local $$t72 i32) + (local $$t73 i32) + (local $$t74 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new [4]byte (makeslice) + i32.const 20 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 4 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;slice t0[:0:int] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + i32.const 0 + i32.const 0 + i32.sub + i32.const 4 + i32.const 0 + i32.sub + local.set $$t1.3 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;convert uint32 <- rune (r) + local.get $r + local.set $$t2 + + ;;t2 <= 127:uint32 + local.get $$t2 + i32.const 127 + i32.le_u + local.set $$t3 + + ;;if t3 goto 2 else 4 + local.get $$t3 + if + br $$Block_1 + else + br $$Block_3 + end + + end ;;$Block_0 + ;;phi [2: 1:i32, 3: 2:i32, 5: 3:i32, 7: 3:i32, 12: 4:i32] #n + local.get $$current_block + i32.const 2 + i32.eq + if (result i32) + i32.const 1 + else + local.get $$current_block + i32.const 3 + i32.eq + if (result i32) + i32.const 2 + else + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + i32.const 3 + else + local.get $$current_block + i32.const 7 + i32.eq + if (result i32) + i32.const 3 + else + i32.const 4 + end + end + end + end + local.set $$t4 + + i32.const 1 + local.set $$current_block + + ;;slice t1[:t4] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.get $$t4 + i32.const 0 + i32.sub + local.get $$t1.3 + i32.const 0 + i32.sub + local.set $$t5.3 + local.set $$t5.2 + local.set $$t5.1 + local.get $$t5.0 + call $runtime.Block.Release + local.set $$t5.0 + + ;;convert string <- []byte (t5) + i32.const 0 + i32.const 8224 + i32.const 0 + local.get $$t5.0 + local.get $$t5.1 + local.get $$t5.2 + call $$string.appendstr + local.set $$t6.2 + local.set $$t6.1 + local.get $$t6.0 + call $runtime.Block.Release + local.set $$t6.0 + + ;;return t6 + local.get $$t6.0 + call $runtime.Block.Retain + local.get $$t6.1 + local.get $$t6.2 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;&t1[0:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t7.1 + local.get $$t7.0 + call $runtime.Block.Release + local.set $$t7.0 + + ;;convert byte <- rune (r) + local.get $r + i32.const 255 + i32.and + local.set $$t8 + + ;;*t7 = t8 + local.get $$t7.1 + local.get $$t8 + i32.store8 offset=0 align=1 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;&t1[1:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t9.1 + local.get $$t9.0 + call $runtime.Block.Release + local.set $$t9.0 + + ;;*t9 + local.get $$t9.1 + i32.load8_u offset=0 align=1 + local.set $$t10 + + ;;&t1[0:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t11.1 + local.get $$t11.0 + call $runtime.Block.Release + local.set $$t11.0 + + ;;r >> 6:uint64 + local.get $r + i64.const 6 + i32.wrap_i64 + i32.shr_s + local.set $$t12 + + ;;convert byte <- rune (t12) + local.get $$t12 + i32.const 255 + i32.and + local.set $$t13 + + ;;192:byte | t13 + i32.const 192 + local.get $$t13 + i32.or + local.set $$t14 + + ;;*t11 = t14 + local.get $$t11.1 + local.get $$t14 + i32.store8 offset=0 align=1 + + ;;&t1[1:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t15.1 + local.get $$t15.0 + call $runtime.Block.Release + local.set $$t15.0 + + ;;convert byte <- rune (r) + local.get $r + i32.const 255 + i32.and + local.set $$t16 + + ;;t16 & 63:byte + local.get $$t16 + i32.const 63 + i32.and + local.set $$t17 + + ;;128:byte | t17 + i32.const 128 + local.get $$t17 + i32.or + local.set $$t18 + + ;;*t15 = t18 + local.get $$t15.1 + local.get $$t18 + i32.store8 offset=0 align=1 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;t2 <= 2047:uint32 + local.get $$t2 + i32.const 2047 + i32.le_u + local.set $$t19 + + ;;if t19 goto 3 else 6 + local.get $$t19 + if + i32.const 3 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_5 + end + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;&t1[2:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t20.1 + local.get $$t20.0 + call $runtime.Block.Release + local.set $$t20.0 + + ;;*t20 + local.get $$t20.1 + i32.load8_u offset=0 align=1 + local.set $$t21 + + ;;&t1[0:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t22.1 + local.get $$t22.0 + call $runtime.Block.Release + local.set $$t22.0 + + ;;65533:rune >> 12:uint64 + i32.const 65533 + i64.const 12 + i32.wrap_i64 + i32.shr_s + local.set $$t23 + + ;;convert byte <- rune (t23) + local.get $$t23 + i32.const 255 + i32.and + local.set $$t24 + + ;;224:byte | t24 + i32.const 224 + local.get $$t24 + i32.or + local.set $$t25 + + ;;*t22 = t25 + local.get $$t22.1 + local.get $$t25 + i32.store8 offset=0 align=1 + + ;;&t1[1:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t26.1 + local.get $$t26.0 + call $runtime.Block.Release + local.set $$t26.0 + + ;;65533:rune >> 6:uint64 + i32.const 65533 + i64.const 6 + i32.wrap_i64 + i32.shr_s + local.set $$t27 + + ;;convert byte <- rune (t27) + local.get $$t27 + i32.const 255 + i32.and + local.set $$t28 + + ;;t28 & 63:byte + local.get $$t28 + i32.const 63 + i32.and + local.set $$t29 + + ;;128:byte | t29 + i32.const 128 + local.get $$t29 + i32.or + local.set $$t30 + + ;;*t26 = t30 + local.get $$t26.1 + local.get $$t30 + i32.store8 offset=0 align=1 + + ;;&t1[2:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t31.1 + local.get $$t31.0 + call $runtime.Block.Release + local.set $$t31.0 + + ;;convert byte <- rune (65533:rune) + i32.const 65533 + i32.const 255 + i32.and + local.set $$t32 + + ;;t32 & 63:byte + local.get $$t32 + i32.const 63 + i32.and + local.set $$t33 + + ;;128:byte | t33 + i32.const 128 + local.get $$t33 + i32.or + local.set $$t34 + + ;;*t31 = t34 + local.get $$t31.1 + local.get $$t34 + i32.store8 offset=0 align=1 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;t2 > 1114111:uint32 + local.get $$t2 + i32.const 1114111 + i32.gt_u + local.set $$t35 + + ;;if t35 goto 5 else 8 + local.get $$t35 + if + i32.const 5 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_7 + end + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;&t1[2:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t36.1 + local.get $$t36.0 + call $runtime.Block.Release + local.set $$t36.0 + + ;;*t36 + local.get $$t36.1 + i32.load8_u offset=0 align=1 + local.set $$t37 + + ;;&t1[0:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t38.1 + local.get $$t38.0 + call $runtime.Block.Release + local.set $$t38.0 + + ;;r >> 12:uint64 + local.get $r + i64.const 12 + i32.wrap_i64 + i32.shr_s + local.set $$t39 + + ;;convert byte <- rune (t39) + local.get $$t39 + i32.const 255 + i32.and + local.set $$t40 + + ;;224:byte | t40 + i32.const 224 + local.get $$t40 + i32.or + local.set $$t41 + + ;;*t38 = t41 + local.get $$t38.1 + local.get $$t41 + i32.store8 offset=0 align=1 + + ;;&t1[1:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t42.1 + local.get $$t42.0 + call $runtime.Block.Release + local.set $$t42.0 + + ;;r >> 6:uint64 + local.get $r + i64.const 6 + i32.wrap_i64 + i32.shr_s + local.set $$t43 + + ;;convert byte <- rune (t43) + local.get $$t43 + i32.const 255 + i32.and + local.set $$t44 + + ;;t44 & 63:byte + local.get $$t44 + i32.const 63 + i32.and + local.set $$t45 + + ;;128:byte | t45 + i32.const 128 + local.get $$t45 + i32.or + local.set $$t46 + + ;;*t42 = t46 + local.get $$t42.1 + local.get $$t46 + i32.store8 offset=0 align=1 + + ;;&t1[2:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t47.1 + local.get $$t47.0 + call $runtime.Block.Release + local.set $$t47.0 + + ;;convert byte <- rune (r) + local.get $r + i32.const 255 + i32.and + local.set $$t48 + + ;;t48 & 63:byte + local.get $$t48 + i32.const 63 + i32.and + local.set $$t49 + + ;;128:byte | t49 + i32.const 128 + local.get $$t49 + i32.or + local.set $$t50 + + ;;*t47 = t50 + local.get $$t47.1 + local.get $$t50 + i32.store8 offset=0 align=1 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;55296:uint32 <= t2 + i32.const 55296 + local.get $$t2 + i32.le_u + local.set $$t51 + + ;;if t51 goto 10 else 11 + local.get $$t51 + if + br $$Block_9 + else + br $$Block_10 + end + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;t2 <= 65535:uint32 + local.get $$t2 + i32.const 65535 + i32.le_u + local.set $$t52 + + ;;if t52 goto 7 else 12 + local.get $$t52 + if + i32.const 7 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_11 + end + + end ;;$Block_9 + i32.const 10 + local.set $$current_block + + ;;t2 <= 57343:uint32 + local.get $$t2 + i32.const 57343 + i32.le_u + local.set $$t53 + + ;;jump 11 + br $$Block_10 + + end ;;$Block_10 + ;;phi [8: false:bool, 10: t53] #&& + local.get $$current_block + i32.const 8 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t53 + end + local.set $$t54 + + i32.const 11 + local.set $$current_block + + ;;if t54 goto 5 else 9 + local.get $$t54 + if + i32.const 5 + local.set $$block_selector + br $$BlockDisp + else + i32.const 9 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_11 + i32.const 12 + local.set $$current_block + + ;;&t1[3:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 3 + i32.mul + i32.add + local.set $$t55.1 + local.get $$t55.0 + call $runtime.Block.Release + local.set $$t55.0 + + ;;*t55 + local.get $$t55.1 + i32.load8_u offset=0 align=1 + local.set $$t56 + + ;;&t1[0:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t57.1 + local.get $$t57.0 + call $runtime.Block.Release + local.set $$t57.0 + + ;;r >> 18:uint64 + local.get $r + i64.const 18 + i32.wrap_i64 + i32.shr_s + local.set $$t58 + + ;;convert byte <- rune (t58) + local.get $$t58 + i32.const 255 + i32.and + local.set $$t59 + + ;;240:byte | t59 + i32.const 240 + local.get $$t59 + i32.or + local.set $$t60 + + ;;*t57 = t60 + local.get $$t57.1 + local.get $$t60 + i32.store8 offset=0 align=1 + + ;;&t1[1:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 1 + i32.mul + i32.add + local.set $$t61.1 + local.get $$t61.0 + call $runtime.Block.Release + local.set $$t61.0 + + ;;r >> 12:uint64 + local.get $r + i64.const 12 + i32.wrap_i64 + i32.shr_s + local.set $$t62 + + ;;convert byte <- rune (t62) + local.get $$t62 + i32.const 255 + i32.and + local.set $$t63 + + ;;t63 & 63:byte + local.get $$t63 + i32.const 63 + i32.and + local.set $$t64 + + ;;128:byte | t64 + i32.const 128 + local.get $$t64 + i32.or + local.set $$t65 + + ;;*t61 = t65 + local.get $$t61.1 + local.get $$t65 + i32.store8 offset=0 align=1 + + ;;&t1[2:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 2 + i32.mul + i32.add + local.set $$t66.1 + local.get $$t66.0 + call $runtime.Block.Release + local.set $$t66.0 + + ;;r >> 6:uint64 + local.get $r + i64.const 6 + i32.wrap_i64 + i32.shr_s + local.set $$t67 + + ;;convert byte <- rune (t67) + local.get $$t67 + i32.const 255 + i32.and + local.set $$t68 + + ;;t68 & 63:byte + local.get $$t68 + i32.const 63 + i32.and + local.set $$t69 + + ;;128:byte | t69 + i32.const 128 + local.get $$t69 + i32.or + local.set $$t70 + + ;;*t66 = t70 + local.get $$t66.1 + local.get $$t70 + i32.store8 offset=0 align=1 + + ;;&t1[3:int] + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.const 1 + i32.const 3 + i32.mul + i32.add + local.set $$t71.1 + local.get $$t71.0 + call $runtime.Block.Release + local.set $$t71.0 + + ;;convert byte <- rune (r) + local.get $r + i32.const 255 + i32.and + local.set $$t72 + + ;;t72 & 63:byte + local.get $$t72 + i32.const 63 + i32.and + local.set $$t73 + + ;;128:byte | t73 + i32.const 128 + local.get $$t73 + i32.or + local.set $$t74 + + ;;*t71 = t74 + local.get $$t71.1 + local.get $$t74 + i32.store8 offset=0 align=1 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_12 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t5.0 + call $runtime.Block.Release + local.get $$t6.0 + call $runtime.Block.Release + local.get $$t7.0 + call $runtime.Block.Release + local.get $$t9.0 + call $runtime.Block.Release + local.get $$t11.0 + call $runtime.Block.Release + local.get $$t15.0 + call $runtime.Block.Release + local.get $$t20.0 + call $runtime.Block.Release + local.get $$t22.0 + call $runtime.Block.Release + local.get $$t26.0 + call $runtime.Block.Release + local.get $$t31.0 + call $runtime.Block.Release + local.get $$t36.0 + call $runtime.Block.Release + local.get $$t38.0 + call $runtime.Block.Release + local.get $$t42.0 + call $runtime.Block.Release + local.get $$t47.0 + call $runtime.Block.Release + local.get $$t55.0 + call $runtime.Block.Release + local.get $$t57.0 + call $runtime.Block.Release + local.get $$t61.0 + call $runtime.Block.Release + local.get $$t66.0 + call $runtime.Block.Release + local.get $$t71.0 + call $runtime.Block.Release +) ;;runtime.stringFromRune + +(func $runtime.stringFromRuneSlice (param $rs.0 i32) (param $rs.1 i32) (param $rs.2 i32) (param $rs.3 i32) (result i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$t0 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t2.2 i32) + (local $$t3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6.0 i32) + (local $$t6.1 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t8.2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;len(rs) + local.get $rs.2 + local.set $$t0 + + ;;jump 1 + br $$Block_0 + + end ;;$Block_0 + ;;phi [0: "":string, 2: t8] #s + local.get $$current_block + i32.const 0 + i32.eq + if (result i32 i32 i32) + i32.const 0 + i32.const 8224 + i32.const 0 + else + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + local.get $$t1.2 + end + local.set $$t2.2 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;phi [0: -1:int, 2: t3] + local.get $$current_block + i32.const 0 + i32.eq + if (result i32) + i32.const -1 + else + local.get $$t3 + end + local.set $$t4 + + i32.const 1 + local.set $$current_block + + ;;t2 + 1:int + local.get $$t4 + i32.const 1 + i32.add + local.set $$t3 + + ;;t3 < t0 + local.get $$t3 + local.get $$t0 + i32.lt_s + local.set $$t5 + + ;;if t4 goto 2 else 3 + local.get $$t5 + if + br $$Block_1 + else + br $$Block_2 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;&rs[t3] + local.get $rs.0 + call $runtime.Block.Retain + local.get $rs.1 + i32.const 4 + local.get $$t3 + i32.mul + i32.add + local.set $$t6.1 + local.get $$t6.0 + call $runtime.Block.Release + local.set $$t6.0 + + ;;*t5 + local.get $$t6.1 + i32.load offset=0 align=4 + local.set $$t7 + + ;;stringFromRune(t6) + local.get $$t7 + call $runtime.stringFromRune + local.set $$t8.2 + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + ;;t1 + t7 + local.get $$t2.0 + local.get $$t2.1 + local.get $$t2.2 + local.get $$t8.0 + local.get $$t8.1 + local.get $$t8.2 + call $$string.appendstr + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;jump 1 + i32.const 1 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;return t1 + local.get $$t2.0 + call $runtime.Block.Retain + local.get $$t2.1 + local.get $$t2.2 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_3 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t6.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release +) ;;runtime.stringFromRuneSlice + +(func $$wa.runtime.string_Comp (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t3.2 i32) + (local $$t4.0 i32) + (local $$t4.1 i32) + (local $$t4.2 i32) + (local $$t5.0 i32) + (local $$t5.1 i32) + (local $$t5.2 i32) + (local $$t5.3 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11.0 i32) + (local $$t11.1 i32) + (local $$t11.2 i32) + (local $$t12.0 i32) + (local $$t12.1 i32) + (local $$t12.2 i32) + (local $$t12.3 i32) + (local $$t13 i32) + (local $$t14 i32) + (local $$t15 i32) + (local $$t16 i32) + (local $$t17.0 i32) + (local $$t17.1 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20 i32) + (local $$t21 i32) + (local $$t22 i32) + (local $$t23 i32) + (local $$t24 i32) + (local $$t25 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;local stringIter (i1) + i32.const 28 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 12 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;stringToIter(x) + local.get $x.0 + local.get $x.1 + local.get $x.2 + call $$wa.runtime.string_to_iter + local.set $$t1.2 + local.set $$t1.1 + local.set $$t1.0 + + ;;*t0 = t1 + local.get $$t0.1 + local.get $$t1.0 + i32.store offset=0 align=4 + local.get $$t0.1 + local.get $$t1.1 + i32.store offset=4 align=4 + local.get $$t0.1 + local.get $$t1.2 + i32.store offset=8 align=4 + + ;;local stringIter (i2) + i32.const 28 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 12 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;stringToIter(y) + local.get $y.0 + local.get $y.1 + local.get $y.2 + call $$wa.runtime.string_to_iter + local.set $$t3.2 + local.set $$t3.1 + local.set $$t3.0 + + ;;*t2 = t3 + local.get $$t2.1 + local.get $$t3.0 + i32.store offset=0 align=4 + local.get $$t2.1 + local.get $$t3.1 + i32.store offset=4 align=4 + local.get $$t2.1 + local.get $$t3.2 + i32.store offset=8 align=4 + + ;;jump 1 + br $$Block_0 + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;*t0 + local.get $$t0.1 + i32.load offset=0 align=4 + local.get $$t0.1 + i32.load offset=4 align=4 + local.get $$t0.1 + i32.load offset=8 align=4 + local.set $$t4.2 + local.set $$t4.1 + local.set $$t4.0 + + ;;next_rune(t4) + local.get $$t4.0 + local.get $$t4.1 + local.get $$t4.2 + call $runtime.next_rune + local.set $$t5.3 + local.set $$t5.2 + local.set $$t5.1 + local.set $$t5.0 + + ;;extract t5 #0 + local.get $$t5.0 + local.set $$t6 + + ;;extract t5 #1 + local.get $$t5.1 + local.set $$t7 + + ;;extract t5 #2 + local.get $$t5.2 + local.set $$t8 + + ;;extract t5 #3 + local.get $$t5.3 + local.set $$t9 + + ;;&t0.pos [#2] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 8 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t10 = t9 + local.get $$t10.1 + local.get $$t9 + i32.store offset=0 align=4 + + ;;*t2 + local.get $$t2.1 + i32.load offset=0 align=4 + local.get $$t2.1 + i32.load offset=4 align=4 + local.get $$t2.1 + i32.load offset=8 align=4 + local.set $$t11.2 + local.set $$t11.1 + local.set $$t11.0 + + ;;next_rune(t11) + local.get $$t11.0 + local.get $$t11.1 + local.get $$t11.2 + call $runtime.next_rune + local.set $$t12.3 + local.set $$t12.2 + local.set $$t12.1 + local.set $$t12.0 + + ;;extract t12 #0 + local.get $$t12.0 + local.set $$t13 + + ;;extract t12 #1 + local.get $$t12.1 + local.set $$t14 + + ;;extract t12 #2 + local.get $$t12.2 + local.set $$t15 + + ;;extract t12 #3 + local.get $$t12.3 + local.set $$t16 + + ;;&t2.pos [#2] + local.get $$t2.0 + call $runtime.Block.Retain + local.get $$t2.1 + i32.const 8 + i32.add + local.set $$t17.1 + local.get $$t17.0 + call $runtime.Block.Release + local.set $$t17.0 + + ;;*t17 = t16 + local.get $$t17.1 + local.get $$t16 + i32.store offset=0 align=4 + + ;;if t6 goto 4 else 5 + local.get $$t6 + if + br $$Block_3 + else + br $$Block_4 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;len(x) + local.get $x.2 + local.set $$t18 + + ;;len(y) + local.get $y.2 + local.set $$t19 + + ;;t18 < t19 + local.get $$t18 + local.get $$t19 + i32.lt_s + local.set $$t20 + + ;;if t20 goto 9 else 10 + local.get $$t20 + if + br $$Block_8 + else + br $$Block_9 + end + + end ;;$Block_2 + i32.const 3 + local.set $$current_block + + ;;t8 < t15 + local.get $$t8 + local.get $$t15 + i32.lt_s + local.set $$t21 + + ;;if t21 goto 6 else 7 + local.get $$t21 + if + br $$Block_5 + else + br $$Block_6 + end + + end ;;$Block_3 + i32.const 4 + local.set $$current_block + + ;;jump 5 + br $$Block_4 + + end ;;$Block_4 + ;;phi [1: false:bool, 4: t13] #&& + local.get $$current_block + i32.const 1 + i32.eq + if (result i32) + i32.const 0 + else + local.get $$t13 + end + local.set $$t22 + + i32.const 5 + local.set $$current_block + + ;;t22 != true:bool + local.get $$t22 + i32.const 1 + i32.eq + i32.eqz + local.set $$t23 + + ;;if t23 goto 2 else 3 + local.get $$t23 + if + i32.const 2 + local.set $$block_selector + br $$BlockDisp + else + i32.const 3 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;return -1:i32 + i32.const -1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;t8 > t15 + local.get $$t8 + local.get $$t15 + i32.gt_s + local.set $$t24 + + ;;if t24 goto 8 else 1 + local.get $$t24 + if + br $$Block_7 + else + i32.const 1 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;return 1:i32 + i32.const 1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;return -1:i32 + i32.const -1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_9 + i32.const 10 + local.set $$current_block + + ;;t18 > t19 + local.get $$t18 + local.get $$t19 + i32.gt_s + local.set $$t25 + + ;;if t25 goto 11 else 12 + local.get $$t25 + if + br $$Block_10 + else + br $$Block_11 + end + + end ;;$Block_10 + i32.const 11 + local.set $$current_block + + ;;return 1:i32 + i32.const 1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_11 + i32.const 12 + local.set $$current_block + + ;;return 0:i32 + i32.const 0 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_12 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t17.0 + call $runtime.Block.Release +) ;;$wa.runtime.string_Comp + +(func $$wa.runtime.string_GEQ (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;string_Comp(x, y) + local.get $x.0 + local.get $x.1 + local.get $x.2 + local.get $y.0 + local.get $y.1 + local.get $y.2 + call $$wa.runtime.string_Comp + local.set $$t0 + + ;;t0 != -1:i32 + local.get $$t0 + i32.const -1 + i32.eq + i32.eqz + local.set $$t1 + + ;;return t1 + local.get $$t1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$wa.runtime.string_GEQ + +(func $$wa.runtime.string_GTR (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;string_Comp(x, y) + local.get $x.0 + local.get $x.1 + local.get $x.2 + local.get $y.0 + local.get $y.1 + local.get $y.2 + call $$wa.runtime.string_Comp + local.set $$t0 + + ;;t0 == 1:i32 + local.get $$t0 + i32.const 1 + i32.eq + local.set $$t1 + + ;;return t1 + local.get $$t1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$wa.runtime.string_GTR + +(func $$wa.runtime.string_LEQ (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;string_Comp(x, y) + local.get $x.0 + local.get $x.1 + local.get $x.2 + local.get $y.0 + local.get $y.1 + local.get $y.2 + call $$wa.runtime.string_Comp + local.set $$t0 + + ;;t0 != 1:i32 + local.get $$t0 + i32.const 1 + i32.eq + i32.eqz + local.set $$t1 + + ;;return t1 + local.get $$t1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$wa.runtime.string_LEQ + +(func $$wa.runtime.string_LSS (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (result i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0 i32) + (local $$t0 i32) + (local $$t1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;string_Comp(x, y) + local.get $x.0 + local.get $x.1 + local.get $x.2 + local.get $y.0 + local.get $y.1 + local.get $y.2 + call $$wa.runtime.string_Comp + local.set $$t0 + + ;;t0 == -1:i32 + local.get $$t0 + i32.const -1 + i32.eq + local.set $$t1 + + ;;return t1 + local.get $$t1 + local.set $$ret_0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0 +) ;;$wa.runtime.string_LSS + +(func $$runtime.waPrintBool (param $i i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintBool(i) + local.get $i + call $syscall$js.PrintBool + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintBool + +(func $$runtime.waPrintChar (param $ch i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;waPrintRune(ch) + local.get $ch + call $$runtime.waPrintRune + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintChar + +(func $$runtime.waPrintF32 (param $i f32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintF32(i) + local.get $i + call $syscall$js.PrintF32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintF32 + +(func $$runtime.waPrintF64 (param $i f64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintF64(i) + local.get $i + call $syscall$js.PrintF64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintF64 + +(func $$runtime.waPrintI32 (param $i i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintI32(i) + local.get $i + call $syscall$js.PrintI32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintI32 + +(func $$runtime.waPrintI64 (param $i i64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintI64(i) + local.get $i + call $syscall$js.PrintI64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintI64 + +(func $$runtime.waPrintRune (param $ch i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintRune(ch) + local.get $ch + call $syscall$js.PrintRune + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintRune + +(func $$runtime.waPrintString (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;printString(s) + local.get $s.0 + local.get $s.1 + local.get $s.2 + call $runtime.printString + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintString + +(func $$runtime.waPrintU32 (param $i i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintU32(i) + local.get $i + call $syscall$js.PrintU32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintU32 + +(func $$runtime.waPrintU32Ptr (param $i i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintU32Ptr(i) + local.get $i + call $syscall$js.PrintU32Ptr + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintU32Ptr + +(func $$runtime.waPrintU64 (param $i i64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.PrintU64(i) + local.get $i + call $syscall$js.PrintU64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPrintU64 + +(func $$runtime.waPuts (param $ptr i32) (param $len i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;syscall/js.Puts(ptr, len) + local.get $ptr + local.get $len + call $syscall$js.Puts + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;$runtime.waPuts + +(func $$brainfuck$bfpkg.BrainFuck.$$onFree (param $$ptr i32) + local.get $$ptr + i32.const 30000 + i32.add + i32.const 3 + call_indirect (type $$onFree) +) ;;$brainfuck$bfpkg.BrainFuck.$$onFree + +(func $brainfuck$bfpkg.NewBrainFuck (param $code.0 i32) (param $code.1 i32) (param $code.2 i32) (result i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new BrainFuck (complit) + i32.const 30036 + call $runtime.HeapAlloc + i32.const 1 + i32.const 15 + i32.const 30020 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;&t0.code [#1] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 30000 + i32.add + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;*t1 = code + local.get $$t1.1 + local.get $code.0 + call $runtime.Block.Retain + local.get $$t1.1 + i32.load offset=0 align=1 + call $runtime.Block.Release + i32.store offset=0 align=1 + local.get $$t1.1 + local.get $code.1 + i32.store offset=4 align=4 + local.get $$t1.1 + local.get $code.2 + i32.store offset=8 align=4 + + ;;return t0 + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release +) ;;brainfuck$bfpkg.NewBrainFuck + +(func $brainfuck$bfpkg.init + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;*init$guard + global.get $brainfuck$bfpkg.init$guard + local.set $$t0 + + ;;if t0 goto 2 else 1 + local.get $$t0 + if + br $$Block_1 + else + br $$Block_0 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;*init$guard = true:bool + i32.const 1 + global.set $brainfuck$bfpkg.init$guard + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;brainfuck$bfpkg.init + +(func $brainfuck.Run (export "brainfuck.Run") (param $code.0 i32) (param $code.1 i32) (param $code.2 i32) (result i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t1.3 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t2.2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;brainfuck/bfpkg.NewBrainFuck(code) + local.get $code.0 + local.get $code.1 + local.get $code.2 + call $brainfuck$bfpkg.NewBrainFuck + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;(*brainfuck/bfpkg.BrainFuck).Run(t0) + local.get $$t0.0 + local.get $$t0.1 + call $brainfuck$bfpkg.BrainFuck.Run + local.set $$t1.3 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;convert string <- []byte (t1) + i32.const 0 + i32.const 8224 + i32.const 0 + local.get $$t1.0 + local.get $$t1.1 + local.get $$t1.2 + call $$string.appendstr + local.set $$t2.2 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;return t2 + local.get $$t2.0 + call $runtime.Block.Retain + local.get $$t2.1 + local.get $$t2.2 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release +) ;;brainfuck.Run + +(func $brainfuck.init + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;*init$guard + global.get $brainfuck.init$guard + local.set $$t0 + + ;;if t0 goto 2 else 1 + local.get $$t0 + if + br $$Block_1 + else + br $$Block_0 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;*init$guard = true:bool + i32.const 1 + global.set $brainfuck.init$guard + + ;;runtime.init() + call $runtime.init + + ;;brainfuck/bfpkg.init() + call $brainfuck$bfpkg.init + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;brainfuck.init + +(func $brainfuck.main (export "brainfuck.main") + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t1.3 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t2.2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;brainfuck/bfpkg.NewBrainFuck("++++++++++[>+++++...":string) + i32.const 0 + i32.const 8329 + i32.const 33 + call $brainfuck$bfpkg.NewBrainFuck + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;(*brainfuck/bfpkg.BrainFuck).Run(t0) + local.get $$t0.0 + local.get $$t0.1 + call $brainfuck$bfpkg.BrainFuck.Run + local.set $$t1.3 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;convert string <- []byte (t1) + i32.const 0 + i32.const 8224 + i32.const 0 + local.get $$t1.0 + local.get $$t1.1 + local.get $$t1.2 + call $$string.appendstr + local.set $$t2.2 + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;println(t2) + local.get $$t2.1 + local.get $$t2.2 + call $$runtime.waPuts + i32.const 10 + call $$runtime.waPrintChar + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release +) ;;brainfuck.main + +(func $syscall$js.PrintBool (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_bool(v) + local.get $v + call $syscall$js.__import__print_bool + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintBool + +(func $syscall$js.PrintF32 (param $v f32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_f32(v) + local.get $v + call $syscall$js.__import__print_f32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintF32 + +(func $syscall$js.PrintF64 (param $v f64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_f64(v) + local.get $v + call $syscall$js.__import__print_f64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintF64 + +(func $syscall$js.PrintI32 (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_i32(v) + local.get $v + call $syscall$js.__import__print_i32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintI32 + +(func $syscall$js.PrintI64 (param $v i64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_i64(v) + local.get $v + call $syscall$js.__import__print_i64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintI64 + +(func $syscall$js.PrintRune (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_rune(v) + local.get $v + call $syscall$js.__import__print_rune + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintRune + +(func $syscall$js.PrintString (param $s.0 i32) (param $s.1 i32) (param $s.2 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + (local $$t1 i32) + (local $$t2 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__linkname__string_to_ptr(s) + local.get $s.0 + local.get $s.1 + local.get $s.2 + call $$syscall/js.__linkname__string_to_ptr + local.set $$t0 + + ;;len(s) + local.get $s.2 + local.set $$t1 + + ;;convert i32 <- int (t1) + local.get $$t1 + local.set $$t2 + + ;;__import__print_str(t0, t2) + local.get $$t0 + local.get $$t2 + call $syscall$js.__import__print_str + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintString + +(func $syscall$js.PrintU32 (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_u32(v) + local.get $v + call $syscall$js.__import__print_u32 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintU32 + +(func $syscall$js.PrintU32Ptr (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_ptr(v) + local.get $v + call $syscall$js.__import__print_ptr + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintU32Ptr + +(func $syscall$js.PrintU64 (param $v i64) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_u64(v) + local.get $v + call $syscall$js.__import__print_u64 + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.PrintU64 + +(func $syscall$js.ProcExit (param $v i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__proc_exit(v) + local.get $v + call $syscall$js.__import__proc_exit + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.ProcExit + +(func $syscall$js.Puts (param $ptr i32) (param $len i32) + (local $$block_selector i32) + (local $$current_block i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;__import__print_str(ptr, len) + local.get $ptr + local.get $len + call $syscall$js.__import__print_str + + ;;return + br $$BlockFnBody + + end ;;$Block_0 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.Puts + +(func $syscall$js.init + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;*init$guard + global.get $syscall$js.init$guard + local.set $$t0 + + ;;if t0 goto 2 else 1 + local.get $$t0 + if + br $$Block_1 + else + br $$Block_0 + end + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;*init$guard = true:bool + i32.const 1 + global.set $syscall$js.init$guard + + ;;jump 2 + br $$Block_1 + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + end ;;$BlockDisp + end ;;$BlockFnBody +) ;;syscall$js.init + +(func $$u8.$slice.append (param $x.0 i32) (param $x.1 i32) (param $x.2 i32) (param $x.3 i32) (param $y.0 i32) (param $y.1 i32) (param $y.2 i32) (param $y.3 i32) (result i32 i32 i32 i32) + (local $item i32) + (local $x_len i32) + (local $y_len i32) + (local $new_len i32) + (local $src i32) + (local $dest i32) + (local $new_cap i32) + local.get $x.2 + local.set $x_len + local.get $y.2 + local.set $y_len + local.get $x_len + local.get $y_len + i32.add + local.set $new_len + local.get $new_len + local.get $x.3 + i32.le_u + if (result i32 i32 i32 i32) + local.get $x.0 + call $runtime.Block.Retain + local.get $x.1 + local.get $new_len + local.get $x.3 + local.get $y.1 + local.set $src + local.get $x.1 + i32.const 1 + local.get $x_len + i32.mul + i32.add + local.set $dest + block $block1 + loop $loop1 + local.get $y_len + i32.eqz + if + br $block1 + else + end + local.get $src + i32.load8_u offset=0 align=1 + local.set $item + local.get $dest + local.get $item + i32.store8 offset=0 align=1 + local.get $src + i32.const 1 + i32.add + local.set $src + local.get $dest + i32.const 1 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop1 + end ;;loop1 + end ;;block1 + else + local.get $new_len + i32.const 2 + i32.mul + local.set $new_cap + local.get $new_cap + i32.const 1 + i32.mul + i32.const 16 + i32.add + call $runtime.HeapAlloc + local.get $new_cap + i32.const 0 + i32.const 1 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + call $runtime.DupI32 + local.set $dest + local.get $new_len + local.get $new_cap + local.get $x.1 + local.set $src + block $block2 + loop $loop2 + local.get $x_len + i32.eqz + if + br $block2 + else + end + local.get $src + i32.load8_u offset=0 align=1 + local.set $item + local.get $dest + local.get $item + i32.store8 offset=0 align=1 + local.get $src + i32.const 1 + i32.add + local.set $src + local.get $dest + i32.const 1 + i32.add + local.set $dest + local.get $x_len + i32.const 1 + i32.sub + local.set $x_len + br $loop2 + end ;;loop2 + end ;;block2 + local.get $y.1 + local.set $src + block $block3 + loop $loop3 + local.get $y_len + i32.eqz + if + br $block3 + else + end + local.get $src + i32.load8_u offset=0 align=1 + local.set $item + local.get $dest + local.get $item + i32.store8 offset=0 align=1 + local.get $src + i32.const 1 + i32.add + local.set $src + local.get $dest + i32.const 1 + i32.add + local.set $dest + local.get $y_len + i32.const 1 + i32.sub + local.set $y_len + br $loop3 + end ;;loop3 + end ;;block3 + end +) ;;$u8.$slice.append + +(func $brainfuck$bfpkg.BrainFuck.Run (param $this.0 i32) (param $this.1 i32) (result i32 i32 i32 i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$ret_0.0 i32) + (local $$ret_0.1 i32) + (local $$ret_0.2 i32) + (local $$ret_0.3 i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t1.3 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3.0 i32) + (local $$t3.1 i32) + (local $$t3.2 i32) + (local $$t4.0 i32) + (local $$t4.1 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8.0 i32) + (local $$t8.1 i32) + (local $$t8.2 i32) + (local $$t8.3 i32) + (local $$t9.0 i32) + (local $$t9.1 i32) + (local $$t9.2 i32) + (local $$t9.3 i32) + (local $$t10.0 i32) + (local $$t10.1 i32) + (local $$t11 i32) + (local $$t12.0 i32) + (local $$t12.1 i32) + (local $$t13.0 i32) + (local $$t13.1 i32) + (local $$t13.2 i32) + (local $$t14 i32) + (local $$t15 i32) + (local $$t16.0 i32) + (local $$t16.1 i32) + (local $$t16.2 i32) + (local $$t16.3 i32) + (local $$t17.0 i32) + (local $$t17.1 i32) + (local $$t18 i32) + (local $$t19 i32) + (local $$t20.0 i32) + (local $$t20.1 i32) + (local $$t21 i32) + (local $$t22 i32) + (local $$t23.0 i32) + (local $$t23.1 i32) + (local $$t24 i32) + (local $$t25 i32) + (local $$t26 i32) + (local $$t27.0 i32) + (local $$t27.1 i32) + (local $$t28.0 i32) + (local $$t28.1 i32) + (local $$t29 i32) + (local $$t30.0 i32) + (local $$t30.1 i32) + (local $$t31 i32) + (local $$t32 i32) + (local $$t33 i32) + (local $$t34.0 i32) + (local $$t34.1 i32) + (local $$t35.0 i32) + (local $$t35.1 i32) + (local $$t36 i32) + (local $$t37.0 i32) + (local $$t37.1 i32) + (local $$t38 i32) + (local $$t39 i32) + (local $$t40 i32) + (local $$t41.0 i32) + (local $$t41.1 i32) + (local $$t42.0 i32) + (local $$t42.1 i32) + (local $$t43 i32) + (local $$t44.0 i32) + (local $$t44.1 i32) + (local $$t45 i32) + (local $$t46 i32) + (local $$t47 i32) + (local $$t48.0 i32) + (local $$t48.1 i32) + (local $$t49.0 i32) + (local $$t49.1 i32) + (local $$t50 i32) + (local $$t51.0 i32) + (local $$t51.1 i32) + (local $$t52 i32) + (local $$t53 i32) + (local $$t54 i32) + (local $$t55.0 i32) + (local $$t55.1 i32) + (local $$t56.0 i32) + (local $$t56.1 i32) + (local $$t57 i32) + (local $$t58.0 i32) + (local $$t58.1 i32) + (local $$t59 i32) + (local $$t60.0 i32) + (local $$t60.1 i32) + (local $$t61.0 i32) + (local $$t61.1 i32) + (local $$t62.0 i32) + (local $$t62.1 i32) + (local $$t62.2 i32) + (local $$t62.3 i32) + (local $$t63 i32) + (local $$t64 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_20 + block $$Block_19 + block $$Block_18 + block $$Block_17 + block $$Block_16 + block $$Block_15 + block $$Block_14 + block $$Block_13 + block $$Block_12 + block $$Block_11 + block $$Block_10 + block $$Block_9 + block $$Block_8 + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;new [64]byte (makeslice) + i32.const 80 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 64 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;slice t0[:0:int] + local.get $$t0.0 + call $runtime.Block.Retain + local.get $$t0.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + i32.const 0 + i32.const 0 + i32.sub + i32.const 64 + i32.const 0 + i32.sub + local.set $$t1.3 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;jump 3 + br $$Block_2 + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&this.code [#1] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30000 + i32.add + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;*t2 + local.get $$t2.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t2.1 + i32.load offset=4 align=4 + local.get $$t2.1 + i32.load offset=8 align=4 + local.set $$t3.2 + local.set $$t3.1 + local.get $$t3.0 + call $runtime.Block.Release + local.set $$t3.0 + + ;;&this.pc [#3] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30016 + i32.add + local.set $$t4.1 + local.get $$t4.0 + call $runtime.Block.Release + local.set $$t4.0 + + ;;*t4 + local.get $$t4.1 + i32.load offset=0 align=4 + local.set $$t5 + + ;;t3[t5] + local.get $$t3.1 + local.get $$t5 + i32.add + i32.load8_u offset=0 align=1 + local.set $$t6 + + ;;t6 == 62:byte + local.get $$t6 + i32.const 62 + i32.eq + local.set $$t7 + + ;;if t7 goto 5 else 7 + local.get $$t7 + if + br $$Block_4 + else + br $$Block_6 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return t8 + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + local.set $$ret_0.3 + local.set $$ret_0.2 + local.set $$ret_0.1 + local.get $$ret_0.0 + call $runtime.Block.Release + local.set $$ret_0.0 + br $$BlockFnBody + + end ;;$Block_2 + ;;phi [0: t1, 4: t15] #output + local.get $$current_block + i32.const 0 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t1.0 + call $runtime.Block.Retain + local.get $$t1.1 + local.get $$t1.2 + local.get $$t1.3 + else + local.get $$t9.0 + call $runtime.Block.Retain + local.get $$t9.1 + local.get $$t9.2 + local.get $$t9.3 + end + local.set $$t8.3 + local.set $$t8.2 + local.set $$t8.1 + local.get $$t8.0 + call $runtime.Block.Release + local.set $$t8.0 + + i32.const 3 + local.set $$current_block + + ;;&this.pc [#3] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30016 + i32.add + local.set $$t10.1 + local.get $$t10.0 + call $runtime.Block.Release + local.set $$t10.0 + + ;;*t9 + local.get $$t10.1 + i32.load offset=0 align=4 + local.set $$t11 + + ;;&this.code [#1] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30000 + i32.add + local.set $$t12.1 + local.get $$t12.0 + call $runtime.Block.Release + local.set $$t12.0 + + ;;*t11 + local.get $$t12.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t12.1 + i32.load offset=4 align=4 + local.get $$t12.1 + i32.load offset=8 align=4 + local.set $$t13.2 + local.set $$t13.1 + local.get $$t13.0 + call $runtime.Block.Release + local.set $$t13.0 + + ;;len(t12) + local.get $$t13.2 + local.set $$t14 + + ;;t10 != t13 + local.get $$t11 + local.get $$t14 + i32.eq + i32.eqz + local.set $$t15 + + ;;if t14 goto 1 else 2 + local.get $$t15 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + ;;phi [5: t8, 6: t8, 8: t8, 10: t8, 12: t8, 14: t8, 17: t63, 20: t8, 16: t8, 19: t8] #output + local.get $$current_block + i32.const 5 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 6 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 8 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 10 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 12 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 14 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 17 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t16.0 + call $runtime.Block.Retain + local.get $$t16.1 + local.get $$t16.2 + local.get $$t16.3 + else + local.get $$current_block + i32.const 20 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$current_block + i32.const 16 + i32.eq + if (result i32 i32 i32 i32) + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + else + local.get $$t8.0 + call $runtime.Block.Retain + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + end + end + end + end + end + end + end + end + end + local.set $$t9.3 + local.set $$t9.2 + local.set $$t9.1 + local.get $$t9.0 + call $runtime.Block.Release + local.set $$t9.0 + + i32.const 4 + local.set $$current_block + + ;;&this.pc [#3] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30016 + i32.add + local.set $$t17.1 + local.get $$t17.0 + call $runtime.Block.Release + local.set $$t17.0 + + ;;*t16 + local.get $$t17.1 + i32.load offset=0 align=4 + local.set $$t18 + + ;;t17 + 1:int + local.get $$t18 + i32.const 1 + i32.add + local.set $$t19 + + ;;*t16 = t18 + local.get $$t17.1 + local.get $$t19 + i32.store offset=0 align=4 + + ;;jump 3 + i32.const 3 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t20.1 + local.get $$t20.0 + call $runtime.Block.Release + local.set $$t20.0 + + ;;*t19 + local.get $$t20.1 + i32.load offset=0 align=4 + local.set $$t21 + + ;;t20 + 1:int + local.get $$t21 + i32.const 1 + i32.add + local.set $$t22 + + ;;*t19 = t21 + local.get $$t20.1 + local.get $$t22 + i32.store offset=0 align=4 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t23.1 + local.get $$t23.0 + call $runtime.Block.Release + local.set $$t23.0 + + ;;*t22 + local.get $$t23.1 + i32.load offset=0 align=4 + local.set $$t24 + + ;;t23 - 1:int + local.get $$t24 + i32.const 1 + i32.sub + local.set $$t25 + + ;;*t22 = t24 + local.get $$t23.1 + local.get $$t25 + i32.store offset=0 align=4 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;t6 == 60:byte + local.get $$t6 + i32.const 60 + i32.eq + local.set $$t26 + + ;;if t25 goto 6 else 9 + local.get $$t26 + if + i32.const 6 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_8 + end + + end ;;$Block_7 + i32.const 8 + local.set $$current_block + + ;;&this.mem [#0] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 0 + i32.add + local.set $$t27.1 + local.get $$t27.0 + call $runtime.Block.Release + local.set $$t27.0 + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t28.1 + local.get $$t28.0 + call $runtime.Block.Release + local.set $$t28.0 + + ;;*t27 + local.get $$t28.1 + i32.load offset=0 align=4 + local.set $$t29 + + ;;&t26[t28] + local.get $$t27.0 + call $runtime.Block.Retain + local.get $$t27.1 + i32.const 1 + local.get $$t29 + i32.mul + i32.add + local.set $$t30.1 + local.get $$t30.0 + call $runtime.Block.Release + local.set $$t30.0 + + ;;*t29 + local.get $$t30.1 + i32.load8_u offset=0 align=1 + local.set $$t31 + + ;;t30 + 1:byte + local.get $$t31 + i32.const 1 + i32.add + i32.const 255 + i32.and + local.set $$t32 + + ;;*t29 = t31 + local.get $$t30.1 + local.get $$t32 + i32.store8 offset=0 align=1 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_8 + i32.const 9 + local.set $$current_block + + ;;t6 == 43:byte + local.get $$t6 + i32.const 43 + i32.eq + local.set $$t33 + + ;;if t32 goto 8 else 11 + local.get $$t33 + if + i32.const 8 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_10 + end + + end ;;$Block_9 + i32.const 10 + local.set $$current_block + + ;;&this.mem [#0] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 0 + i32.add + local.set $$t34.1 + local.get $$t34.0 + call $runtime.Block.Release + local.set $$t34.0 + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t35.1 + local.get $$t35.0 + call $runtime.Block.Release + local.set $$t35.0 + + ;;*t34 + local.get $$t35.1 + i32.load offset=0 align=4 + local.set $$t36 + + ;;&t33[t35] + local.get $$t34.0 + call $runtime.Block.Retain + local.get $$t34.1 + i32.const 1 + local.get $$t36 + i32.mul + i32.add + local.set $$t37.1 + local.get $$t37.0 + call $runtime.Block.Release + local.set $$t37.0 + + ;;*t36 + local.get $$t37.1 + i32.load8_u offset=0 align=1 + local.set $$t38 + + ;;t37 - 1:byte + local.get $$t38 + i32.const 1 + i32.sub + i32.const 255 + i32.and + local.set $$t39 + + ;;*t36 = t38 + local.get $$t37.1 + local.get $$t39 + i32.store8 offset=0 align=1 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_10 + i32.const 11 + local.set $$current_block + + ;;t6 == 45:byte + local.get $$t6 + i32.const 45 + i32.eq + local.set $$t40 + + ;;if t39 goto 10 else 13 + local.get $$t40 + if + i32.const 10 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_12 + end + + end ;;$Block_11 + i32.const 12 + local.set $$current_block + + ;;&this.mem [#0] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 0 + i32.add + local.set $$t41.1 + local.get $$t41.0 + call $runtime.Block.Release + local.set $$t41.0 + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t42.1 + local.get $$t42.0 + call $runtime.Block.Release + local.set $$t42.0 + + ;;*t41 + local.get $$t42.1 + i32.load offset=0 align=4 + local.set $$t43 + + ;;&t40[t42] + local.get $$t41.0 + call $runtime.Block.Retain + local.get $$t41.1 + i32.const 1 + local.get $$t43 + i32.mul + i32.add + local.set $$t44.1 + local.get $$t44.0 + call $runtime.Block.Release + local.set $$t44.0 + + ;;*t43 + local.get $$t44.1 + i32.load8_u offset=0 align=1 + local.set $$t45 + + ;;t44 == 0:byte + local.get $$t45 + i32.const 0 + i32.eq + local.set $$t46 + + ;;if t45 goto 16 else 4 + local.get $$t46 + if + br $$Block_15 + else + i32.const 4 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_12 + i32.const 13 + local.set $$current_block + + ;;t6 == 91:byte + local.get $$t6 + i32.const 91 + i32.eq + local.set $$t47 + + ;;if t46 goto 12 else 15 + local.get $$t47 + if + i32.const 12 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_14 + end + + end ;;$Block_13 + i32.const 14 + local.set $$current_block + + ;;&this.mem [#0] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 0 + i32.add + local.set $$t48.1 + local.get $$t48.0 + call $runtime.Block.Release + local.set $$t48.0 + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t49.1 + local.get $$t49.0 + call $runtime.Block.Release + local.set $$t49.0 + + ;;*t48 + local.get $$t49.1 + i32.load offset=0 align=4 + local.set $$t50 + + ;;&t47[t49] + local.get $$t48.0 + call $runtime.Block.Retain + local.get $$t48.1 + i32.const 1 + local.get $$t50 + i32.mul + i32.add + local.set $$t51.1 + local.get $$t51.0 + call $runtime.Block.Release + local.set $$t51.0 + + ;;*t50 + local.get $$t51.1 + i32.load8_u offset=0 align=1 + local.set $$t52 + + ;;t51 != 0:byte + local.get $$t52 + i32.const 0 + i32.eq + i32.eqz + local.set $$t53 + + ;;if t52 goto 19 else 4 + local.get $$t53 + if + br $$Block_18 + else + i32.const 4 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_14 + i32.const 15 + local.set $$current_block + + ;;t6 == 93:byte + local.get $$t6 + i32.const 93 + i32.eq + local.set $$t54 + + ;;if t53 goto 14 else 18 + local.get $$t54 + if + i32.const 14 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_17 + end + + end ;;$Block_15 + i32.const 16 + local.set $$current_block + + ;;(*BrainFuck).loop(this, 1:int) + local.get $this.0 + local.get $this.1 + i32.const 1 + call $brainfuck$bfpkg.BrainFuck.loop + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_16 + i32.const 17 + local.set $$current_block + + ;;&this.mem [#0] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 0 + i32.add + local.set $$t55.1 + local.get $$t55.0 + call $runtime.Block.Release + local.set $$t55.0 + + ;;&this.pos [#2] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30012 + i32.add + local.set $$t56.1 + local.get $$t56.0 + call $runtime.Block.Release + local.set $$t56.0 + + ;;*t56 + local.get $$t56.1 + i32.load offset=0 align=4 + local.set $$t57 + + ;;&t55[t57] + local.get $$t55.0 + call $runtime.Block.Retain + local.get $$t55.1 + i32.const 1 + local.get $$t57 + i32.mul + i32.add + local.set $$t58.1 + local.get $$t58.0 + call $runtime.Block.Release + local.set $$t58.0 + + ;;*t58 + local.get $$t58.1 + i32.load8_u offset=0 align=1 + local.set $$t59 + + ;;new [1]byte (varargs) + i32.const 17 + call $runtime.HeapAlloc + i32.const 1 + i32.const 0 + i32.const 1 + call $runtime.Block.Init + call $runtime.DupI32 + i32.const 16 + i32.add + local.set $$t60.1 + local.get $$t60.0 + call $runtime.Block.Release + local.set $$t60.0 + + ;;&t60[0:int] + local.get $$t60.0 + call $runtime.Block.Retain + local.get $$t60.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + local.set $$t61.1 + local.get $$t61.0 + call $runtime.Block.Release + local.set $$t61.0 + + ;;*t61 = t59 + local.get $$t61.1 + local.get $$t59 + i32.store8 offset=0 align=1 + + ;;slice t60[:] + local.get $$t60.0 + call $runtime.Block.Retain + local.get $$t60.1 + i32.const 1 + i32.const 0 + i32.mul + i32.add + i32.const 1 + i32.const 0 + i32.sub + i32.const 1 + i32.const 0 + i32.sub + local.set $$t62.3 + local.set $$t62.2 + local.set $$t62.1 + local.get $$t62.0 + call $runtime.Block.Release + local.set $$t62.0 + + ;;append(t8, t62...) + local.get $$t8.0 + local.get $$t8.1 + local.get $$t8.2 + local.get $$t8.3 + local.get $$t62.0 + local.get $$t62.1 + local.get $$t62.2 + local.get $$t62.3 + call $$u8.$slice.append + local.set $$t16.3 + local.set $$t16.2 + local.set $$t16.1 + local.get $$t16.0 + call $runtime.Block.Release + local.set $$t16.0 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_17 + i32.const 18 + local.set $$current_block + + ;;t6 == 46:byte + local.get $$t6 + i32.const 46 + i32.eq + local.set $$t63 + + ;;if t64 goto 17 else 20 + local.get $$t63 + if + i32.const 17 + local.set $$block_selector + br $$BlockDisp + else + br $$Block_19 + end + + end ;;$Block_18 + i32.const 19 + local.set $$current_block + + ;;(*BrainFuck).loop(this, -1:int) + local.get $this.0 + local.get $this.1 + i32.const -1 + call $brainfuck$bfpkg.BrainFuck.loop + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_19 + i32.const 20 + local.set $$current_block + + ;;t6 == 44:byte + local.get $$t6 + i32.const 44 + i32.eq + local.set $$t64 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_20 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$ret_0.0 + call $runtime.Block.Retain + local.get $$ret_0.1 + local.get $$ret_0.2 + local.get $$ret_0.3 + local.get $$ret_0.0 + call $runtime.Block.Release + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t3.0 + call $runtime.Block.Release + local.get $$t4.0 + call $runtime.Block.Release + local.get $$t8.0 + call $runtime.Block.Release + local.get $$t9.0 + call $runtime.Block.Release + local.get $$t10.0 + call $runtime.Block.Release + local.get $$t12.0 + call $runtime.Block.Release + local.get $$t13.0 + call $runtime.Block.Release + local.get $$t16.0 + call $runtime.Block.Release + local.get $$t17.0 + call $runtime.Block.Release + local.get $$t20.0 + call $runtime.Block.Release + local.get $$t23.0 + call $runtime.Block.Release + local.get $$t27.0 + call $runtime.Block.Release + local.get $$t28.0 + call $runtime.Block.Release + local.get $$t30.0 + call $runtime.Block.Release + local.get $$t34.0 + call $runtime.Block.Release + local.get $$t35.0 + call $runtime.Block.Release + local.get $$t37.0 + call $runtime.Block.Release + local.get $$t41.0 + call $runtime.Block.Release + local.get $$t42.0 + call $runtime.Block.Release + local.get $$t44.0 + call $runtime.Block.Release + local.get $$t48.0 + call $runtime.Block.Release + local.get $$t49.0 + call $runtime.Block.Release + local.get $$t51.0 + call $runtime.Block.Release + local.get $$t55.0 + call $runtime.Block.Release + local.get $$t56.0 + call $runtime.Block.Release + local.get $$t58.0 + call $runtime.Block.Release + local.get $$t60.0 + call $runtime.Block.Release + local.get $$t61.0 + call $runtime.Block.Release + local.get $$t62.0 + call $runtime.Block.Release +) ;;brainfuck$bfpkg.BrainFuck.Run + +(func $brainfuck$bfpkg.BrainFuck.loop (param $this.0 i32) (param $this.1 i32) (param $inc i32) + (local $$block_selector i32) + (local $$current_block i32) + (local $$t0.0 i32) + (local $$t0.1 i32) + (local $$t1.0 i32) + (local $$t1.1 i32) + (local $$t1.2 i32) + (local $$t2.0 i32) + (local $$t2.1 i32) + (local $$t3 i32) + (local $$t4 i32) + (local $$t5 i32) + (local $$t6 i32) + (local $$t7 i32) + (local $$t8 i32) + (local $$t9 i32) + (local $$t10 i32) + (local $$t11 i32) + (local $$t12.0 i32) + (local $$t12.1 i32) + (local $$t13 i32) + (local $$t14 i32) + (local $$t15 i32) + block $$BlockFnBody + loop $$BlockDisp + block $$Block_7 + block $$Block_6 + block $$Block_5 + block $$Block_4 + block $$Block_3 + block $$Block_2 + block $$Block_1 + block $$Block_0 + block $$BlockSel + local.get $$block_selector + br_table 0 1 2 3 4 5 6 7 0 + end ;;$BlockSel + i32.const 0 + local.set $$current_block + + ;;jump 3 + br $$Block_2 + + end ;;$Block_0 + i32.const 1 + local.set $$current_block + + ;;&this.code [#1] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30000 + i32.add + local.set $$t0.1 + local.get $$t0.0 + call $runtime.Block.Release + local.set $$t0.0 + + ;;*t0 + local.get $$t0.1 + i32.load offset=0 align=4 + call $runtime.Block.Retain + local.get $$t0.1 + i32.load offset=4 align=4 + local.get $$t0.1 + i32.load offset=8 align=4 + local.set $$t1.2 + local.set $$t1.1 + local.get $$t1.0 + call $runtime.Block.Release + local.set $$t1.0 + + ;;&this.pc [#3] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30016 + i32.add + local.set $$t2.1 + local.get $$t2.0 + call $runtime.Block.Release + local.set $$t2.0 + + ;;*t2 + local.get $$t2.1 + i32.load offset=0 align=4 + local.set $$t3 + + ;;t3 + inc + local.get $$t3 + local.get $inc + i32.add + local.set $$t4 + + ;;t1[t4] + local.get $$t1.1 + local.get $$t4 + i32.add + i32.load8_u offset=0 align=1 + local.set $$t5 + + ;;t5 == 91:byte + local.get $$t5 + i32.const 91 + i32.eq + local.set $$t6 + + ;;if t6 goto 5 else 7 + local.get $$t6 + if + br $$Block_4 + else + br $$Block_6 + end + + end ;;$Block_1 + i32.const 2 + local.set $$current_block + + ;;return + br $$BlockFnBody + + end ;;$Block_2 + ;;phi [0: inc, 4: t9] #i + local.get $$current_block + i32.const 0 + i32.eq + if (result i32) + local.get $inc + else + local.get $$t7 + end + local.set $$t8 + + i32.const 3 + local.set $$current_block + + ;;t7 != 0:int + local.get $$t8 + i32.const 0 + i32.eq + i32.eqz + local.set $$t9 + + ;;if t8 goto 1 else 2 + local.get $$t9 + if + i32.const 1 + local.set $$block_selector + br $$BlockDisp + else + i32.const 2 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_3 + ;;phi [5: t13, 6: t14, 7: t7] #i + local.get $$current_block + i32.const 5 + i32.eq + if (result i32) + local.get $$t10 + else + local.get $$current_block + i32.const 6 + i32.eq + if (result i32) + local.get $$t11 + else + local.get $$t8 + end + end + local.set $$t7 + + i32.const 4 + local.set $$current_block + + ;;&this.pc [#3] + local.get $this.0 + call $runtime.Block.Retain + local.get $this.1 + i32.const 30016 + i32.add + local.set $$t12.1 + local.get $$t12.0 + call $runtime.Block.Release + local.set $$t12.0 + + ;;*t10 + local.get $$t12.1 + i32.load offset=0 align=4 + local.set $$t13 + + ;;t11 + inc + local.get $$t13 + local.get $inc + i32.add + local.set $$t14 + + ;;*t10 = t12 + local.get $$t12.1 + local.get $$t14 + i32.store offset=0 align=4 + + ;;jump 3 + i32.const 3 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_4 + i32.const 5 + local.set $$current_block + + ;;t7 + 1:int + local.get $$t8 + i32.const 1 + i32.add + local.set $$t10 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_5 + i32.const 6 + local.set $$current_block + + ;;t7 - 1:int + local.get $$t8 + i32.const 1 + i32.sub + local.set $$t11 + + ;;jump 4 + i32.const 4 + local.set $$block_selector + br $$BlockDisp + + end ;;$Block_6 + i32.const 7 + local.set $$current_block + + ;;t5 == 93:byte + local.get $$t5 + i32.const 93 + i32.eq + local.set $$t15 + + ;;if t15 goto 6 else 4 + local.get $$t15 + if + i32.const 6 + local.set $$block_selector + br $$BlockDisp + else + i32.const 4 + local.set $$block_selector + br $$BlockDisp + end + + end ;;$Block_7 + end ;;$BlockDisp + end ;;$BlockFnBody + local.get $$t0.0 + call $runtime.Block.Release + local.get $$t1.0 + call $runtime.Block.Release + local.get $$t2.0 + call $runtime.Block.Release + local.get $$t12.0 + call $runtime.Block.Release +) ;;brainfuck$bfpkg.BrainFuck.loop + +(func $_start (export "_start") + call $brainfuck.init +) ;;_start + +(func $_main (export "_main") + call $brainfuck.main +) ;;_main +) ;;module \ No newline at end of file diff --git a/brainfuck/index.html b/brainfuck/index.html new file mode 100644 index 00000000..6649515f --- /dev/null +++ b/brainfuck/index.html @@ -0,0 +1,33 @@ + + +
+ + +Blog post / tutorial is at: https://wa-lang.org/smalltalk/st0013.html.
+ +Output
+ + + + + + + diff --git a/codestyle.md b/codestyle.md new file mode 100644 index 00000000..ade34e39 --- /dev/null +++ b/codestyle.md @@ -0,0 +1,12 @@ +# 代码风格(仅参考) + +为了便于调试,不同的模块可以在 config 包增加 Trace 开关,然后针对每个返回 err 的地方输出日志。 +比如 `config.EnableTrace_loader` 标注 loader 模块: + +```go + logger.Trace(&config.EnableTrace_loader, "import "+manifest.MainPkg) + if _, err := p.Import(manifest.MainPkg); err != nil { + logger.Tracef(&config.EnableTrace_loader, "err: %v", err) + return nil, err + } +``` diff --git a/goals.md b/goals.md new file mode 100644 index 00000000..a36573c8 --- /dev/null +++ b/goals.md @@ -0,0 +1,79 @@ +# 凹语言™项目目标 + +本项目的发起人(柴树杉、丁尔男、史斌)均是Gopher,在开发实践中,因为不同的原因,先后萌生了发展一门新语言的想法,Go 语言克制的风格是我们对于编程语言审美的最大公约数,因此选择它作为初始的蓝本。不必讳言:本项目启动时大量借鉴了 Go 的设计思想和具体实现——这是在有限投入下不得不作出的折衷,我们希望随着项目的发展,积累更多原创的设计,为自主创新的大潮贡献一点力量。 + +纵观编程界,没有哪门被广泛使用的通用语言诞生于KPI制度之下。本项目作为个人业余项目,不存在明确的指标,从成果分类的角度,我们希望在第一阶段完成以下目标: + +- 确定凹语言™语法规则 +- 实现可用的凹语言™编译器 +- 使用凹语言™创建一个网页应用 + +--- + +## 凹语言™特性——预期 + +凹语言™包含两套相互等价的语法:凹语法与 WaGo 语法,这里“等价”的含义是:二者可生成相同的AST并无损的互相转换。使用凹语法编写的源文件后缀为 `.wa`,使用 WaGo 语法编写的源文件后缀为 `.wa.go`。WaGo 语法是 Go 语法的真子集,换句话说:一个合法的 WaGo 包必然是合法的 Go 包。 + +网页应用是我们很重视的目标场景,这与 Go 语言把服务端作为主战场截然不同,WaGo 裁减掉的部分多半与此相关: + +* WaGo 没有 `go` 关键字,不支持goroutine/并发 +* WaGo 没有 `chan` 关键字,不支持与之相关的管道操作 +* WaGo 没有全局GC——但**可能**会提供自动RC以尽可能简化内存管理 +* WaGo 没有内置标准库——即使有,规模也极其有限 + +WaGo 的数据类型如下表: + +|字符串(string)|数组(array)|切片(slice)|复数(complex)|哈希表(map)|结构体(struct)| +|:-:|:-:|:-:|:-:|:-:|:-:| +|有|有|有|可能有|可能有|有| + +WaGo 的其他特性如下表: + +|多返回值|方法|方法值|接口|闭包|反射| +|:-:|:-:|:-:|:-:|:-:|:-:| +|有|有|可能无|有|可能有|可能有| + +> 各特性的实现可能性从高到底排列为:有 > 可能无 > 可能有 > 无 + +通过以上描述,大致可以勾勒出 WaGo 的轮廓。凹语法在AST层面与 WaGo 等价的同时,最显著的变化是增加了中文关键字。对于凹语法将来的发展,我们持开放态度。 + +--- + +## 凹编译器实现——路线 + +凹编译器的工作过程如下图所示: + +```mermaid +graph LR + wa_ext(.wa); + wago_ext(.wa.go); + + wa_ast(Wa AST); + + c_cpp(C/C++); + wasm(WASM); + + wa_ext --> wa_ast; + wago_ext --> wa_ast; + + wa_ast --> c_cpp; + wa_ast --> wasm; +``` + +凹编译器支持 C/C++、WASM 等多种输出以满足不同的目标场景。当前阶段的主要任务: +- 创建编译器框架 +- 确定前中后端模块间的接口 +- 设计能满足语法特性基线的运行时模型 + +每种后端的进度互相独立,但显然目标代码越底层,需要考虑的细节也越多,因此在落地语法特性时,采用先高级目标后低级目标的顺序有利于问题的逐步降解。 + +各后端可能的应用场景: + +- C/C++:凹语言™与 C/C++ 混合开发 +- WASM:直接编译为WebAssembly模块 + +当任一后端模块覆盖“可用最小集”,我们将尝试开发一些简单的网页示例,待选的方向有交互式图形图像、在线编译等。 + +--- + +2022.7.23 \ No newline at end of file diff --git a/images/2048-w4-01.jpg b/images/2048-w4-01.jpg new file mode 100644 index 00000000..f494ab0a Binary files /dev/null and b/images/2048-w4-01.jpg differ diff --git a/images/arduino-nano33-01.png b/images/arduino-nano33-01.png new file mode 100644 index 00000000..3651b3eb Binary files /dev/null and b/images/arduino-nano33-01.png differ diff --git a/images/logo/logo-2019.png b/images/logo/logo-2019.png new file mode 100644 index 00000000..1e346429 Binary files /dev/null and b/images/logo/logo-2019.png differ diff --git a/images/logo/logo-2019.svg b/images/logo/logo-2019.svg new file mode 100644 index 00000000..de8030cb --- /dev/null +++ b/images/logo/logo-2019.svg @@ -0,0 +1,31 @@ + + + diff --git a/images/logo/logo-animate1-blue.svg b/images/logo/logo-animate1-blue.svg new file mode 100644 index 00000000..74cd41c0 --- /dev/null +++ b/images/logo/logo-animate1-blue.svg @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/images/logo/logo-animate1.svg b/images/logo/logo-animate1.svg new file mode 100644 index 00000000..a362d983 --- /dev/null +++ b/images/logo/logo-animate1.svg @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/images/logo/logo-animate2.svg b/images/logo/logo-animate2.svg new file mode 100644 index 00000000..1d82228f --- /dev/null +++ b/images/logo/logo-animate2.svg @@ -0,0 +1,24 @@ + + + diff --git a/images/logo/logo-black.png b/images/logo/logo-black.png new file mode 100644 index 00000000..68da850d Binary files /dev/null and b/images/logo/logo-black.png differ diff --git a/images/logo/logo-black.svg b/images/logo/logo-black.svg new file mode 100644 index 00000000..333a8336 --- /dev/null +++ b/images/logo/logo-black.svg @@ -0,0 +1,31 @@ + + + diff --git a/images/logo/logo-round-color-LightSeaGreen.png b/images/logo/logo-round-color-LightSeaGreen.png new file mode 100644 index 00000000..52ef6b0f Binary files /dev/null and b/images/logo/logo-round-color-LightSeaGreen.png differ diff --git a/images/logo/logo-round-color-LightSeaGreen.svg b/images/logo/logo-round-color-LightSeaGreen.svg new file mode 100644 index 00000000..3029bca2 --- /dev/null +++ b/images/logo/logo-round-color-LightSeaGreen.svg @@ -0,0 +1,32 @@ + + + + diff --git a/images/logo/logo-round.svg b/images/logo/logo-round.svg new file mode 100644 index 00000000..e400e92b --- /dev/null +++ b/images/logo/logo-round.svg @@ -0,0 +1,31 @@ + + + diff --git a/images/logo/logo-white.png b/images/logo/logo-white.png new file mode 100644 index 00000000..91d25d63 Binary files /dev/null and b/images/logo/logo-white.png differ diff --git a/images/logo/logo-white.svg b/images/logo/logo-white.svg new file mode 100644 index 00000000..4d761928 --- /dev/null +++ b/images/logo/logo-white.svg @@ -0,0 +1,31 @@ + + + diff --git a/images/logo/logo.png b/images/logo/logo.png new file mode 100644 index 00000000..0bf1caf0 Binary files /dev/null and b/images/logo/logo.png differ diff --git a/images/logo/logo.svg b/images/logo/logo.svg new file mode 100644 index 00000000..cf660bc8 --- /dev/null +++ b/images/logo/logo.svg @@ -0,0 +1,31 @@ + + + diff --git a/images/logo/logo.txt b/images/logo/logo.txt new file mode 100644 index 00000000..75825899 --- /dev/null +++ b/images/logo/logo.txt @@ -0,0 +1,7 @@ ++---+ +---+ +| o | | o | +| +----+ | +| | +| \/\/ | +| | ++------------+ diff --git a/images/logo/logo1024.txt b/images/logo/logo1024.txt new file mode 100644 index 00000000..27d39c7d --- /dev/null +++ b/images/logo/logo1024.txt @@ -0,0 +1,7 @@ ++---+ +---+ +| o | | o | +| +----+ | +| | +| 1024 | +| | ++------------+ diff --git a/images/nes-01.png b/images/nes-01.png new file mode 100644 index 00000000..c4d04cc7 Binary files /dev/null and b/images/nes-01.png differ diff --git a/images/p5wa-01.png b/images/p5wa-01.png new file mode 100644 index 00000000..5cf66253 Binary files /dev/null and b/images/p5wa-01.png differ diff --git a/images/playground-01.png b/images/playground-01.png new file mode 100644 index 00000000..5042db42 Binary files /dev/null and b/images/playground-01.png differ diff --git a/images/proc.png b/images/proc.png new file mode 100644 index 00000000..8467547d Binary files /dev/null and b/images/proc.png differ diff --git a/images/snake-01.jpg b/images/snake-01.jpg new file mode 100644 index 00000000..bbfd426a Binary files /dev/null and b/images/snake-01.jpg differ diff --git a/images/snake-w4-01.png b/images/snake-w4-01.png new file mode 100644 index 00000000..574982f7 Binary files /dev/null and b/images/snake-w4-01.png differ diff --git a/images/tetris-w4-01.jpg b/images/tetris-w4-01.jpg new file mode 100644 index 00000000..d494014b Binary files /dev/null and b/images/tetris-w4-01.jpg differ diff --git a/images/wasm4-game-snake-2048.png b/images/wasm4-game-snake-2048.png new file mode 100644 index 00000000..a84183d5 Binary files /dev/null and b/images/wasm4-game-snake-2048.png differ diff --git a/images/webgpu-01.png b/images/webgpu-01.png new file mode 100644 index 00000000..c3608435 Binary files /dev/null and b/images/webgpu-01.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..0765b74b --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + +hello https://github.com/wa-lang/wa
+r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;c r.outboundFrame){const v=w-r.outboundFrame;r.outboundFrame=w,r.outboundInputs.splice(0,v)}const g=u+.5*r.ping.average*60/1e3,_=this.rollbackMgr.currentFrame-g;r.drift.update(_),this.rollbackMgr.addInputs(r.playerIdx,b,m)}}break;case 2:{const u=l.getUint32(1);r.sendPingReply(u)}break;case 3:{const u=l.getUint32(1),w=(performance.now()>>>0)-u;r.ping.update(w)}break}}),r}nextPlayerIdx(){t:for(let t=0;t<4;++t)if(this.localPlayerIdx!=t){for(const e of this.remotePlayers.values())if(e.playerIdx==t)continue t;return t}return-1}update(t){if(!this.rollbackMgr)return!1;const e=(this.updateCount&7)==0,s=(this.updateCount&31)==0;++this.updateCount;const i=this.rollbackMgr.currentFrame,r=i+2;this.rollbackMgr.addInputs(this.localPlayerIdx,r,[t]);let c=!1;for(const a of this.remotePlayers.values())a.addOutboundInput(r,t),a.sendTick(i),(a.nextNeededFrame 0;){i.phase--;let r=i.noiseSeed;r^=r>>7,r^=r<<9,r^=r>>13,i.noiseSeed=r,i.noiseLastRandom=((r&1)<<1)-1}n=l*i.noiseLastRandom}else{let r=E/44100,c=i.phase+r;if(c>=1&&c--,i.phase=c,o==2)n=l*(2*Math.abs(2*i.phase-1)-1);else{let d,t,T,k=i.pulseDutyCycle;cl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u=1;){const h=Math.floor(r/a)%85;i+=ss[h],a/=85}r=0}}return i}function ae(o,t){let e=0,s=0,i=0;const n=o.length,r=t.length;if(o.length%5==0)for(;s0?this.outboundInputs[i-1]:0;this.outboundInputs[s]=e}}}sendMessage(t){this.reliableChannel.send(JSON.stringify(t))}sendUnreliableBuffer(t){this.unreliableChannel.send(t)}sendPingRequest(){const t=new DataView(W);t.setUint8(0,2),t.setUint32(1,performance.now()>>>0),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendPingReply(t){const e=new DataView(W);e.setUint8(0,3),e.setUint32(1,t),this.sendUnreliableBuffer(new Uint8Array(W,0,5))}sendTick(t){const e=new DataView(W);e.setUint8(0,1),e.setUint32(1,t),e.setInt8(5,this.nextNeededFrame==0?-127:this.nextNeededFrame-t),e.setInt8(6,this.outboundFrame-t),e.setUint8(7,this.outboundInputs.length);const s=new hs(new Uint8Array(W,8));let i=0;for(const r of this.outboundInputs){const c=i^r;i=r;for(let a=0;a<8;++a)c&1<{const i=Array.from(this.remotePlayers.keys()),n=await this.createRemotePlayer(e,s);n.sendMessage({type:"WELCOME",otherPeers:i}),this.localPlayerIdx>=0&&n.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})})}host(){this.runtime.setNetplay(0),this.rollbackMgr=new ce(1,this.runtime),this.localPlayerIdx=0}join(t){const e=this.peerMgr.connect(t);this.createRemotePlayer(e,t).then(s=>{s.sendMessage({type:"JOIN_REQUEST"})},s=>{this.runtime.blueScreen(`Failed to connect
+to peer. They may
+be offline?`)})}async getInviteLink(){const t=await this.peerMgr.localPeerId,e=window.location;if(e.protocol=="file:"||e.hostname=="localhost"||e.hostname=="127.0.0.1"||e.hostname=="wasm4.org")return`https://wasm4.org/netplay/#${t}`;const s=new URL(e.href);return s.searchParams.set("netplay",t),s.href}close(){for(const t of this.remotePlayers.values())t.close();this.peerMgr.close()}async createRemotePlayer(t,e){function s(a){return new Promise((h,l)=>{const d=t.createDataChannel("WASM-4",a);d.binaryType="arraybuffer",d.onopen=()=>{h(d)},d.onerror=l})}const[i,n]=await Promise.all([s({negotiated:!0,id:0}),s({negotiated:!0,id:1,ordered:!1,maxRetransmits:0})]),r=new us(e,t,i,n);this.remotePlayers.set(e,r);const c=()=>{this.remotePlayers.has(e)&&(this.remotePlayers.delete(e),this.onleave&&r.playerIdx>=0&&this.onleave(r.playerIdx))};return t.addEventListener("connectionstatechange",()=>{t.connectionState=="disconnected"&&c()}),i.addEventListener("close",c),n.addEventListener("close",c),i.addEventListener("message",async a=>{if(typeof a.data!="string")return;const h=JSON.parse(a.data);switch(h.type){case"WELCOME":for(const l of h.otherPeers)if(!this.remotePlayers.has(l)){const d=this.peerMgr.connect(l),u=await this.createRemotePlayer(d,l);this.localPlayerIdx>=0&&u.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx})}break;case"JOIN_REQUEST":{const l=this.nextPlayerIdx();if(l>=4)r.sendMessage({type:"JOIN_REJECT"}),r.close();else{r.playerIdx=l,r.chunkWriter.write(this.runtime.wasmBuffer);const d=new ht;d.read(this.runtime),r.chunkWriter.write(d.toBytes()),r.chunkWriter.flush(),r.sendMessage({type:"JOIN_REPLY",yourPlayerIdx:r.playerIdx,frame:this.rollbackMgr.currentFrame,stateOffset:this.runtime.wasmBuffer.byteLength}),this.onjoin&&this.onjoin(r.playerIdx)}}break;case"JOIN_REPLY":{this.localPlayerIdx=h.yourPlayerIdx;for(const b of this.remotePlayers.values())b!=r&&b.sendMessage({type:"PLAYER_INFO",playerIdx:this.localPlayerIdx});const l=r.chunkReader.read(),d=l.subarray(0,h.stateOffset),u=l.subarray(h.stateOffset);await this.runtime.load(d,!1);const w=new ht;w.fromBytes(u),w.write(this.runtime),this.runtime.setNetplay(this.localPlayerIdx),this.rollbackMgr=new ce(h.frame,this.runtime),this.onstart&&this.onstart(this.localPlayerIdx)}break;case"JOIN_REJECT":this.runtime.blueScreen(`Connected, but the
+game is already
+full!`),this.close();break;case"PLAYER_INFO":r.playerIdx==-1&&(r.playerIdx=h.playerIdx,this.onjoin&&this.onjoin(r.playerIdx));break}}),n.addEventListener("message",async a=>{const h=a.data,l=new DataView(h);switch(l.getUint8(0)){case 1:if(this.rollbackMgr&&r.playerIdx>=0){const u=l.getUint32(1);if(u>r.frame){const w=l.getInt8(5)+u,b=l.getInt8(6)+u,p=l.getUint8(7),f=new ls(new Uint8Array(h,8)),m=new Array(p);let y=0;for(let v=0;vl?a:-l)/2,u;for(;this.drawPointUnclipped(c,t,e),!(t===s&&e===i);)u=d,u>-a&&(d-=l,t+=h),u