(function(e,t){'object'==typeof exports&&'object'==typeof module?module.exports=t(function(){try{return require('assemblyscript')}catch(t){}}(),require('./assemblyscript')):'function'==typeof define&&define.amd?define(['assemblyscript'],t):'object'==typeof exports?exports.asc=t(function(){try{return require('assemblyscript')}catch(t){}}(),require('./assemblyscript')):e.asc=t(e._,e[void 0])})('undefined'==typeof self?this:self,function(t,e){var r=Math.floor,n=Math.pow,s=Math.min;return function(e){function t(r){if(i[r])return i[r].exports;var s=i[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,t),s.l=!0,s.exports}var i={};return t.m=e,t.c=i,t.d=function(e,i,r){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var i=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(i,'a',i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=3)}([function(e,t,i){t.nextTick=function(e){setTimeout(e,0)},t.platform=t.arch=t.execPath=t.title='browser',t.pid=1,t.browser=!0,t.env={},t.argv=[],t.binding=function(){throw new Error('No such module. (Possibly not yet loaded)')},function(){var e,r='/';t.cwd=function(){return r},t.chdir=function(t){e||(e=i(1)),r=e.resolve(t,r)}}(),t.exit=t.kill=t.umask=t.dlopen=t.uptime=t.memoryUsage=t.uvCounters=function(){},t.features={}},function(e,t,i){(function(e){function r(e,t){for(var r,s=0,n=e.length-1;0<=n;n--)r=e[n],'.'===r?e.splice(n,1):'..'===r?(e.splice(n,1),s++):s&&(e.splice(n,1),s--);if(t)for(;s--;s)e.unshift('..');return e}function n(e,t){if(e.filter)return e.filter(t);for(var r=[],s=0;si?[]:e.slice(t,i-t+1)}e=t.resolve(e).substr(1),r=t.resolve(r).substr(1);for(var o=n(e.split('/')),a=n(r.split('/')),l=s(o.length,a.length),u=l,d=0;d{t=c.readFileSync(e,{encoding:'utf8'})}),t}catch(t){return null}}function v(e,t){try{return k.writeCount++,k.writeTime+=l(()=>c.writeFileSync(e,t,'string'==typeof t?{encoding:'utf8'}:void 0)),!0}catch(t){return!1}}function z(e){var t;try{return k.readTime+=l(()=>{t=i(!function(){var t=new Error('Cannot find module "glob"');throw t.code='MODULE_NOT_FOUND',t}()).sync('*.ts',{cwd:e})}),t}catch(t){return[]}}function E(e){E.used||(k.writeCount++,E.used=!0),k.writeTime+=l(()=>A.write(e,'string'==typeof e?{encoding:'utf8'}:void 0))}'function'==typeof r?(s=r,r={}):!r&&(r={});const A=r.stdout||e.stdout,w=r.stderr||e.stderr,S=r.readFile||h,L=r.writeFile||v,C=r.listFiles||z,k=r.stats||a();if(!A)throw Error('\'options.stdout\' must be specified');if(!w)throw Error('\'options.stderr\' must be specified');if(!c.readFileSync){if(S===h)throw Error('\'options.readFile\' must be specified');if(L===v)throw Error('\'options.writeFile\' must be specified');if(C===z)throw Error('\'options.listFiles\' must be specified')}const I=n(t),P=24;if(s||(s=function(e){var t=0;return e&&(w.write(e.stack+p.EOL),t=1),t}),I.version)return A.write('Version '+m+p.EOL),s(null);if(I.help||1>I._.length){const e=[];return Object.keys(g).forEach((t)=>{var i=g[t],r=' ';for(r+='--'+t,i.aliases&&1===i.aliases[0].length&&(r+=', -'+i.aliases[0]);r.length{for(let t=0;t hello.wasm','','Options:'].concat(e).join(p.EOL)+p.EOL),s(null)}const O=null==I.baseDir?e.cwd():d.resolve(I.baseDir),D=d.join('.','..','std','assembly'),F=I.noLib?[]:[D];I.lib&&('string'==typeof I.lib&&(I.lib=I.lib.split(',')),Array.prototype.push.apply(F,I.lib.map(trim)));var U=null;for(let e=0,i=I._.length;eU=f.parseFile(n,r,U,!0));null!=(r=U.nextFile());){if(r.startsWith(_)){for(let e=0,t=F.length;ef.parseFile(n,r,U))}if(o(U,w))return s(Error('Parse error'))}var R=!1;I.noLib||Object.keys(T).forEach((e)=>{e.lastIndexOf('/')>=_.length||(k.parseCount++,k.parseTime+=l(()=>{U=f.parseFile(T[e],e+'.ts',U,!1)}),R=!0)});for(let e=0,i=F.length;e{U=f.parseFile(n,_+r,U,!1)})}}const N=f.createOptions();f.setTarget(N,0),f.setNoTreeShaking(N,!!I.noTreeShaking),f.setNoAssert(N,!!I.noAssert),f.setNoMemory(N,!!I.noMemory),f.setSourceMap(N,null!=I.sourceMap);var M;k.compileCount++;try{k.compileTime+=l(()=>M=f.compile(U,N))}catch(t){return s(t)}if(o(U,w))return M&&M.dispose(),s(Error('Compile error'));if(I.validate&&(k.validateCount++,k.validateTime+=l(()=>{if(!M.validate())return M.dispose(),s(Error('Validate error'))})),'clamp'===I.trapMode)k.optimizeCount++,k.optimizeTime+=l(()=>M.runPasses(['trap-mode-clamp']));else if('js'===I.trapMode)k.optimizeCount++,k.optimizeTime+=l(()=>M.runPasses(['trap-mode-js']));else if('allow'!==I.trapMode)return M.dispose(),s(Error('Unsupported trap mode'));var B=-1,j=0,H=!I.noDebug;!1!==I.optimize&&('number'==typeof I.optimize?B=I.optimize:I[0]?B=0:I[1]?B=1:I[2]?B=2:I[3]?B=3:!0===I.optimize?(B=b,j=x):B=0),I.s?j=1:I.z&&(j=2),'number'==typeof I.optimizeLevel&&(B=I.optimizeLevel),'number'==typeof I.shrinkLevel?j=I.shrinkLevel:'s'===I.shrinkLevel?j=1:'z'===I.shrinkLevel&&(j=2),M.setOptimizeLevel(B),M.setShrinkLevel(j),M.setDebugInfo(H);var Y=[];if(I.runPasses&&('string'==typeof I.runPasses&&(I.runPasses=I.runPasses.split(',')),I.runPasses.length&&I.runPasses.forEach((e)=>{0>Y.indexOf(e)&&Y.push(e)})),0<=B&&(k.optimizeCount++,k.optimizeTime+=l(()=>M.optimize())),Y.length&&(k.optimizeCount++,k.optimizeTime+=l(()=>M.runPasses(Y.map((e)=>e.trim())))),!I.noEmit){let e=!1;if(null!=I.outFile&&(/\.wast$/.test(I.outFile)&&null==I.textFile?I.textFile=I.outFile:/\.js$/.test(I.outFile)&&null==I.asmjsFile?I.asmjsFile=I.outFile:null==I.binaryFile&&(I.binaryFile=I.outFile)),null!=I.binaryFile){let t,i=null==I.sourceMap?null:I.sourceMap.length?I.sourceMap:d.basename(I.binaryFile)+'.map';if(k.emitCount++,k.emitTime+=l(()=>t=M.toBinary(i)),I.binaryFile.length?L(d.join(O,I.binaryFile),t.output):(E(t.output),e=!0),null!=t.sourceMap)if(I.binaryFile.length){let e=JSON.parse(t.sourceMap);e.sourceRoot=y,e.sources.forEach((t,i)=>{let r=null;if(t.startsWith(_))for(let e=0,i=F.length;et=M.toText()),L(d.join(O,I.textFile),t)):!e&&(k.emitCount++,k.emitTime+=l(()=>t=M.toText()),E(t),e=!0)}if(null!=I.asmjsFile&&I.asmjsFile.length){let t;I.asmjsFile.length?(k.emitCount++,k.emitTime+=l(()=>t=M.toAsmjs()),L(d.join(O,I.asmjsFile),t)):!e&&(k.emitCount++,k.emitTime+=l(()=>t=M.toAsmjs()),E(t),e=!0)}}return M.dispose(),I.measure&&u(k,w),s(null)}function n(e){const t={};return Object.keys(g).forEach((e)=>{const i=g[e];i.aliases&&((t.alias||(t.alias={}))[e]=i.aliases),void 0!==i.default&&((t.default||(t.default={}))[e]=i.default),'string'===i.type?(t.string||(t.string=[])).push(e):'boolean'===i.type&&(t.boolean||(t.boolean=[])).push(e)}),i(14)(e,t)}function o(e,t){for(var i,r=!1;null!=(i=f.nextDiagnostic(e));)t.write(f.formatDiagnostic(i,t.isTTY,!0)+p.EOL+p.EOL),f.isError(i)&&(r=!0);return r}function a(){return{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0}}function l(t){const i=e.hrtime();t();const r=e.hrtime(i);return 1e9*r[0]+r[1]}function u(t,i){(i||e.stdout).write(['I/O Read : '+(t.readTime?(t.readTime/1e6).toFixed(3)+' ms ('+t.readCount+' files)':'N/A'),'I/O Write : '+(t.writeTime?(t.writeTime/1e6).toFixed(3)+' ms ('+t.writeCount+' files)':'N/A'),'Parse : '+(t.parseTime?(t.parseTime/1e6).toFixed(3)+' ms ('+t.parseCount+' times)':'N/A'),'Compile : '+(t.compileTime?(t.compileTime/1e6).toFixed(3)+' ms ('+t.compileCount+' times)':'N/A'),'Emit : '+(t.emitTime?(t.emitTime/1e6).toFixed(3)+' ms ('+t.emitCount+' times)':'N/A'),'Validate : '+(t.validateTime?(t.validateTime/1e6).toFixed(3)+' ms ('+t.validateCount+' times)':'N/A'),'Optimize : '+(t.optimizeTime?(t.optimizeTime/1e6).toFixed(3)+' ms ('+t.optimizeCount+' times)':'N/A')].join(p.EOL)+p.EOL)}const d=i(1),c=i(9),p=i(10);var f,h;try{f=i(11),h=!1;try{i(!function(){var t=new Error('Cannot find module "source-map-support"');throw t.code='MODULE_NOT_FOUND',t}()).install()}catch(t){}}catch(t){try{i(!function(){var t=new Error('Cannot find module "ts-node"');throw t.code='MODULE_NOT_FOUND',t}()).register({project:i(1).join('.','..','src')}),i(!function(){var t=new Error('Cannot find module "../src/glue/js"');throw t.code='MODULE_NOT_FOUND',t}()),f=i(!function(){var t=new Error('Cannot find module "../src"');throw t.code='MODULE_NOT_FOUND',t}()),h=!0}catch(t){f=i(12),h=!1}}const m='0.5.0',g=i(13),y='assemblyscript:///',_=f.LIBRARY_PREFIX,b=2,x=1,T={"(lib)/allocator/arena":'/////////////// A simple yet effective Arena Memory Allocator /////////////////\r\n\r\n// Provides a `reset_memory` function to reset the heap to its initial state. A\r\n// user has to make sure that there are no more references to cleared memory\r\n// afterwards. Always aligns to 8 bytes.\r\n\r\nconst ALIGN_LOG2: usize = 3;\r\nconst ALIGN_SIZE: usize = 1 << ALIGN_LOG2;\r\nconst ALIGN_MASK: usize = ALIGN_SIZE - 1;\r\n\r\nvar HEAP_OFFSET: usize = HEAP_BASE;\r\n\r\nexport function allocate_memory(size: usize): usize {\r\n if (!size) return 0;\r\n var ptr = HEAP_OFFSET;\r\n var off = (ptr + size + ALIGN_MASK) & ~ALIGN_MASK;\r\n var avail = current_memory() << 16;\r\n if (off > avail && grow_memory(\r\n max(\r\n (((off + 0xffff) & ~0xffff) - avail) >> 16, // minimum required pages\r\n avail >> 16 // at least double memory\r\n )\r\n ) < 0) unreachable(); // out of memory\r\n HEAP_OFFSET = off;\r\n return ptr;\r\n}\r\n\r\nexport function free_memory(ptr: usize): void {\r\n // nop\r\n}\r\n\r\nexport function reset_memory(): void {\r\n HEAP_OFFSET = HEAP_BASE;\r\n}\r\n',"(lib)/allocator/emscripten":'///////////////////////// Emscripten Memory Allocator //////////////////////////\r\n\r\n// Uses Emscripten\'s exported _malloc and _free implementations, i.e., when\r\n// linking with Emscripten-compiled programs that already provide these.\r\n// Differs from \'system\' in that their names are prefixed with an underscore.\r\n\r\ndeclare function _malloc(size: usize): usize;\r\ndeclare function _free(ptr: usize): void;\r\n\r\nexport function allocate_memory(size: usize): usize {\r\n return _malloc(size);\r\n}\r\n\r\nexport function free_memory(ptr: usize): void {\r\n _free(ptr);\r\n}\r\n\r\nexport function reset_memory(): void {\r\n throw new Error("not supported");\r\n}\r\n',"(lib)/allocator/system":'/////////////////////////// System Memory Allocator ////////////////////////////\r\n\r\n// Uses the environment\'s malloc and free implementations, i.e., when linking\r\n// with other C-like programs that already provide these.\r\n\r\ndeclare function malloc(size: usize): usize;\r\ndeclare function free(ptr: usize): void;\r\n\r\nexport function allocate_memory(size: usize): usize {\r\n return malloc(size);\r\n}\r\n\r\nexport function free_memory(ptr: usize): void {\r\n free(ptr);\r\n}\r\n\r\nexport function reset_memory(): void {\r\n throw new Error("not supported");\r\n}\r\n',"(lib)/allocator/tlsf":'////////////// TLSF (Two-Level Segregate Fit) Memory Allocator ////////////////\r\n\r\n// Re-export for now, so there\'s just one source file being worked on\r\n\r\nexport {\r\n allocate_memory,\r\n free_memory\r\n} from "../../../examples/tlsf/assembly/tlsf";\r\n\r\nexport function reset_memory(): void {\r\n throw new Error("not supported");\r\n}\r\n',"(lib)/array":'export class Array {\r\n\r\n private __memory: usize;\r\n private __capacity: i32; // capped to [0, 0x7fffffff]\r\n private __length: i32; // capped to [0, __capacity]\r\n\r\n private __grow(newCapacity: i32): void {\r\n assert(newCapacity > this.__capacity);\r\n var newMemory = allocate_memory(newCapacity * sizeof());\r\n if (this.__memory) {\r\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\r\n free_memory(this.__memory);\r\n }\r\n this.__memory = newMemory;\r\n this.__capacity = newCapacity;\r\n }\r\n\r\n constructor(capacity: i32 = 0) {\r\n if (capacity < 0)\r\n throw new RangeError("Invalid array length");\r\n this.__memory = capacity ? allocate_memory(capacity * sizeof()) : 0;\r\n this.__capacity = this.__length = capacity;\r\n }\r\n\r\n get length(): i32 {\r\n return this.__length;\r\n }\r\n\r\n set length(length: i32) {\r\n if (length < 0)\r\n throw new RangeError("Invalid array length");\r\n if (length > this.__capacity)\r\n this.__grow(max(length, this.__capacity << 1));\r\n this.__length = length;\r\n }\r\n\r\n @operator("[]")\r\n private __get(index: i32): T {\r\n if (index >= this.__capacity)\r\n throw new Error("Index out of bounds"); // return changetype(0) ?\r\n return load(this.__memory + index * sizeof());\r\n }\r\n\r\n @operator("[]=")\r\n private __set(index: i32, value: T): void {\r\n if (index < 0)\r\n throw new Error("Index out of bounds");\r\n if (index >= this.__capacity)\r\n this.__grow(max(index + 1, this.__capacity << 1));\r\n store(this.__memory + index * sizeof(), value);\r\n }\r\n\r\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\r\n if (fromIndex < 0)\r\n fromIndex = this.__length + fromIndex;\r\n while (fromIndex < this.__length) {\r\n if (load(this.__memory + fromIndex * sizeof()) == searchElement)\r\n return fromIndex;\r\n ++fromIndex;\r\n }\r\n return -1;\r\n }\r\n\r\n lastIndexOf(searchElement: T, fromIndex: i32 = 0): i32 {\r\n if (fromIndex < 0)\r\n fromIndex = this.__length + fromIndex;\r\n else if (fromIndex >= this.__length)\r\n fromIndex = this.__length - 1;\r\n while (fromIndex >= 0) {\r\n if (load(this.__memory + fromIndex * sizeof()) == searchElement)\r\n return fromIndex;\r\n --fromIndex;\r\n }\r\n return -1;\r\n }\r\n\r\n push(element: T): i32 {\r\n if (this.__length == this.__capacity)\r\n this.__grow(this.__capacity ? this.__capacity << 1 : 1);\r\n store(this.__memory + this.__length * sizeof(), element);\r\n return ++this.__length;\r\n }\r\n\r\n pop(): T {\r\n if (this.__length < 1)\r\n throw new RangeError("Array is empty"); // return changetype(0) ?\r\n return load(this.__memory + --this.__length * sizeof());\r\n }\r\n\r\n shift(): T {\r\n if (this.__length < 1)\r\n throw new RangeError("Array is empty"); // return changetype(0) ?\r\n var element = load(this.__memory);\r\n move_memory(this.__memory, this.__memory + sizeof(), (this.__capacity - 1) * sizeof());\r\n set_memory(this.__memory + (this.__capacity - 1) * sizeof(), 0, sizeof());\r\n --this.__length;\r\n return element;\r\n }\r\n\r\n unshift(element: T): i32 {\r\n var oldCapacity = this.__capacity;\r\n if (this.__length == oldCapacity) {\r\n // inlined __grow (avoids moving twice)\r\n var newCapacity: i32 = oldCapacity ? oldCapacity << 1 : 1;\r\n assert(newCapacity > this.__capacity);\r\n var newMemory = allocate_memory(newCapacity * sizeof());\r\n if (this.__memory) {\r\n move_memory(newMemory + sizeof(), this.__memory, oldCapacity * sizeof());\r\n free_memory(this.__memory);\r\n }\r\n this.__memory = newMemory;\r\n this.__capacity = newCapacity;\r\n } else\r\n move_memory(this.__memory + sizeof(), this.__memory, oldCapacity * sizeof());\r\n store(this.__memory, element);\r\n return ++this.__length;\r\n }\r\n\r\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\r\n if (begin < 0) {\r\n begin = this.__length + begin;\r\n if (begin < 0)\r\n begin = 0;\r\n } else if (begin > this.__length)\r\n begin = this.__length;\r\n if (end < 0)\r\n end = this.__length + end;\r\n else if (end > this.__length)\r\n end = this.__length;\r\n if (end < begin)\r\n end = begin;\r\n var capacity = end - begin;\r\n assert(capacity >= 0);\r\n var sliced = new Array(capacity);\r\n if (capacity)\r\n move_memory(sliced.__memory, this.__memory + begin * sizeof(), capacity * sizeof());\r\n return sliced;\r\n }\r\n\r\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\r\n if (deleteCount < 1)\r\n return;\r\n if (start < 0) {\r\n start = this.__length + start;\r\n if (start < 0)\r\n start = 0;\r\n else if (start >= this.__length)\r\n return;\r\n } else if (start >= this.__length)\r\n return;\r\n deleteCount = min(deleteCount, this.__length - start);\r\n move_memory(this.__memory + start * sizeof(), this.__memory + (start + deleteCount) * sizeof(), deleteCount * sizeof());\r\n this.__length -= deleteCount;\r\n }\r\n\r\n reverse(): Array {\r\n for (var front: usize = 0, back: usize = this.__length - 1; front < back; ++front, --back) {\r\n var temp = load(this.__memory + front * sizeof());\r\n store(this.__memory + front * sizeof(), load(this.__memory + back * sizeof()));\r\n store(this.__memory + back * sizeof(), temp);\r\n }\r\n return this;\r\n }\r\n}\r\n\r\n@unmanaged\r\nexport class CArray {\r\n\r\n private constructor() {}\r\n\r\n @operator("[]")\r\n private __get(index: i32): T {\r\n if (index < 0)\r\n throw new RangeError("Index out of range");\r\n return load(changetype(this) + index * sizeof());\r\n }\r\n\r\n @operator("[]=")\r\n private __set(index: i32, value: T): void {\r\n if (index < 0)\r\n throw new RangeError("Index out of range");\r\n store(changetype(this) + index * sizeof(), value);\r\n }\r\n}\r\n',"(lib)/builtins":'@builtin\r\nexport declare const NaN: f64; // | f32\r\n\r\n@builtin\r\nexport declare const Infinity: f64; // | f32\r\n\r\n@builtin\r\nexport declare function isNaN(value: T): bool;\r\n\r\n@builtin\r\nexport declare function isFinite(value: T): bool;\r\n\r\n@builtin\r\nexport declare function clz(value: T): T;\r\n\r\n@builtin\r\nexport declare function ctz(value: T): T;\r\n\r\n@builtin\r\nexport declare function popcnt(value: T): T;\r\n\r\n@builtin\r\nexport declare function rotl(value: T, shift: T): T;\r\n\r\n@builtin\r\nexport declare function rotr(value: T, shift: T): T;\r\n\r\n@builtin\r\nexport declare function abs(value: T): T;\r\n\r\n@builtin\r\nexport declare function max(left: T, right: T): T;\r\n\r\n@builtin\r\nexport declare function min(left: T, right: T): T;\r\n\r\n@builtin\r\nexport declare function ceil(value: T): T;\r\n\r\n@builtin\r\nexport declare function floor(value: T): T;\r\n\r\n@builtin\r\nexport declare function copysign(left: T, right: T): T;\r\n\r\n@builtin\r\nexport declare function nearest(left: T, right: T): T;\r\n\r\n@builtin\r\nexport declare function reinterpret(value: void): T;\r\n\r\n@builtin\r\nexport declare function sqrt(value: T): T;\r\n\r\n@builtin\r\nexport declare function trunc(value: T): T;\r\n\r\n@builtin\r\nexport declare function load(offset: usize, constantOffset?: usize): T;\r\n\r\n@builtin\r\nexport declare function store(offset: usize, value: void, constantOffset?: usize): T;\r\n\r\n@builtin\r\nexport declare function sizeof(): usize;\r\n\r\n@builtin\r\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\r\n\r\n@builtin\r\nexport declare function unreachable(): void;\r\n\r\n@builtin\r\nexport declare function current_memory(): i32;\r\n\r\n@builtin\r\nexport declare function grow_memory(pages: i32): i32;\r\n\r\n// @builtin\r\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\r\n\r\n// @builtin\r\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\r\n\r\n@builtin\r\nexport declare function changetype(value: void): T;\r\n\r\n@builtin\r\nexport declare function assert(isTrueish: T, message?: string): T;\r\n\r\n@builtin\r\nexport declare function abort(message?: string | null, fileName?: string | null, lineNumber?: u32, columnNumber?: u32): void;\r\n\r\n@builtin\r\ndeclare function i8(value: void): i8;\r\nnamespace i8 {\r\n export const MIN_VALUE: i8 = -128;\r\n export const MAX_VALUE: i8 = 127;\r\n}\r\nexport { i8 };\r\n\r\n@builtin\r\ndeclare function i16(value: void): i16;\r\nnamespace i16 {\r\n export const MIN_VALUE: i16 = -32768;\r\n export const MAX_VALUE: i16 = 32767;\r\n}\r\nexport { i16 };\r\n\r\n@builtin\r\ndeclare function i32(value: void): i32;\r\nnamespace i32 {\r\n export const MIN_VALUE: i32 = -2147483648;\r\n export const MAX_VALUE: i32 = 2147483647;\r\n}\r\nexport { i32 };\r\n\r\n@builtin\r\ndeclare function i64(value: void): i64;\r\nnamespace i64 {\r\n export const MIN_VALUE: i64 = -9223372036854775808;\r\n export const MAX_VALUE: i64 = 9223372036854775807;\r\n}\r\nexport { i64 };\r\n\r\n@builtin\r\ndeclare function isize(value: void): isize;\r\nnamespace isize {\r\n export const MIN_VALUE: isize = sizeof() == sizeof() ? -2147483648 : -9223372036854775808;\r\n export const MAX_VALUE: isize = sizeof() == sizeof() ? 2147483647 : 9223372036854775807;\r\n}\r\nexport { isize };\r\n\r\n@builtin\r\ndeclare function u8(value: void): u8;\r\nnamespace u8 {\r\n export const MIN_VALUE: u8 = 0;\r\n export const MAX_VALUE: u8 = 255;\r\n}\r\nexport { u8 };\r\n\r\n@builtin\r\ndeclare function u16(value: void): u16;\r\nnamespace u16 {\r\n export const MIN_VALUE: u16 = 0;\r\n export const MAX_VALUE: u16 = 65535;\r\n}\r\nexport { u16 };\r\n\r\n@builtin\r\ndeclare function u32(value: void): u32;\r\nnamespace u32 {\r\n export const MIN_VALUE: u32 = 0;\r\n export const MAX_VALUE: u32 = 4294967295;\r\n}\r\nexport { u32 };\r\n\r\n@builtin\r\ndeclare function u64(value: void): u64;\r\nnamespace u64 {\r\n export const MIN_VALUE: u64 = 0;\r\n export const MAX_VALUE: u64 = 18446744073709551615;\r\n}\r\nexport { u64 };\r\n\r\n@builtin\r\ndeclare function usize(value: void): usize;\r\nnamespace usize {\r\n export const MIN_VALUE: usize = 0;\r\n export const MAX_VALUE: usize = sizeof() == sizeof() ? 4294967295 : 18446744073709551615;\r\n}\r\nexport { usize };\r\n\r\n@builtin\r\ndeclare function bool(value: void): bool;\r\nnamespace bool {\r\n export const MIN_VALUE: bool = 0;\r\n export const MAX_VALUE: bool = 1;\r\n}\r\nexport { bool };\r\n\r\n@builtin\r\ndeclare function f32(value: void): f32;\r\nnamespace f32 {\r\n export const MIN_VALUE: f32 = -3.40282347e+38;\r\n export const MAX_VALUE: f32 = 3.40282347e+38;\r\n export const MIN_SAFE_INTEGER: f32 = -16777215;\r\n export const MAX_SAFE_INTEGER: f32 = 16777215;\r\n export const EPSILON: f32 = 1.19209290e-07;\r\n}\r\nexport { f32 };\r\n\r\n@builtin\r\ndeclare function f64(value: void): f64;\r\nnamespace f64 {\r\n export const MIN_VALUE: f64 = -1.7976931348623157e+308;\r\n export const MAX_VALUE: f64 = 1.7976931348623157e+308;\r\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\r\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\r\n export const EPSILON: f64 = 2.2204460492503131e-16;\r\n}\r\nexport{ f64 };\r\n\r\n@builtin\r\nexport declare const HEAP_BASE: usize;\r\n\r\n@builtin\r\nexport declare function start(): void;\r\n',"(lib)/error":'export class Error {\r\n\r\n name: string = "Error";\r\n message: string;\r\n stack: string = ""; // TODO\r\n\r\n constructor(message: string = "") {\r\n this.message = message;\r\n }\r\n}\r\n\r\nexport class RangeError extends Error {\r\n name: string = "RangeError";\r\n}\r\n',"(lib)/iterator":'// export abstract class Iterator {\r\n// abstract get done(): bool;\r\n// abstract next(): T;\r\n// }\r\n',"(lib)/map":'export class Map {\r\n\r\n private __keys: K[] = [];\r\n private __values: V[] = [];\r\n\r\n // FIXME: not a proper map implementation, just a filler\r\n\r\n get size(): i32 {\r\n return this.__keys.length;\r\n }\r\n\r\n get(key: K): V | null {\r\n var keys = this.__keys;\r\n for (var i = 0, k = keys.length; i < k; ++i)\r\n if (keys[i] == key)\r\n return this.__values[i];\r\n return null;\r\n }\r\n\r\n has(key: K): bool {\r\n var keys = this.__keys;\r\n for (var i = 0, k = keys.length; i < k; ++i)\r\n if (keys[i] == key)\r\n return true;\r\n return false;\r\n }\r\n\r\n set(key: K, value: V): void {\r\n this.__keys.push(key);\r\n this.__values.push(value);\r\n }\r\n\r\n clear(): void {\r\n this.__keys.length = 0;\r\n this.__values.length = 0;\r\n }\r\n}\r\n',"(lib)/memory":'function copy_memory(dest: usize, src: usize, n: usize): void {\r\n // based on musl\'s implementation of memcpy\r\n // not a future instruction and sufficiently covered by the upcoming move_memory intrinsic\r\n\r\n var w: u32, x: u32;\r\n\r\n // copy 1 byte each until src is aligned to 4 bytes\r\n while (n && src % 4) {\r\n store(dest++, load(src++));\r\n n--;\r\n }\r\n\r\n // if dst is aligned to 4 bytes as well, copy 4 bytes each\r\n if (dest % 4 == 0) {\r\n while (n >= 16) {\r\n store(dest , load(src ));\r\n store(dest + 4, load(src + 4));\r\n store(dest + 8, load(src + 8));\r\n store(dest + 12, load(src + 12));\r\n src += 16; dest += 16; n -= 16;\r\n }\r\n if (n & 8) {\r\n store(dest , load(src ));\r\n store(dest + 4, load(src + 4));\r\n dest += 8; src += 8;\r\n }\r\n if (n & 4) {\r\n store(dest, load(src));\r\n dest += 4; src += 4;\r\n }\r\n if (n & 2) { // drop to 2 bytes each\r\n store(dest, load(src));\r\n dest += 2; src += 2;\r\n }\r\n if (n & 1) { // drop to 1 byte\r\n store(dest++, load(src++));\r\n }\r\n return;\r\n }\r\n\r\n // if dst is not aligned to 4 bytes, use alternating shifts to copy 4 bytes each\r\n // doing shifts if faster when copying enough bytes (here: 32 or more)\r\n if (n >= 32) {\r\n switch (dest % 4) {\r\n // known to be != 0\r\n case 1:\r\n w = load(src);\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n n -= 3;\r\n while (n >= 17) {\r\n x = load(src + 1);\r\n store(dest, w >> 24 | x << 8);\r\n w = load(src + 5);\r\n store(dest + 4, x >> 24 | w << 8);\r\n x = load(src + 9);\r\n store(dest + 8, w >> 24 | x << 8);\r\n w = load(src + 13);\r\n store(dest + 12, x >> 24 | w << 8);\r\n src += 16; dest += 16; n -= 16;\r\n }\r\n break;\r\n case 2:\r\n w = load(src);\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n n -= 2;\r\n while (n >= 18) {\r\n x = load(src + 2);\r\n store(dest, w >> 16 | x << 16);\r\n w = load(src + 6);\r\n store(dest + 4, x >> 16 | w << 16);\r\n x = load(src + 10);\r\n store(dest + 8, w >> 16 | x << 16);\r\n w = load(src + 14);\r\n store(dest + 12, x >> 16 | w << 16);\r\n src += 16; dest += 16; n -= 16;\r\n }\r\n break;\r\n case 3:\r\n w = load(src);\r\n store(dest++, load(src++));\r\n n -= 1;\r\n while (n >= 19) {\r\n x = load(src + 3);\r\n store(dest, w >> 8 | x << 24);\r\n w = load(src + 7);\r\n store(dest + 4, x >> 8 | w << 24);\r\n x = load(src + 11);\r\n store(dest + 8, w >> 8 | x << 24);\r\n w = load(src + 15);\r\n store(dest + 12, x >> 8 | w << 24);\r\n src += 16; dest += 16; n -= 16;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // copy remaining bytes one by one\r\n if (n & 16) {\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n }\r\n if (n & 8) {\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n }\r\n if (n & 4) {\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n }\r\n if (n & 2) {\r\n store(dest++, load(src++));\r\n store(dest++, load(src++));\r\n }\r\n if (n & 1) {\r\n store(dest++, load(src++));\r\n }\r\n}\r\n\r\nexport function move_memory(dest: usize, src: usize, n: usize): void {\r\n // based on musl\'s implementation of memmove\r\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\r\n\r\n if (dest == src)\r\n return;\r\n if (src + n <= dest || dest + n <= src) {\r\n copy_memory(dest, src, n);\r\n return;\r\n }\r\n if (dest < src) {\r\n if (src % 8 == dest % 8) {\r\n while (dest % 8) {\r\n if (!n)\r\n return;\r\n --n;\r\n store(dest++, load(src++));\r\n }\r\n while (n >= 8) {\r\n store(dest, load(src));\r\n n -= 8;\r\n dest += 8;\r\n src += 8;\r\n }\r\n }\r\n while (n) {\r\n store(dest++, load(src++));\r\n --n;\r\n }\r\n } else {\r\n if (src % 8 == dest % 8) {\r\n while ((dest + n) % 8) {\r\n if (!n)\r\n return;\r\n store(dest + --n, load(src + n));\r\n }\r\n while (n >= 8) {\r\n n -= 8;\r\n store(dest + n, load(src + n));\r\n }\r\n }\r\n while (n) {\r\n store(dest + --n, load(src + n));\r\n }\r\n }\r\n}\r\n\r\nexport function set_memory(dest: usize, c: u8, n: usize): void {\r\n // based on musl\'s implementation of memset\r\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\r\n\r\n // fill head and tail with minimal branching\r\n if (!n)\r\n return;\r\n store(dest, c);\r\n store(dest + n - 1, c);\r\n if (n <= 2)\r\n return;\r\n\r\n store(dest + 1, c);\r\n store(dest + 2, c);\r\n store(dest + n - 2, c);\r\n store(dest + n - 3, c);\r\n if (n <= 6)\r\n return;\r\n store(dest + 3, c);\r\n store(dest + n - 4, c);\r\n if (n <= 8)\r\n return;\r\n\r\n // advance pointer to align it at 4-byte boundary\r\n var k: usize = -dest & 3;\r\n dest += k;\r\n n -= k;\r\n n &= -4;\r\n\r\n var c32: u32 = -1 / 255 * c;\r\n\r\n // fill head/tail up to 28 bytes each in preparation\r\n store(dest, c32);\r\n store(dest + n - 4, c32);\r\n if (n <= 8)\r\n return;\r\n store(dest + 4, c32);\r\n store(dest + 8, c32);\r\n store(dest + n - 12, c32);\r\n store(dest + n - 8, c32);\r\n if (n <= 24)\r\n return;\r\n store(dest + 12, c32);\r\n store(dest + 16, c32);\r\n store(dest + 20, c32);\r\n store(dest + 24, c32);\r\n store(dest + n - 28, c32);\r\n store(dest + n - 24, c32);\r\n store(dest + n - 20, c32);\r\n store(dest + n - 16, c32);\r\n\r\n // align to a multiple of 8\r\n k = 24 + (dest & 4);\r\n dest += k;\r\n n -= k;\r\n\r\n // copy 32 bytes each\r\n var c64: u64 = c32 | (c32 << 32);\r\n while (n >= 32) {\r\n store(dest, c64);\r\n store(dest + 8, c64);\r\n store(dest + 16, c64);\r\n store(dest + 24, c64);\r\n n -= 32;\r\n dest += 32;\r\n }\r\n}\r\n\r\nexport function compare_memory(vl: usize, vr: usize, n: usize): i32 {\r\n // based on musl\'s implementation of memcmp\r\n // provided because there\'s no proposed alternative\r\n if (vl == vr)\r\n return 0;\r\n while (n && load(vl) == load(vr)) {\r\n n--;\r\n vl++;\r\n vr++;\r\n }\r\n return n ? load(vl) - load(vr) : 0;\r\n}\r\n',"(lib)/regexp":'export class RegExp {\r\n\r\n // @binding(CALL_NEW, [ STRING, STRING], OBJECT_HANDLE)\r\n constructor(pattern: string, flags: string = "") { throw new Error("unreachable"); }\r\n\r\n // @binding(CALL_THIS, [ STRING ], PASS_THRU)\r\n test(search: string): bool { throw new Error("unreachable"); }\r\n\r\n // @binding(CALL_THIS, [], STRING)\r\n toString(): string { throw new Error("unreachable"); }\r\n\r\n}\r\n',"(lib)/set":'// const prime1: u32 = 73;\r\n// const prime2: u32 = 5009;\r\n\r\nexport class Set {\r\n\r\n private __memory: usize;\r\n private __capacity: u32;\r\n private __size: u32;\r\n\r\n constructor() {\r\n this.__memory = 0;\r\n this.__capacity = this.__size = 0;\r\n }\r\n\r\n get size(): i32 {\r\n return this.__size;\r\n }\r\n\r\n // FIXME: not a proper set implementation, just a filler\r\n\r\n has(value: T): bool {\r\n assert(this != null);\r\n\r\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index)\r\n if (load(this.__memory + index * sizeof()) == value)\r\n return true;\r\n return false;\r\n }\r\n\r\n add(value: T): Set {\r\n assert(this != null);\r\n\r\n if (this.__size >= this.__capacity) {\r\n var newCapacity = max(this.__capacity << 1, 8);\r\n var newMemory = allocate_memory(newCapacity * sizeof());\r\n if (this.__memory) {\r\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\r\n free_memory(this.__memory);\r\n }\r\n this.__capacity = newCapacity;\r\n this.__memory = newMemory;\r\n }\r\n store(this.__memory + this.__size * sizeof(), value);\r\n ++this.__size;\r\n return this;\r\n }\r\n\r\n delete(value: T): bool {\r\n assert(this != null);\r\n\r\n for (var index: usize = 0, limit: usize = this.__size; index < limit; ++index)\r\n if (load(this.__memory + index * sizeof()) == value) {\r\n if (index + 1 < this.__size)\r\n move_memory(this.__memory + index * sizeof(), this.__memory + (index + 1) * sizeof(), this.__size - index - 1);\r\n --this.__size;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n clear(): void {\r\n assert(this != null);\r\n\r\n this.__size = 0;\r\n }\r\n\r\n // TODO: think about iterators\r\n}\r\n\r\n// class SetIterator extends Iterator {\r\n\r\n// get done(): bool {\r\n// throw new Error("not implemented");\r\n// }\r\n\r\n// next(): T {\r\n// throw new Error("not implemented");\r\n// }\r\n// }\r\n',"(lib)/string":'// singleton empty string\r\nconst EMPTY: String = changetype("");\r\n\r\n// number of bytes preceeding string data\r\nconst HEAD: usize = 4;\r\n\r\nfunction allocate(length: i32): String {\r\n assert(length > 0); // 0 -> EMPTY\r\n var ptr = allocate_memory(HEAD + (length << 1));\r\n store(ptr, length);\r\n return changetype(ptr);\r\n}\r\n\r\nexport class String {\r\n\r\n readonly length: i32;\r\n\r\n @operator("[]")\r\n charAt(pos: i32): String {\r\n assert(this != null);\r\n\r\n if (pos >= this.length)\r\n return EMPTY;\r\n\r\n var out = allocate(1);\r\n store(\r\n changetype(out),\r\n load(\r\n changetype(this) + (pos << 1),\r\n HEAD\r\n ),\r\n HEAD\r\n );\r\n return out;\r\n }\r\n\r\n charCodeAt(pos: i32): i32 {\r\n assert(this != null);\r\n\r\n if (pos >= this.length)\r\n return -1; // (NaN)\r\n\r\n return load(\r\n changetype(this) + (pos << 1),\r\n HEAD\r\n );\r\n }\r\n\r\n codePointAt(pos: i32): i32 {\r\n assert(this != null);\r\n\r\n if (pos >= this.length)\r\n return -1; // (undefined)\r\n var first = load(\r\n changetype(this) + (pos << 1),\r\n HEAD\r\n );\r\n if (first < 0xD800 || first > 0xDBFF || pos + 1 == this.length)\r\n return first;\r\n var second = load(\r\n changetype(this) + ((pos + 1) << 1),\r\n HEAD\r\n );\r\n if (second < 0xDC00 || second > 0xDFFF)\r\n return first;\r\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\r\n }\r\n\r\n @operator("+")\r\n private static __concat(left: String, right: String): String {\r\n if (left == null)\r\n left = changetype("null");\r\n return left.concat(right);\r\n }\r\n\r\n concat(other: String): String {\r\n assert(this != null);\r\n\r\n if (other == null)\r\n other = changetype("null");\r\n\r\n var thisLen: isize = this.length;\r\n var otherLen: isize = other.length;\r\n var outLen: usize = thisLen + otherLen;\r\n if (outLen == 0)\r\n return EMPTY;\r\n\r\n var out = allocate(outLen);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD,\r\n thisLen << 1\r\n );\r\n move_memory(\r\n changetype(out) + HEAD + (thisLen << 1),\r\n changetype(other) + HEAD,\r\n otherLen << 1\r\n );\r\n return out;\r\n }\r\n\r\n endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {\r\n assert(this != null);\r\n\r\n if (searchString == null)\r\n return false;\r\n\r\n var end: isize = min(max(endPosition, 0), this.length);\r\n var searchLength: isize = searchString.length;\r\n var start: isize = end - searchLength;\r\n if (start < 0)\r\n return false;\r\n\r\n return !compare_memory(\r\n changetype(this) + HEAD + (start << 1),\r\n changetype(searchString) + HEAD,\r\n searchLength << 1\r\n );\r\n }\r\n\r\n @operator("==")\r\n private static __eq(left: String, right: String): bool {\r\n if (left == null)\r\n return right == null;\r\n else if (right == null)\r\n return false;\r\n\r\n var leftLength = left.length;\r\n if (leftLength != right.length)\r\n return false;\r\n\r\n return !compare_memory(\r\n changetype(left) + HEAD,\r\n changetype(right) + HEAD,\r\n (leftLength << 1)\r\n );\r\n }\r\n\r\n includes(searchString: String, position: i32 = 0): bool {\r\n return this.indexOf(searchString, position) != -1;\r\n }\r\n\r\n indexOf(searchString: String, position: i32 = 0): i32 {\r\n assert(this != null);\r\n\r\n if (searchString == null)\r\n searchString = changetype("null");\r\n\r\n var pos: isize = position;\r\n var len: isize = this.length;\r\n var start: isize = min(max(pos, 0), len);\r\n var searchLen: isize = searchString.length;\r\n\r\n // TODO: two-way, multiple char codes\r\n for (var k: usize = start; k + searchLen <= len; ++k)\r\n if (!compare_memory(\r\n changetype(this) + HEAD + (k << 1),\r\n changetype(searchString) + HEAD,\r\n searchLen << 1)\r\n )\r\n return k;\r\n return -1;\r\n }\r\n\r\n startsWith(searchString: String, position: i32 = 0): bool {\r\n assert(this != null);\r\n\r\n if (searchString == null)\r\n searchString = changetype("null");\r\n\r\n var pos: isize = position;\r\n var len: isize = this.length;\r\n var start: isize = min(max(position, 0), len);\r\n var searchLength: isize = searchString.length;\r\n if (searchLength + start > len)\r\n return false;\r\n\r\n return !compare_memory(\r\n changetype(this) + HEAD + (start << 1),\r\n changetype(searchString) + HEAD,\r\n searchLength << 1\r\n );\r\n }\r\n\r\n substr(start: i32, length: i32 = i32.MAX_VALUE): String {\r\n assert(this != null);\r\n\r\n var intStart: isize = start;\r\n var end: isize = length;\r\n var size: isize = this.length;\r\n if (intStart < 0)\r\n intStart = max(size + intStart, 0);\r\n\r\n var resultLength: isize = min(max(end, 0), size - intStart);\r\n if (resultLength <= 0)\r\n return EMPTY;\r\n\r\n var out = allocate(resultLength);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD + (intStart << 1),\r\n resultLength << 1\r\n );\r\n return out;\r\n }\r\n\r\n substring(start: i32, end: i32 = i32.MAX_VALUE): String {\r\n assert(this != null);\r\n\r\n var len = this.length;\r\n var finalStart = min(max(start, 0), len);\r\n var finalEnd = min(max(end, 0), len);\r\n var from = min(finalStart, finalEnd);\r\n var to = max(finalStart, finalEnd);\r\n len = to - from;\r\n if (!len)\r\n return EMPTY;\r\n\r\n if (!from && to == this.length)\r\n return this;\r\n\r\n var out = allocate(len);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD + (from << 1),\r\n len << 1\r\n );\r\n return out;\r\n }\r\n\r\n trim(): String {\r\n assert(this != null);\r\n\r\n var length: usize = this.length;\r\n while (length && isWhiteSpaceOrLineTerminator(load(changetype(this) + (length << 1), HEAD)))\r\n --length;\r\n\r\n var start: usize = 0;\r\n while (start < length && isWhiteSpaceOrLineTerminator(load(changetype(this) + (start << 1), HEAD)))\r\n ++start, --length;\r\n\r\n if (!length)\r\n return EMPTY;\r\n\r\n if (!start && length == this.length)\r\n return this;\r\n\r\n var out = allocate(length);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD + (start << 1),\r\n length << 1\r\n );\r\n return out;\r\n }\r\n\r\n trimLeft(): String {\r\n assert(this != null);\r\n\r\n var start: isize = 0;\r\n var len: isize = this.length;\r\n while (start < len && isWhiteSpaceOrLineTerminator(load(changetype(this) + (start << 1), HEAD)))\r\n ++start;\r\n\r\n if (!start)\r\n return this;\r\n\r\n var outLen = len - start;\r\n if (!outLen)\r\n return EMPTY;\r\n\r\n var out = allocate(outLen);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD + (start << 1),\r\n outLen << 1\r\n );\r\n return out;\r\n }\r\n\r\n trimRight(): String {\r\n assert(this != null);\r\n\r\n var len: isize = this.length;\r\n while (len > 0 && isWhiteSpaceOrLineTerminator(load(changetype(this) + (len << 1), HEAD)))\r\n --len;\r\n\r\n if (len <= 0)\r\n return EMPTY;\r\n\r\n if (len == this.length)\r\n return this;\r\n\r\n var out = allocate(len);\r\n move_memory(\r\n changetype(out) + HEAD,\r\n changetype(this) + HEAD,\r\n len << 1\r\n );\r\n return out;\r\n }\r\n}\r\n\r\nfunction isWhiteSpaceOrLineTerminator(c: u16): bool {\r\n switch (c) {\r\n\r\n case 10: // \r\n case 13: // \r\n case 8232: // \r\n case 8233: // \r\n\r\n case 9: // \r\n case 11: // \r\n case 12: // \r\n case 32: // \r\n case 160: // \r\n case 65279: // \r\n\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nconst enum CharCode {\r\n PLUS = 0x2B,\r\n MINUS = 0x2D,\r\n DOT = 0x2E,\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n A = 0x41,\r\n B = 0x42,\r\n E = 0x45,\r\n O = 0x4F,\r\n X = 0x58,\r\n Z = 0x5a,\r\n a = 0x61,\r\n b = 0x62,\r\n e = 0x65,\r\n o = 0x6F,\r\n x = 0x78,\r\n z = 0x7A\r\n}\r\n\r\nexport function parseInt(str: String, radix: i32 = 0): f64 {\r\n return parse(str, radix);\r\n}\r\n\r\nexport function parseI32(str: String, radix: i32 = 0): i32 {\r\n return parse(str, radix);\r\n}\r\n\r\nexport function parseI64(str: String, radix: i32 = 0): i64 {\r\n return parse(str, radix);\r\n}\r\n\r\nfunction parse(str: String, radix: i32 = 0): T {\r\n var len: i32 = str.length;\r\n if (!len)\r\n return NaN;\r\n var ptr = changetype(str) /* + HEAD -> offset */;\r\n var code = load(ptr, HEAD);\r\n\r\n // determine sign\r\n var sign: T;\r\n if (code == CharCode.MINUS) {\r\n if (!--len)\r\n return NaN;\r\n code = load(ptr += 2, HEAD);\r\n sign = -1;\r\n } else if (code == CharCode.PLUS) {\r\n if (!--len)\r\n return NaN;\r\n code = load(ptr += 2, HEAD);\r\n sign = 1;\r\n } else\r\n sign = 1;\r\n\r\n // determine radix\r\n if (!radix) {\r\n if (code == CharCode._0 && len > 2) {\r\n switch (load(ptr + 2, HEAD)) {\r\n\r\n case CharCode.B:\r\n case CharCode.b:\r\n ptr += 4; len -= 2;\r\n radix = 2;\r\n break;\r\n\r\n case CharCode.O:\r\n case CharCode.o:\r\n ptr += 4; len -= 2;\r\n radix = 8;\r\n break;\r\n\r\n case CharCode.X:\r\n case CharCode.x:\r\n ptr += 4; len -= 2;\r\n radix = 16;\r\n break;\r\n\r\n default:\r\n radix = 10;\r\n }\r\n } else radix = 10;\r\n } else if (radix < 2 || radix > 36)\r\n return NaN;\r\n\r\n // calculate value\r\n var num: T = 0;\r\n while (len--) {\r\n code = load(ptr, HEAD);\r\n if (code >= CharCode._0 && code <= CharCode._9)\r\n code -= CharCode._0;\r\n else if (code >= CharCode.A && code <= CharCode.Z)\r\n code -= CharCode.A - 10;\r\n else if (code >= CharCode.a && code <= CharCode.z)\r\n code -= CharCode.a - 10;\r\n else\r\n break;\r\n if (code >= radix)\r\n break;\r\n num = (num * radix) + code;\r\n ptr += 2;\r\n }\r\n return sign * num;\r\n}\r\n\r\nexport function parseFloat(str: String): f64 {\r\n var len: i32 = str.length;\r\n if (!len)\r\n return NaN;\r\n var ptr = changetype(str) /* + HEAD -> offset */;\r\n var code = load(ptr, HEAD);\r\n\r\n // determine sign\r\n var sign: f64;\r\n if (code == CharCode.MINUS) {\r\n if (!--len)\r\n return NaN;\r\n code = load(ptr += 2, HEAD);\r\n sign = -1;\r\n } else if (code == CharCode.PLUS) {\r\n if (!--len)\r\n return NaN;\r\n code = load(ptr += 2, HEAD);\r\n sign = 1;\r\n } else\r\n sign = 1;\r\n\r\n // calculate value\r\n var num: f64 = 0;\r\n while (len--) {\r\n code = load(ptr, HEAD);\r\n if (code == CharCode.DOT) {\r\n ptr += 2;\r\n var fac: f64 = 0.1; // precision :(\r\n while (len--) {\r\n code = load(ptr, HEAD);\r\n if (code == CharCode.E || code == CharCode.e)\r\n assert(false); // TODO\r\n code -= CharCode._0;\r\n if (code > 9)\r\n break;\r\n num += code * fac;\r\n fac *= 0.1;\r\n ptr += 2;\r\n }\r\n break;\r\n }\r\n code -= CharCode._0;\r\n if (code >= 10)\r\n break;\r\n num = (num * 10) + code;\r\n ptr += 2;\r\n }\r\n return sign * num;\r\n}\r\n'};t.VERSION=m,t.main=s,t.parseArguments=n,t.checkDiagnostics=o,t.createStats=a,e.hrtime||(e.hrtime=i(15)),t.measure=l,t.printStats=u,t.createMemoryStream=function(e){var t=[];return t.write=function(t){'string'==typeof t?this.push(r.from(t,'utf8')):this.push(t),e&&e(t)},t.toBuffer=function(){return r.concat(this)},t.toString=function(){return this.toBuffer().toString('utf8')},t}}).call(t,i(0),i(5).Buffer)},function(e,t,i){'use strict';(function(e){function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(o()e)throw new RangeError('"size" argument must not be negative')}function c(e,t,i,r){return d(t),0>=t?a(e,t):void 0===i?a(e,t):'string'==typeof r?a(e,t).fill(i,r):a(e,t).fill(i)}function p(e,t){if(d(t),e=a(e,0>t?0:0|y(t)),!l.TYPED_ARRAY_SUPPORT)for(var r=0;rt.length?0:0|y(t.length);e=a(e,r);for(var s=0;si||t.byteLength=o())throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x'+o().toString(16)+' bytes');return 0|e}function _(e,t){if(l.isBuffer(e))return e.length;if('undefined'!=typeof ArrayBuffer&&'function'==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;'string'!=typeof e&&(e=''+e);var i=e.length;if(0===i)return 0;for(var r=!1;;)switch(t){case'ascii':case'latin1':case'binary':return i;case'utf8':case'utf-8':case void 0:return G(e).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return 2*i;case'hex':return i>>>1;case'base64':return K(e).length;default:if(r)return G(e).length;t=(''+t).toLowerCase(),r=!0;}}function b(e,t,i){var r=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return'';if((void 0===i||i>this.length)&&(i=this.length),0>=i)return'';if(i>>>=0,t>>>=0,i<=t)return'';for(e||(e='utf8');;)switch(e){case'hex':return D(this,t,i);case'utf8':case'utf-8':return k(this,t,i);case'ascii':return P(this,t,i);case'latin1':case'binary':return O(this,t,i);case'base64':return C(this,t,i);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return F(this,t,i);default:if(r)throw new TypeError('Unknown encoding: '+e);e=(e+'').toLowerCase(),r=!0;}}function x(e,t,r){var s=e[t];e[t]=e[r],e[r]=s}function T(e,t,i,r,s){if(0===e.length)return-1;if('string'==typeof i?(r=i,i=0):2147483647i&&(i=-2147483648),i=+i,isNaN(i)&&(i=s?0:e.length-1),0>i&&(i=e.length+i),i>=e.length){if(s)return-1;i=e.length-1}else if(0>i)if(s)i=0;else return-1;if('string'==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:v(e,t,i,r,s);if('number'==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&'function'==typeof Uint8Array.prototype.indexOf?s?Uint8Array.prototype.indexOf.call(e,t,i):Uint8Array.prototype.lastIndexOf.call(e,t,i):v(e,[t],i,r,s);throw new TypeError('val must be string, number or Buffer')}function v(e,t,r,s,n){function o(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,l=e.length,u=t.length;if(void 0!==s&&(s=(s+'').toLowerCase(),'ucs2'===s||'ucs-2'===s||'utf16le'===s||'utf-16le'===s)){if(2>e.length||2>t.length)return-1;a=2,l/=2,u/=2,r/=2}var d;if(n){var i=-1;for(d=r;dl&&(r=l-u),d=r;0<=d;d--){for(var c=!0,p=0;pn&&(s=n)):s=n;var o=t.length;if(0!=o%2)throw new TypeError('Invalid hex string');s>o/2&&(s=o/2);for(var a,l=0;li&&(a=i):2==l?(u=e[o+1],128==(192&u)&&(p=(31&i)<<6|63&u,127p||57343p&&(a=p))):void 0}null===a?(a=65533,l=1):65535>>10),a=56320|1023&a),n.push(a),o+=l}return I(n)}function I(e){var t=e.length;if(t<=ie)return Q.apply(String,e);for(var r='',s=0;st)&&(t=0),(!r||0>r||r>s)&&(r=s);for(var n='',o=t;oe)throw new RangeError('offset is not uint');if(e+t>i)throw new RangeError('Trying to access beyond buffer length')}function R(e,t,i,r,s,n){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||te.length)throw new RangeError('Index out of range')}function N(e,t,r,n){0>t&&(t=65535+t+1);for(var o=0,i=s(e.length-r,2);o>>8*(n?o:1-o)}function M(e,t,r,n){0>t&&(t=4294967295+t+1);for(var o=0,i=s(e.length-r,4);o>>8*(n?o:3-o)}function B(e,t,i,r){if(i+r>e.length)throw new RangeError('Index out of range');if(0>i)throw new RangeError('Index out of range')}function j(e,t,i,r,s){return s||B(e,t,i,4,34028234663852886e22,-34028234663852886e22),ee.write(e,t,i,r,23,4),i+4}function H(e,t,i,r,s){return s||B(e,t,i,8,17976931348623157e292,-17976931348623157e292),ee.write(e,t,i,r,52,8),i+8}function Y(e){if(e=V(e).replace(re,''),2>e.length)return'';for(;0!=e.length%4;)e+='=';return e}function V(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,'')}function X(e){return 16>e?'0'+e.toString(16):e.toString(16)}function G(e,t){t=t||Infinity;for(var r,s=e.length,n=null,o=[],a=0;ar){if(!n){if(56319r){-1<(t-=3)&&o.push(239,191,189),n=r;continue}r=(n-55296<<10|r-56320)+65536}else n&&-1<(t-=3)&&o.push(239,191,189);if(n=null,128>r){if(0>(t-=1))break;o.push(r)}else if(2048>r){if(0>(t-=2))break;o.push(192|r>>6,128|63&r)}else if(65536>r){if(0>(t-=3))break;o.push(224|r>>12,128|63&r>>6,128|63&r)}else if(1114112>r){if(0>(t-=4))break;o.push(240|r>>18,128|63&r>>12,128|63&r>>6,128|63&r)}else throw new Error('Invalid code point')}return o}function W(e){for(var t=[],r=0;r(t-=2));++a)r=e.charCodeAt(a),s=r>>8,n=r%256,o.push(n),o.push(s);return o}function K(e){return $.toByteArray(Y(e))}function Z(e,t,r,s){for(var n=0;n=t.length||n>=e.length);++n)t[n+r]=e[n];return n}function J(e){return e!==e}var Q=String.fromCharCode,$=i(6),ee=i(7),te=i(8);/*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */t.Buffer=l,t.SlowBuffer=function(e){return+e!=e&&(e=0),l.alloc(+e)},t.INSPECT_MAX_BYTES=50,l.TYPED_ARRAY_SUPPORT=e.TYPED_ARRAY_SUPPORT===void 0?function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&'function'==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(t){return!1}}():e.TYPED_ARRAY_SUPPORT,t.kMaxLength=o(),l.poolSize=8192,l._augment=function(e){return e.__proto__=l.prototype,e},l.from=function(e,t,i){return u(null,e,t,i)},l.TYPED_ARRAY_SUPPORT&&(l.prototype.__proto__=Uint8Array.prototype,l.__proto__=Uint8Array,'undefined'!=typeof Symbol&&Symbol.species&&l[Symbol.species]===l&&Object.defineProperty(l,Symbol.species,{value:null,configurable:!0})),l.alloc=function(e,t,i){return c(null,e,t,i)},l.allocUnsafe=function(e){return p(null,e)},l.allocUnsafeSlow=function(e){return p(null,e)},l.isBuffer=function(e){return!!(null!=e&&e._isBuffer)},l.compare=function(e,t){if(!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('Arguments must be Buffers');if(e===t)return 0;for(var r=e.length,n=t.length,o=0,i=s(r,n);oi&&(e+=' ... ')),''},l.prototype.compare=function(e,t,r,n,o){if(!l.isBuffer(e))throw new TypeError('Argument must be a Buffer');if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),0>t||r>e.length||0>n||o>this.length)throw new RangeError('out of range index');if(n>=o&&t>=r)return 0;if(n>=o)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,o>>>=0,this===e)return 0;for(var a=o-n,u=r-t,d=s(a,u),c=this.slice(n,o),p=e.slice(t,r),f=0;fs)&&(i=s),0i||0>t)||t>this.length)throw new RangeError('Attempt to write outside buffer bounds');r||(r='utf8');for(var n=!1;;)switch(r){case'hex':return z(this,e,t,i);case'utf8':case'utf-8':return E(this,e,t,i);case'ascii':return A(this,e,t,i);case'latin1':case'binary':return w(this,e,t,i);case'base64':return S(this,e,t,i);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return L(this,e,t,i);default:if(n)throw new TypeError('Unknown encoding: '+r);r=(''+r).toLowerCase(),n=!0;}},l.prototype.toJSON=function(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)}};var ie=4096;l.prototype.slice=function(e,t){var r=this.length;e=~~e,t=t===void 0?r:~~t,0>e?(e+=r,0>e&&(e=0)):e>r&&(e=r),0>t?(t+=r,0>t&&(t=0)):t>r&&(t=r),t=o&&(s-=n(2,8*t)),s},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||U(e,t,this.length);for(var s=t,i=1,o=this[e+--s];0=i&&(o-=n(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||U(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||U(e,2,this.length);var i=this[e]|this[e+1]<<8;return 32768&i?4294901760|i:i},l.prototype.readInt16BE=function(e,t){t||U(e,2,this.length);var i=this[e+1]|this[e]<<8;return 32768&i?4294901760|i:i},l.prototype.readInt32LE=function(e,t){return t||U(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||U(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||U(e,4,this.length),ee.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||U(e,4,this.length),ee.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||U(e,8,this.length),ee.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||U(e,8,this.length),ee.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,s){if(e=+e,t|=0,r|=0,!s){var o=n(2,8*r)-1;R(this,e,t,r,o,0)}var a=1,l=0;for(this[t]=255&e;++l>>8):N(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):M(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,s){if(e=+e,t|=0,!s){var o=n(2,8*r-1);R(this,e,t,r,o-1,-o)}var a=0,i=1,l=0;for(this[t]=255&e;++ae&&0==l&&0!==this[t+a-1]&&(l=1),this[t+a]=255&(e/i>>0)-l;return t+r},l.prototype.writeIntBE=function(e,t,r,s){if(e=+e,t|=0,!s){var o=n(2,8*r-1);R(this,e,t,r,o-1,-o)}var a=r-1,i=1,l=0;for(this[t+a]=255&e;0<=--a&&(i*=256);)0>e&&0==l&&0!==this[t+a+1]&&(l=1),this[t+a]=255&(e/i>>0)-l;return t+r},l.prototype.writeInt8=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=r(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):N(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):N(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):M(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,i){return e=+e,t|=0,i||R(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):M(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,i){return j(this,e,t,!0,i)},l.prototype.writeFloatBE=function(e,t,i){return j(this,e,t,!1,i)},l.prototype.writeDoubleLE=function(e,t,i){return H(this,e,t,!0,i)},l.prototype.writeDoubleBE=function(e,t,i){return H(this,e,t,!1,i)},l.prototype.copy=function(e,t,r,s){if(r||(r=0),s||0===s||(s=this.length),t>=e.length&&(t=e.length),t||(t=0),0t)throw new RangeError('targetStart out of bounds');if(0>r||r>=this.length)throw new RangeError('sourceStart out of bounds');if(0>s)throw new RangeError('sourceEnd out of bounds');s>this.length&&(s=this.length),e.length-ti||!l.TYPED_ARRAY_SUPPORT)for(n=0;nn&&(e=n)}if(void 0!==s&&'string'!=typeof s)throw new TypeError('encoding must be a string');if('string'==typeof s&&!l.isEncoding(s))throw new TypeError('Unknown encoding: '+s)}else'number'==typeof e&&(e&=255);if(0>t||this.length>>=0,r=r===void 0?this.length:r>>>0,e||(e=0);var o;if('number'==typeof e)for(o=t;o>16,o[l++]=255&s>>8,o[l++]=255&s;return 2===n?(s=u[e.charCodeAt(t)]<<2|u[e.charCodeAt(t+1)]>>4,o[l++]=255&s):1===n&&(s=u[e.charCodeAt(t)]<<10|u[e.charCodeAt(t+1)]<<4|u[e.charCodeAt(t+2)]>>2,o[l++]=255&s>>8,o[l++]=255&s),o}function n(e){return l[63&e>>18]+l[63&e>>12]+l[63&e>>6]+l[63&e]}function o(e,t,r){for(var s,o=[],a=t;ai?i:d+u));return 1==s?(t=e[r-1],n+=l[t>>2],n+=l[63&t<<4],n+='=='):2==s&&(t=(e[r-2]<<8)+e[r-1],n+=l[t>>10],n+=l[63&t>>4],n+=l[63&t<<2],n+='='),a.push(n),a.join('')}t.byteLength=function(e){return 3*e.length/4-r(e)},t.toByteArray=s,t.fromByteArray=a;for(var l=[],u=[],d='undefined'==typeof Uint8Array?Array:Uint8Array,c='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',p=0,i=c.length;p>1,h=-7,m=o?l-1:0,i=o?-1:1,d=t[r+m];for(m+=i,u=d&(1<<-h)-1,d>>=-h,h+=c;0>=-h,h+=a;0>1,_=23===u?5.960464477539063e-8-6.617444900424222e-24:0,b=l?0:p-1,i=l?1:-1,d=0>o||0===o&&0>1/o?1:0;for(o=Math.abs(o),isNaN(o)||o===Infinity?(h=isNaN(o)?1:0,f=g):(f=r(Math.log(o)/Math.LN2),1>o*(m=n(2,-f))&&(f--,m*=2),o+=1<=f+y?_/m:_*n(2,1-y),2<=o*m&&(f++,m/=2),f+y>=g?(h=0,f=g):1<=f+y?(h=(o*m-1)*n(2,u),f+=y):(h=o*n(2,y-1)*n(2,u),f=0));8<=u;t[a+b]=255&h,b+=i,h/=256,u-=8);for(f=f<o&&(i--,o+=1e9)),[i,o]};var s=i.performance||{},n=s.now||s.mozNow||s.msNow||s.oNow||s.webkitNow||function(){return new Date().getTime()}}).call(t,i(0),i(2))}])});