swh:1:snp:10c5cb6f205a33e9dd5182b9eeb35b40509f8f33
Raw File
Tip revision: a063bf9c67f50a5557db6e83edb4240a3b907bea authored by antfu on 08 February 2022, 12:39:22 UTC
[Publish To CDN] Publish from wenyan-lang/wenyan:master/static/dist
Tip revision: a063bf9
core.js.map
{"version":3,"sources":["webpack://Wenyan/webpack/universalModuleDefinition","webpack://Wenyan/webpack/bootstrap","webpack://Wenyan/external \"util\"","webpack://Wenyan/./node_modules/promise/lib/core.js","webpack://Wenyan/external \"stream\"","webpack://Wenyan/./node_modules/inherits/inherits.js","webpack://Wenyan/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://Wenyan/./node_modules/core-util-is/lib/util.js","webpack://Wenyan/external \"path\"","webpack://Wenyan/./node_modules/process-nextick-args/index.js","webpack://Wenyan/./node_modules/safe-buffer/index.js","webpack://Wenyan/./node_modules/http-response-object/lib/index.js","webpack://Wenyan/./src/utils.ts","webpack://Wenyan/./src/transpilers/base.ts","webpack://Wenyan/./src/parser.ts","webpack://Wenyan/./src/reader.ts","webpack://Wenyan/external \"child_process\"","webpack://Wenyan/./node_modules/sync-rpc/lib/json-buffer/index.js","webpack://Wenyan/external \"net\"","webpack://Wenyan/./node_modules/promise/index.js","webpack://Wenyan/./node_modules/asap/raw.js","webpack://Wenyan/./node_modules/concat-stream/index.js","webpack://Wenyan/./node_modules/readable-stream/lib/_stream_readable.js","webpack://Wenyan/./node_modules/readable-stream/lib/internal/streams/stream.js","webpack://Wenyan/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://Wenyan/./node_modules/readable-stream/lib/_stream_writable.js","webpack://Wenyan/./node_modules/string_decoder/lib/string_decoder.js","webpack://Wenyan/./node_modules/readable-stream/lib/_stream_transform.js","webpack://Wenyan/./node_modules/qs/lib/utils.js","webpack://Wenyan/./node_modules/qs/lib/formats.js","webpack://Wenyan/external \"fs\"","webpack://Wenyan/external \"http\"","webpack://Wenyan/external \"url\"","webpack://Wenyan/external \"https\"","webpack://Wenyan/./node_modules/caseless/index.js","webpack://Wenyan/./node_modules/asynckit/lib/iterate.js","webpack://Wenyan/./node_modules/asynckit/lib/async.js","webpack://Wenyan/./node_modules/asynckit/lib/abort.js","webpack://Wenyan/./node_modules/asynckit/lib/state.js","webpack://Wenyan/./node_modules/asynckit/lib/terminator.js","webpack://Wenyan/./node_modules/asynckit/serialOrdered.js","webpack://Wenyan/./src/converts/hanzi2num.ts","webpack://Wenyan/./src/converts/hanzi2pinyin.ts","webpack://Wenyan/./node_modules/sync-request/lib/index.js","webpack://Wenyan/./node_modules/sync-request/lib/FormData.js","webpack://Wenyan/./node_modules/sync-rpc/lib/index.js","webpack://Wenyan/./node_modules/sync-rpc/lib/worker.js","webpack://Wenyan/./node_modules/sync-rpc/lib sync","webpack://Wenyan/./node_modules/sync-rpc/lib/find-port.js","webpack://Wenyan/./node_modules/get-port/index.js","webpack://Wenyan/./node_modules/sync-request/lib/worker.js","webpack://Wenyan/./node_modules/then-request/lib/index.js","webpack://Wenyan/./node_modules/promise/lib/index.js","webpack://Wenyan/external \"domain\"","webpack://Wenyan/./node_modules/promise/lib/done.js","webpack://Wenyan/./node_modules/promise/lib/finally.js","webpack://Wenyan/./node_modules/promise/lib/es6-extensions.js","webpack://Wenyan/./node_modules/promise/lib/node-extensions.js","webpack://Wenyan/./node_modules/asap/asap.js","webpack://Wenyan/./node_modules/promise/lib/synchronous.js","webpack://Wenyan/./node_modules/readable-stream/readable.js","webpack://Wenyan/./node_modules/isarray/index.js","webpack://Wenyan/external \"events\"","webpack://Wenyan/external \"buffer\"","webpack://Wenyan/./node_modules/inherits/inherits_browser.js","webpack://Wenyan/./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://Wenyan/./node_modules/util-deprecate/node.js","webpack://Wenyan/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://Wenyan/./node_modules/buffer-from/index.js","webpack://Wenyan/./node_modules/typedarray/index.js","webpack://Wenyan/./node_modules/then-request/lib/ResponsePromise.js","webpack://Wenyan/./node_modules/then-request/lib/handle-qs.js","webpack://Wenyan/./node_modules/qs/lib/index.js","webpack://Wenyan/./node_modules/qs/lib/stringify.js","webpack://Wenyan/./node_modules/qs/lib/parse.js","webpack://Wenyan/./node_modules/http-basic/lib/index.js","webpack://Wenyan/./node_modules/http-basic/lib/cache-utils.js","webpack://Wenyan/./node_modules/http-basic/lib/cache-control-utils.js","webpack://Wenyan/./node_modules/parse-cache-control/index.js","webpack://Wenyan/./node_modules/http-basic/lib/FileCache.js","webpack://Wenyan/external \"crypto\"","webpack://Wenyan/./node_modules/http-basic/lib/MemoryCache.js","webpack://Wenyan/external \"zlib\"","webpack://Wenyan/./node_modules/form-data/lib/form_data.js","webpack://Wenyan/./node_modules/combined-stream/lib/combined_stream.js","webpack://Wenyan/./node_modules/delayed-stream/lib/delayed_stream.js","webpack://Wenyan/./node_modules/mime-types/index.js","webpack://Wenyan/./node_modules/mime-db/index.js","webpack://Wenyan/./node_modules/asynckit/index.js","webpack://Wenyan/./node_modules/asynckit/parallel.js","webpack://Wenyan/./node_modules/asynckit/lib/defer.js","webpack://Wenyan/./node_modules/asynckit/serial.js","webpack://Wenyan/./node_modules/form-data/lib/populate.js","webpack://Wenyan/./src/macro.ts","webpack://Wenyan/./src/version.ts","webpack://Wenyan/./src/keywords.ts","webpack://Wenyan/./src/stdlib.ts","webpack://Wenyan/./lib sync .*\\.wy$","webpack://Wenyan/./lib/js/位經.wy","webpack://Wenyan/./lib/js/天地經.wy","webpack://Wenyan/./lib/js/格物.wy","webpack://Wenyan/./lib/js/畫譜.wy","webpack://Wenyan/./lib/js/西曆法.wy","webpack://Wenyan/./lib/py/位經.wy","webpack://Wenyan/./lib/py/天地經.wy","webpack://Wenyan/./lib/py/西曆法.wy","webpack://Wenyan/./lib/rb/天地經.wy","webpack://Wenyan/./lib/列經.wy","webpack://Wenyan/./lib/易經.wy","webpack://Wenyan/./lib/曆法.wy","webpack://Wenyan/./lib/曆表.wy","webpack://Wenyan/./lib/渾沌經.wy","webpack://Wenyan/./lib/算經.wy","webpack://Wenyan/./lib/籌經.wy","webpack://Wenyan/./src/typecheck.ts","webpack://Wenyan/./src/types.ts","webpack://Wenyan/./src/transpilers/index.ts","webpack://Wenyan/./src/transpilers/js.ts","webpack://Wenyan/./src/transpilers/py.ts","webpack://Wenyan/./src/transpilers/rb.ts","webpack://Wenyan/./src/execute.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;AClFA,iC;;;;;;;ACAa;;AAEb,WAAW,mBAAO,CAAC,EAAU;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qDAAqD,cAAc;AACnE;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;;;;;ACpNA,mC;;;;;;ACAA;AACA,aAAa,mBAAO,CAAC,CAAM;AAC3B;AACA;AACA;AACA,CAAC;AACD;AACA,mBAAmB,mBAAO,CAAC,EAAuB;AAClD;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,CAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,CAAc;AAC/C,gBAAgB,mBAAO,CAAC,CAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,EAAoB;AAC3C,eAAe,mBAAO,CAAC,EAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA,E;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;;;;;AC1GA,iC;;;;;;;ACAa;;AAEb;AACA;AACA;AACA;AACA,oBAAoB;AACpB,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;AC3CA;AACA,aAAa,mBAAO,CAAC,EAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC7Da;AACb;AACA;AACA;AACA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AwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,yBAAyB;;AAEzB;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;ACnDA,gC;;;;;;;ACAa;;AAEb,iBAAiB,mBAAO,CAAC,EAAO;;;;;;;;ACFnB;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,kBAAkB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,EAAQ;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACpGA,eAAe,mBAAO,CAAC,EAAiB;AACxC,eAAe,mBAAO,CAAC,CAAU;AACjC,iBAAiB,mBAAO,CAAC,EAAa;;AAEtC;AACA,WAAW,mBAAO,CAAC,EAAY;AAC/B,CAAC;AACD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAmB;;AAE1C;AACA;;AAEA,yCAAyC,qBAAqB;AAC9D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB;AAC/C;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;;;;;;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,CAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,EAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,mBAAO,CAAC,EAAQ;;AAEzB;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,EAA2B;AAChD;;AAEA;;AAEA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,CAAc;AAC/C,gBAAgB,mBAAO,CAAC,CAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,CAAM;AAC9B;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,EAA+B;AACxD,kBAAkB,mBAAO,CAAC,EAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,CAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,EAAiB;AACjE;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,CAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,4FAA4F;AAC5F,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,mBAAO,CAAC,EAAiB;AAC/D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA,C;;;;;;AC1/BA,iBAAiB,mBAAO,CAAC,CAAQ;;;;;;;;ACApB;;AAEb;;AAEA,UAAU,mBAAO,CAAC,CAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,E;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,CAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,yBAAyB,mBAAO,CAAC,CAAc;AAC/C,gBAAgB,mBAAO,CAAC,CAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,EAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,EAA2B;AAChD;;AAEA;;AAEA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,EAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,CAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,CAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,E;;;;;;;AC9qBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,CAAa;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,C;;;;;;;ACvSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,CAAkB;;AAEvC;AACA,yBAAyB,mBAAO,CAAC,CAAc;AAC/C,gBAAgB,mBAAO,CAAC,CAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,C;;;;;;;ACrNa;;AAEb;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,OAAO,WAAW,aAAa;AACjD;;AAEA,mBAAmB,kBAAkB;AACrC;AACA;;AAEA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpNa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;ACjBA,+B;;;;;;ACAA,iC;;;;;;ACAA,gC;;;;;;ACAA,kC;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClEA,YAAY,mBAAO,CAAC,EAAY;AAChC,YAAY,mBAAO,CAAC,EAAY;AAChC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,cAAc;AAC3B,aAAa,MAAM;AACnB,aAAa,SAAS;AACtB,aAAa,eAAe;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1EA,YAAY,mBAAO,CAAC,EAAY;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB,EAAE;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;;;;;;ACjCA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA;AAC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;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;QACpB,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;QACnB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE;QACrB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,E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B;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAjBD,oCAiBC;;;;;;;;;;;;;;;;;;;;ACjCY;AACb;AACA;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAsB;AACpD,iBAAiB,mBAAO,CAAC,EAAY;AACrC;AACA,WAAW,mBAAO,CAAC,EAAU;AAC7B,kBAAkB,mBAAe,CAAC,EAAU;AAC5C;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjCa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6CAA6C;AACzE;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;;;;;;;ACfa;;AAEb,aAAa,mBAAO,CAAC,CAAM;AAC3B,cAAc,mBAAO,CAAC,EAAe;AACrC,kBAAkB,mBAAO,CAAC,EAAe;AACzC,aAAa,mBAAO,CAAC,EAAe;;AAEpC;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAe,CAAC,EAAU;AAC/D;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK,mBAAe,CAAC,EAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,2BAA2B;AAClE;AACA,qCAAqC,qBAAqB;AAC1D;AACA;AACA;AACA;;AAEA;;;;;;;;ACpLa;;AAEb,YAAY,mBAAO,CAAC,EAAK;AACzB,aAAa,mBAAO,CAAC,EAAe;;AAEpC;AACA;AACA;;AAEA;AACA,iCAAiC,oBAAoB;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc,sCAAsC;AACjE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,iBAAiB,qBAAqB;AACtC,OAAO;AACP;AACA,iBAAiB,cAAc,sCAAsC;AACrE;AACA;AACA;AACA,CAAC;;AAED;AACA,UAAU,wBAAQ,QAAQ,CAAC;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;AACA;AACA,4B;;;;;;;ACRa;;AAEb,gBAAgB,mBAAO,CAAC,EAAU;;AAElC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;ACVa;AACb,YAAY,mBAAO,CAAC,EAAK;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF,CAAC;;AAED;AACA;AACA;;;;;;;;AC3Ba;AACb;AACA;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA,qBAAqB,mBAAO,CAAC,EAAc;AAC3C;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,uFAAuF;AACvF;AACA;AACA;AACA;AACA,SAAS,EAAE,EAAE;AACb;AACA;AACA;;;;;;;;AChCa;AACb;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAsB;AACpD,cAAc,mBAAO,CAAC,EAAS;AAC/B,aAAa,mBAAO,CAAC,EAAe;AACpC,wBAAwB,mBAAO,CAAC,EAAmB;AACnD;AACA,kBAAkB,mBAAO,CAAC,EAAa;AACvC,mBAAmB,mBAAO,CAAC,EAAY;AACvC,eAAe,mBAAO,CAAC,EAAW;AAClC;AACA,eAAe,mBAAO,CAAC,EAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,2CAA2C;AACpF;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,cAAc;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;;;;;AC/Ka;;AAEb,iBAAiB,mBAAO,CAAC,CAAW;AACpC,mBAAO,CAAC,EAAW;AACnB,mBAAO,CAAC,EAAc;AACtB,mBAAO,CAAC,EAAqB;AAC7B,mBAAO,CAAC,EAAsB;AAC9B,mBAAO,CAAC,EAAkB;;;;;;;ACP1B,mC;;;;;;;ACAa;;AAEb,cAAc,mBAAO,CAAC,CAAW;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;ACZa;;AAEb,cAAc,mBAAO,CAAC,CAAW;;AAEjC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;ACfa;;AAEb;;AAEA,cAAc,mBAAO,CAAC,CAAW;;AAEjC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,sCAAsC;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;;;;;;;;ACtHa;;AAEb;AACA;;AAEA,cAAc,mBAAO,CAAC,CAAW;AACjC,WAAW,mBAAO,CAAC,EAAM;;AAEzB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA,wBAAwB;AACxB,aAAa,SAAS,EAAE,OAAO,SAAS,EAAE;AAC1C,IAAI;AACJ;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA,+CAA+C;AAC/C,qBAAqB;AACrB,2CAA2C;AAC3C;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ,SAAS;AACjB,MAAM,EAAE;AACR,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA,+CAA+C;AAC/C,qBAAqB;AACrB,cAAc;AACd,sCAAsC;AACtC,+CAA+C;AAC/C,4CAA4C;AAC5C,oBAAoB,sBAAsB,OAAO;AACjD,4BAA4B;AAC5B,MAAM;AACN,MAAM;AACN,2CAA2C;AAC3C,iCAAiC;AACjC,aAAa;AACb,yBAAyB;AACzB;AACA;AACA;AACA,6FAA6F;AAC7F,eAAe;AACf;AACA,KAAK;AACL;AACA,0BAA0B;AAC1B,gCAAgC;AAChC,MAAM;;AAEN;AACA;AACA;AACA,QAAQ,SAAS;AACjB,MAAM,EAAE;AACR,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;ACjIa;;AAEb,cAAc,mBAAO,CAAC,EAAO;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC/Da;;AAEb,cAAc,mBAAO,CAAC,CAAW;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7DA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,6BAA6B,mBAAO,CAAC,EAA2B;AAChE;AACA;AACA,qBAAqB,mBAAO,CAAC,EAA2B;AACxD,mBAAmB,mBAAO,CAAC,CAAyB;AACpD,sBAAsB,mBAAO,CAAC,EAA4B;AAC1D,wBAAwB,mBAAO,CAAC,EAA8B;AAC9D;;;;;;;AClBA,iBAAiB;;AAEjB;AACA;AACA;;;;;;;ACJA,mC;;;;;;ACAA,mC;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Ba;;AAEb,iDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ,aAAa,mBAAO,CAAC,CAAa;AAClC,WAAW,mBAAO,CAAC,CAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,C;;;;;;;AC7EA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,CAAM;;;;;;;;ACL/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,EAAqB;;AAE7C;AACA,yBAAyB,mBAAO,CAAC,CAAc;AAC/C,gBAAgB,mBAAO,CAAC,CAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,E;;;;;;AC9CA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;ACpEA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,qDAAqD,EAAE;AAC/E,iCAAiC,eAAe,EAAE;AAClD,oCAAoC,yBAAyB,EAAE;AAC/D,6BAA6B,gCAAgC,EAAE;AAC/D,0BAA0B,eAAe,EAAE;AAC3C,2BAA2B,gBAAgB;AAC3C;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,kBAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA,mFAAmF,wDAAwD;AAC3I,mFAAmF,wDAAwD;AAC3I,gDAAgD,mBAAmB;AACnE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,QAAQ;;AAE5B;;AAEA;AACA;AACA,yBAAyB,2BAA2B,EAAE;AACtD,0BAA0B,uBAAuB,EAAE;AACnD;AACA;AACA,KAAK;AACL;;AAEA;AACA,aAAa,gBAAgB;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iCAAiC,mBAAmB,0BAA0B;AAC9E,mCAAmC,mBAAmB,2BAA2B;;AAEjF,oBAAoB,mBAAmB;AACvC,0BAA0B,+BAA+B;;AAEzD,oBAAoB,mBAAmB;AACvC,0BAA0B,iCAAiC;;AAE3D,2BAA2B,sBAAsB,iDAAiD;;AAElG,qBAAqB,oCAAoC;AACzD,2BAA2B,gDAAgD;;AAE3E,qBAAqB,oCAAoC;AACzD,2BAA2B,kDAAkD;;AAE7E,qBAAqB,wEAAwE;AAC7F,2BAA2B,kFAAkF;;AAE7G,qBAAqB,wEAAwE;AAC7F,2BAA2B,oFAAoF;;AAE/G;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD,GAAG;AACH,yBAAyB,OAAO;AAChC,GAAG;AACH,UAAU,OAAO;AACjB,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,GAAG,UAAU,0BAA0B,kBAAkB;AAC1E,iBAAiB,GAAG,UAAU,0BAA0B,kBAAkB;AAC1E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wBAAwB,GAAG;AAC3B;AACA,eAAe,GAAG;AAClB,+BAA+B;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,uBAAuB,iCAAiC;AACxD,qBAAqB,+BAA+B;AACpD,uBAAuB,gCAAgC;AACvD,qBAAqB,8BAA8B;;;AAGnD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,qBAAqB;AACpC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA,qCAAqC,gBAAgB;AACrD;AACA;AACA,SAAS;AACT;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,0CAA0C;;AAE7E;AACA;;AAEA,iCAAiC,WAAW;AAC5C,iCAAiC,mBAAmB;;AAEpD,sBAAsB,6BAA6B;AACnD,oBAAoB,yBAAyB;;AAE7C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,iCAAiC;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,iCAAiC;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;ACrnBY;AACb;AACA,cAAc,mBAAO,CAAC,EAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC1Ba;AACb;AACA,WAAW,mBAAO,CAAC,EAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACjBa;;AAEb,gBAAgB,mBAAO,CAAC,EAAa;AACrC,YAAY,mBAAO,CAAC,EAAS;AAC7B,cAAc,mBAAO,CAAC,EAAW;;AAEjC;AACA;AACA;AACA;AACA;;;;;;;;ACVa;;AAEb,YAAY,mBAAO,CAAC,EAAS;AAC7B,cAAc,mBAAO,CAAC,EAAW;;AAEjC;AACA,yCAAyC;AACzC;AACA,KAAK;AACL,4CAA4C;AAC5C;AACA,KAAK;AACL,qCAAqC;AACrC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,mBAAmB,oBAAoB;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,oBAAoB;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;ACjNa;;AAEb,YAAY,mBAAO,CAAC,EAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,kBAAkB;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wCAAwC;;AAExC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;AC7KA,iDAAa;AACb;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,EAAe;AACxC,kBAAkB,mBAAO,CAAC,EAAa;AACvC,oBAAoB,mBAAO,CAAC,EAAe;AAC3C,aAAa,mBAAO,CAAC,EAAM;AAC3B,aAAa,mBAAO,CAAC,EAAM;AAC3B,YAAY,mBAAO,CAAC,EAAK;AACzB,eAAe,mBAAO,CAAC,CAAQ;AAC/B,cAAc,mBAAO,CAAC,EAAO;AAC7B,eAAe,mBAAO,CAAC,CAAsB;AAC7C;AACA,eAAe,mBAAO,CAAC,EAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,YAAY,2IAA2I;AAC5L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAyC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,oDAAoD,4BAA4B,4BAA4B,EAAE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3Xa;AACb;AACA,4BAA4B,mBAAO,CAAC,EAAuB;AAC3D;AACA;AACA;AACA;AACA,sDAAsD,oCAAoC,EAAE;AAC5F;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC3Ca;AACb;AACA,wBAAwB,mBAAO,CAAC,EAAqB;AACrD;AACA;AACA,6FAA6F;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpDA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,iBAAiB,EAAE;AAC9D;AACA;;AAEA;AACA,uDAAuD,iBAAiB,EAAE,qCAAqC,iBAAiB,EAAE;;AAElI;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;;;;;;;;ACpCa;AACb;AACA,SAAS,mBAAO,CAAC,EAAI;AACrB,aAAa,mBAAO,CAAC,CAAM;AAC3B,eAAe,mBAAO,CAAC,EAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD;;;;;;;AC1GA,mC;;;;;;;ACAa;AACb;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,CAAQ;AAC/B,aAAa,mBAAO,CAAC,EAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB,yEAAyE;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;ACvDA,iC;;;;;;ACAA,qBAAqB,mBAAO,CAAC,EAAiB;AAC9C,WAAW,mBAAO,CAAC,CAAM;AACzB,WAAW,mBAAO,CAAC,CAAM;AACzB,WAAW,mBAAO,CAAC,EAAM;AACzB,YAAY,mBAAO,CAAC,EAAO;AAC3B,eAAe,mBAAO,CAAC,EAAK;AAC5B,SAAS,mBAAO,CAAC,EAAI;AACrB,WAAW,mBAAO,CAAC,EAAY;AAC/B,eAAe,mBAAO,CAAC,EAAU;AACjC,eAAe,mBAAO,CAAC,EAAe;;AAEtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,GAAG;AACH;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACxcA,WAAW,mBAAO,CAAC,CAAM;AACzB,aAAa,mBAAO,CAAC,CAAQ;AAC7B,oBAAoB,mBAAO,CAAC,EAAgB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC/MA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,WAAW,mBAAO,CAAC,CAAM;;AAEzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ;AACA;AACA;AACA;;AAEA,SAAS,mBAAO,CAAC,EAAS;AAC1B,cAAc,mBAAO,CAAC,CAAM;;AAE5B;AACA;AACA;AACA;;AAEA,mCAAmC,SAAS;AAC5C;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;;;;;;AC3LA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,EAAW;;;;;;;;;;;;;ACVpC;AACA;AACA,kBAAkB,mBAAO,CAAC,EAAe;AACzC,kBAAkB,mBAAO,CAAC,EAAa;AACvC,kBAAkB,mBAAO,CAAC,EAAoB;AAC9C;;;;;;;ACLA,iBAAiB,mBAAO,CAAC,EAAkB;AAC3C,iBAAiB,mBAAO,CAAC,EAAgB;AACzC,iBAAiB,mBAAO,CAAC,EAAqB;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;;;;;;AC1CA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACzBA,oBAAoB,mBAAO,CAAC,EAAoB;;AAEhD;AACA;;AAEA;AACA;AACA;AACA,aAAa,aAAa;AAC1B,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB,aAAa,SAAS;AACtB;AACA;AACA;AA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","file":"dist/core.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Wenyan\"] = factory();\n\telse\n\t\troot[\"Wenyan\"] = factory();\n})((typeof self !== \"undefined\" ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","module.exports = require(\"util\");","'use strict';\n\nvar asap = require('asap/raw');\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n  try {\n    return obj.then;\n  } catch (ex) {\n    LAST_ERROR = ex;\n    return IS_ERROR;\n  }\n}\n\nfunction tryCallOne(fn, a) {\n  try {\n    return fn(a);\n  } catch (ex) {\n    LAST_ERROR = ex;\n    return IS_ERROR;\n  }\n}\nfunction tryCallTwo(fn, a, b) {\n  try {\n    fn(a, b);\n  } catch (ex) {\n    LAST_ERROR = ex;\n    return IS_ERROR;\n  }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n  if (typeof this !== 'object') {\n    throw new TypeError('Promises must be constructed via new');\n  }\n  if (typeof fn !== 'function') {\n    throw new TypeError('Promise constructor\\'s argument is not a function');\n  }\n  this._U = 0;\n  this._V = 0;\n  this._W = null;\n  this._X = null;\n  if (fn === noop) return;\n  doResolve(fn, this);\n}\nPromise._Y = null;\nPromise._Z = null;\nPromise._0 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  if (this.constructor !== Promise) {\n    return safeThen(this, onFulfilled, onRejected);\n  }\n  var res = new Promise(noop);\n  handle(this, new Handler(onFulfilled, onRejected, res));\n  return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n  return new self.constructor(function (resolve, reject) {\n    var res = new Promise(noop);\n    res.then(resolve, reject);\n    handle(self, new Handler(onFulfilled, onRejected, res));\n  });\n}\nfunction handle(self, deferred) {\n  while (self._V === 3) {\n    self = self._W;\n  }\n  if (Promise._Y) {\n    Promise._Y(self);\n  }\n  if (self._V === 0) {\n    if (self._U === 0) {\n      self._U = 1;\n      self._X = deferred;\n      return;\n    }\n    if (self._U === 1) {\n      self._U = 2;\n      self._X = [self._X, deferred];\n      return;\n    }\n    self._X.push(deferred);\n    return;\n  }\n  handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n  asap(function() {\n    var cb = self._V === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      if (self._V === 1) {\n        resolve(deferred.promise, self._W);\n      } else {\n        reject(deferred.promise, self._W);\n      }\n      return;\n    }\n    var ret = tryCallOne(cb, self._W);\n    if (ret === IS_ERROR) {\n      reject(deferred.promise, LAST_ERROR);\n    } else {\n      resolve(deferred.promise, ret);\n    }\n  });\n}\nfunction resolve(self, newValue) {\n  // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n  if (newValue === self) {\n    return reject(\n      self,\n      new TypeError('A promise cannot be resolved with itself.')\n    );\n  }\n  if (\n    newValue &&\n    (typeof newValue === 'object' || typeof newValue === 'function')\n  ) {\n    var then = getThen(newValue);\n    if (then === IS_ERROR) {\n      return reject(self, LAST_ERROR);\n    }\n    if (\n      then === self.then &&\n      newValue instanceof Promise\n    ) {\n      self._V = 3;\n      self._W = newValue;\n      finale(self);\n      return;\n    } else if (typeof then === 'function') {\n      doResolve(then.bind(newValue), self);\n      return;\n    }\n  }\n  self._V = 1;\n  self._W = newValue;\n  finale(self);\n}\n\nfunction reject(self, newValue) {\n  self._V = 2;\n  self._W = newValue;\n  if (Promise._Z) {\n    Promise._Z(self, newValue);\n  }\n  finale(self);\n}\nfunction finale(self) {\n  if (self._U === 1) {\n    handle(self, self._X);\n    self._X = null;\n  }\n  if (self._U === 2) {\n    for (var i = 0; i < self._X.length; i++) {\n      handle(self, self._X[i]);\n    }\n    self._X = null;\n  }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n  var done = false;\n  var res = tryCallTwo(fn, function (value) {\n    if (done) return;\n    done = true;\n    resolve(promise, value);\n  }, function (reason) {\n    if (done) return;\n    done = true;\n    reject(promise, reason);\n  });\n  if (!done && res === IS_ERROR) {\n    done = true;\n    reject(promise, LAST_ERROR);\n  }\n}\n","module.exports = require(\"stream\");","try {\n  var util = require('util');\n  /* istanbul ignore next */\n  if (typeof util.inherits !== 'function') throw '';\n  module.exports = util.inherits;\n} catch (e) {\n  /* istanbul ignore next */\n  module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","module.exports = require(\"path\");","'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","\"use strict\";\n/**\n * A response from a web request\n */\nvar Response = /** @class */ (function () {\n    function Response(statusCode, headers, body, url) {\n        if (typeof statusCode !== 'number') {\n            throw new TypeError('statusCode must be a number but was ' + typeof statusCode);\n        }\n        if (headers === null) {\n            throw new TypeError('headers cannot be null');\n        }\n        if (typeof headers !== 'object') {\n            throw new TypeError('headers must be an object but was ' + typeof headers);\n        }\n        this.statusCode = statusCode;\n        var headersToLowerCase = {};\n        for (var key in headers) {\n            headersToLowerCase[key.toLowerCase()] = headers[key];\n        }\n        this.headers = headersToLowerCase;\n        this.body = body;\n        this.url = url;\n    }\n    Response.prototype.isError = function () {\n        return this.statusCode === 0 || this.statusCode >= 400;\n    };\n    Response.prototype.getBody = function (encoding) {\n        if (this.statusCode === 0) {\n            var err = new Error('This request to ' +\n                this.url +\n                ' resulted in a status code of 0. This usually indicates some kind of network error in a browser (e.g. CORS not being set up or the DNS failing to resolve):\\n' +\n                this.body.toString());\n            err.statusCode = this.statusCode;\n            err.headers = this.headers;\n            err.body = this.body;\n            err.url = this.url;\n            throw err;\n        }\n        if (this.statusCode >= 300) {\n            var err = new Error('Server responded to ' +\n                this.url +\n                ' with status code ' +\n                this.statusCode +\n                ':\\n' +\n                this.body.toString());\n            err.statusCode = this.statusCode;\n            err.headers = this.headers;\n            err.body = this.body;\n            err.url = this.url;\n            throw err;\n        }\n        if (!encoding || typeof this.body === 'string') {\n            return this.body;\n        }\n        return this.body.toString(encoding);\n    };\n    return Response;\n}());\nmodule.exports = Response;\n","/**\n * To check match of a part of string\n */\nexport function match(src: string, startAt: number, target: string) {\n  let length = target.length;\n  for (let i = 0; i < length; i++) {\n    if (src[startAt + i] !== target[i]) return false;\n  }\n  return true;\n}\n\nexport const defaultAssertLogger: (...messages: any[]) => void = console.log;\n\nexport const defaultAssert = (logger = defaultAssertLogger) => (\n  msg: string,\n  pos: number,\n  b: any\n) => {\n  if (!b) logger(`ERROR@${pos}: ${msg}`);\n};\n\nexport function isRoman(x: string) {\n  return x.replace(/[ -~]/g, \"\").length == 0;\n}\n","import { ASCNode, TranspilerOptions } from \"../types\";\n\nexport interface ModuleWrapperOptions {\n  src: string;\n  moduleName: string;\n  scopeName: string;\n  markerStart: string;\n  markerEnd: string;\n}\n\nexport class BaseTranspiler {\n  asc: ASCNode[];\n  tmpVarCnt = 0;\n  randVarCnt = 0;\n  lib = \"\";\n\n  constructor(asc: ASCNode[]) {\n    this.asc = asc;\n  }\n\n  randVar() {\n    return `_rand${++this.randVarCnt}`;\n  }\n\n  currTmpVar() {\n    return `_ans${this.tmpVarCnt}`;\n  }\n\n  nextTmpVar() {\n    return `_ans${++this.tmpVarCnt}`;\n  }\n\n  transpile(\n    options: Partial<TranspilerOptions> = {}\n  ): { result: string; imports: string[] } {\n    throw Error(\"No Implementation\");\n  }\n\n  wrapModule(name: string, src: string): string {\n    const moduleName = name.replace(/\\//g, \"_\");\n    const scopeName = name.split(\"/\").slice(-1)[0];\n    const markerStart = `/*___wenyan_module_${moduleName}_start___*/`;\n    const markerEnd = `/*___wenyan_module_${moduleName}_end___*/`;\n    return this.moduleWrapper({\n      src,\n      moduleName,\n      scopeName,\n      markerStart,\n      markerEnd\n    });\n  }\n\n  protected moduleWrapper({ src }: ModuleWrapperOptions) {\n    return src;\n  }\n}\n","import {\n  CompileOptions,\n  ASCNode,\n  Token,\n  TokenType,\n  RomanizeSystem,\n  ExecuteOptions\n} from \"./types\";\nimport {\n  hanzi2num,\n  hanzi2numstr,\n  num2hanzi,\n  bool2hanzi\n} from \"./converts/hanzi2num\";\nimport { hanzi2pinyin } from \"./converts/hanzi2pinyin\";\nimport { bundleImports } from \"./reader\";\nimport { expandMacros, extractMacros } from \"./macro\";\nimport { version } from \"./version\";\nimport { NUMBER_KEYWORDS, KEYWORDS } from \"./keywords\";\nimport { STDLIB } from \"./stdlib\";\nimport { typecheck, printSignature } from \"./typecheck\";\nimport transpilers from \"./transpilers\";\nimport { match, defaultAssert, isRoman } from \"./utils\";\nimport { evalCompiled, isLangSupportedForEval } from \"./execute\";\n\nconst defaultTrustedHosts = [\n  \"https://raw.githubusercontent.com/wenyan-lang/wenyan/master\"\n];\n\nconst IGNORE_SYMBOLS = \"。、\\n\\r\\t \";\n\nfunction wy2tokens(txt: string, assert = defaultAssert()) {\n  var tokens: Token[] = [];\n  var tok = \"\";\n  var idt = false;\n  var num = false;\n  var litlvl = 0;\n  var data = false;\n\n  var i = 0;\n\n  function enddata() {\n    if (data) {\n      tokens.push([\"data\", tok, i]);\n      data = false;\n      tok = \"\";\n    }\n  }\n  function endnum() {\n    if (num) {\n      const numStr = hanzi2numstr(tok);\n      assert(`Invalid number \"${tok}\".`, i, numStr != null);\n      tokens.push([\"num\", numStr, i]);\n      tok = \"\";\n      num = false;\n    }\n  }\n\n  while (i < txt.length) {\n    if (IGNORE_SYMBOLS.includes(txt[i])) {\n      if (idt || data) {\n        tok += txt[i];\n      }\n    } else if (match(txt, i, \"「「\") || txt[i] == \"『\") {\n      var is_sin = txt[i] == \"「\";\n      if (litlvl == 0) {\n        enddata();\n        endnum();\n        idt = true;\n        tok = \"\";\n      } else {\n        tok += txt[i];\n        if (is_sin) {\n          tok += txt[i + 1];\n        }\n      }\n      litlvl++;\n      if (is_sin) {\n        i++;\n      }\n    } else if (\n      (txt[i] == \"」\" &&\n        txt[i + 1] == \"」\" &&\n        (txt[i + 2] != \"」\" || txt[i + 3] == \"」\")) ||\n      txt[i] == \"』\"\n    ) {\n      var is_sin = txt[i] == \"」\";\n      litlvl--;\n      if (litlvl == 0) {\n        // escape double quote and new lines\n        tok = tok.replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n\n        tokens.push([\"lit\", `\"${tok}\"`, i + 1]);\n        idt = false;\n        tok = \"\";\n      } else {\n        tok += txt[i];\n        if (is_sin) {\n          tok += txt[i + 1];\n        }\n      }\n      if (is_sin) {\n        i++;\n      }\n    } else if (litlvl > 0) {\n      tok += txt[i];\n    } else {\n      if (txt[i] == \"「\") {\n        enddata();\n        endnum();\n        idt = true;\n        tok = \"\";\n      } else if (txt[i] == \"」\") {\n        tokens.push([\"iden\", tok, i]);\n        idt = false;\n        tok = \"\";\n      } else {\n        if (idt) {\n          tok += txt[i];\n        } else if (num) {\n          if (NUMBER_KEYWORDS.includes(txt[i])) {\n            tok += txt[i];\n          } else {\n            endnum();\n            i--;\n          }\n        } else {\n          var ok = false;\n          for (var k in KEYWORDS) {\n            ok = match(txt, i, k);\n            if (ok) {\n              enddata();\n              var kinfo = KEYWORDS[k];\n              i += k.length - 1;\n              tokens.push([...kinfo, i] as Token);\n              break;\n            }\n          }\n          if (!ok) {\n            if (NUMBER_KEYWORDS.includes(txt[i])) {\n              num = true;\n              tok = txt[i];\n            } else {\n              tok += txt[i];\n              data = true;\n            }\n          }\n        }\n      }\n    }\n    i++;\n  }\n  if (tok.length) {\n    if (num) {\n      const numStr = hanzi2numstr(tok);\n      assert(`Invalid number \"${tok}\".`, i, numStr != null);\n      tokens.push([\"num\", numStr, i]);\n    } else if (data) {\n      tokens.push([\"data\", tok, i]);\n    } else {\n      assert(\"Unterminated identifier.\", i, false);\n    }\n  }\n  return tokens;\n}\n\nlet idenMap = {};\n\nfunction tokenRomanize(tokens: Token[], system: RomanizeSystem) {\n  function noDup(x: string) {\n    for (var k in idenMap) {\n      if (idenMap[k] == x) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  for (const token of tokens) {\n    if (token[0] == \"iden\" && !isRoman(token[1])) {\n      var r = idenMap[token[1]];\n      var key = token[1];\n      if (r !== undefined) {\n        token[1] = r;\n      } else {\n        r = hanzi2pinyin(token[1], system);\n        while (!noDup(r)) {\n          r += \"_\";\n        }\n        token[1] = r;\n      }\n      idenMap[key] = r;\n    }\n  }\n}\n\nfunction defaultLogCallback(x: any) {\n  return typeof x == \"string\"\n    ? console.log(x)\n    : console.dir(x, { depth: null, maxArrayLength: null });\n}\n\nfunction defaultErrorCallback(e: any) {\n  console.error(e);\n  process.exit(e);\n}\n\nfunction tokens2asc(tokens: Token[], assert = defaultAssert()) {\n  var asc: ASCNode[] = [];\n  var i = 0;\n  while (i < tokens.length) {\n    var pos = gettok(i, 2);\n    var cmd = gettok(i, 0);\n\n    // @ts-ignore\n    function gettok(idx: number, jdx: 0): TokenType;\n    // @ts-ignore\n    function gettok(idx: number, jdx: 1): string | undefined;\n    // @ts-ignore\n    function gettok(idx: number, jdx: 2): number;\n    // @ts-ignore\n    function gettok(idx: number, jdx: number) {\n      if (tokens[idx] === undefined) {\n        assert(`Unexpected EOF`, pos, false);\n      }\n      return tokens[idx][jdx];\n    }\n\n    const typeassert = (idx: number, good, reason?: string) => {\n      var typ = gettok(idx, 0);\n      assert(\n        `<${cmd}> Expecting ${good.join(\"/\")}${\n          reason ? \" for \" + reason : \"\"\n        }, found ${typ}`,\n        pos,\n        good.includes(typ)\n      );\n    };\n\n    if (\n      gettok(i, 0) == \"decl\" &&\n      (gettok(i, 1) == \"uninit\" || gettok(i, 1) == \"public\")\n    ) {\n      typeassert(i + 1, [\"num\"], \"variable count\");\n      typeassert(i + 2, [\"type\"], \"variable type\");\n      const cnt = Number(gettok(i + 1, 1));\n      assert(\n        `Invalid variable count ${cnt}`,\n        pos,\n        Number.isSafeInteger(cnt) && cnt > 0\n      );\n\n      var x: ASCNode = {\n        op: \"var\",\n        count: cnt,\n        type: gettok(i + 2, 1),\n        values: [],\n        names: [],\n        public: gettok(i, 1) == \"public\",\n        pos\n      };\n      i += 3;\n      while (tokens[i] && gettok(i, 0) == \"assgn\") {\n        x.values.push(tokens[i + 1]);\n        i += 2;\n      }\n      if (tokens[i] && gettok(i, 0) == \"name\") {\n        x.names.push(gettok(i + 1, 1));\n        i += 2;\n      }\n      while (tokens[i] && gettok(i, 0) == \"assgn\") {\n        x.names.push(gettok(i + 1, 1));\n        i += 2;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"decl\" && gettok(i, 1) == \"init\") {\n      typeassert(i + 1, [\"type\"], \"variable type\");\n      typeassert(\n        i + 2,\n        [\"data\", \"num\", \"lit\", \"iden\", \"bool\", \"any\"],\n        \"variable initialization\"\n      );\n\n      var x: ASCNode = {\n        op: \"var\",\n        count: 1,\n        type: gettok(i + 1, 1),\n        values: [tokens[i + 2]],\n        public: false,\n        pos\n      };\n      i += 3;\n      if (tokens[i] !== undefined && gettok(i, 0) == \"name\") {\n        x.names = [gettok(i + 1, 1)];\n        i += 2;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"decl\" && gettok(i, 1) == \"prop\") {\n      typeassert(i + 1, [\"lit\"], \"property key\");\n      typeassert(i + 3, [\"type\"], \"property type\");\n      typeassert(i + 4, [\"assgn\"], \"property value\");\n      var x: ASCNode = {\n        op: \"prop\",\n        type: gettok(i + 3, 1),\n        name: tokens[i + 1][1],\n        value: tokens[i + 5],\n        pos\n      };\n      i += 6;\n      asc.push(x);\n    } else if (gettok(i, 0) == \"print\") {\n      asc.push({ op: \"print\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"funstart\") {\n      var x: ASCNode = { op: \"fun\", arity: 0, args: [], pos };\n      i++;\n      if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"funarg\") {\n        i++;\n        while (!(gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"funbody\")) {\n          typeassert(i, [\"num\"], \"argument count\");\n          typeassert(i + 1, [\"type\"], \"argument type\");\n          var typ = gettok(i + 1, 1);\n          var cnt = Number(gettok(i, 1));\n          assert(\n            `Invalid argument count ${cnt}.`,\n            pos,\n            Number.isSafeInteger(cnt) && cnt > 0\n          );\n          x.arity += cnt;\n          i += 2;\n          for (var j = 0; j < cnt; j++) {\n            typeassert(i + j * 2, [\"assgn\"], \"another argument\");\n            typeassert(i + j * 2 + 1, [\"iden\"], \"argument\");\n            x.args.push({ name: tokens[i + j * 2 + 1][1], type: typ });\n          }\n          i += cnt * 2;\n        }\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"funbody\") {\n      asc.push({ op: \"funbody\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"bigend\") {\n      assert(\n        `<${cmd}> Incorrect function/object end`,\n        pos,\n        gettok(i + 2, 0) == \"ctrl\" && gettok(i + 1, 0) == \"iden\"\n      );\n      asc.push({ op: gettok(i + 2, 1) as \"objend\", pos });\n      i += 3;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"objbody\") {\n      asc.push({ op: \"objbody\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"if\") {\n      var x: ASCNode = { op: \"if\", test: [], pos };\n      i++;\n      while (!(gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"conj\")) {\n        x.test.push(tokens[i]);\n        i++;\n      }\n      i++;\n      asc.push(x);\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"iftrue\") {\n      asc.push({ op: \"if\", test: [[\"ans\"]], pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"iffalse\") {\n      asc.push({ op: \"if\", test: [[\"ans\"]], not: true, pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"elseif\") {\n      var x: ASCNode = { op: \"if\", test: [], elseif: true, pos };\n      i++;\n      while (!(gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"conj\")) {\n        x.test.push(tokens[i]);\n        i++;\n      }\n      i++;\n      asc.push(x);\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"end\") {\n      asc.push({ op: \"end\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"ret\") {\n      asc.push({ op: \"return\", value: tokens[i + 1], pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"retprev\") {\n      asc.push({ op: \"return\", value: [\"ans\"], pos });\n      i += 1;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"retvoid\") {\n      asc.push({ op: \"return\", pos });\n      i += 1;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"break\") {\n      asc.push({ op: \"break\", pos });\n      i += 1;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"continue\") {\n      asc.push({ op: \"continue\", pos });\n      i += 1;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"else\") {\n      asc.push({ op: \"else\", pos });\n      i += 1;\n    } else if (gettok(i, 0) == \"op\") {\n      typeassert(i + 2, [\"opord\"]);\n      var x: ASCNode = { op: \"op+\", pos };\n      if (gettok(i + 2, 1) == \"l\") {\n        x.lhs = tokens[i + 1];\n        x.rhs = tokens[i + 3];\n      } else {\n        x.lhs = tokens[i + 3];\n        x.rhs = tokens[i + 1];\n      }\n      if (gettok(i, 1) == \"/\" && tokens[i + 4] && gettok(i + 4, 0) == \"mod\") {\n        x.op = \"op%\";\n        i += 5;\n      } else {\n        x.op = (\"op\" + gettok(i, 1)) as \"op+\";\n        i += 4;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"not\") {\n      asc.push({ op: \"not\", value: tokens[i + 1], pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"name\") {\n      typeassert(i + 1, [\"iden\"]);\n      var x: ASCNode = { op: \"name\", names: [gettok(i + 1, 1)], pos };\n      i += 2;\n      while (tokens[i] && gettok(i, 0) == \"assgn\") {\n        x.names.push(gettok(i + 1, 1));\n        i += 2;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"call\" && gettok(i, 1) == \"r\") {\n      var x: ASCNode = { op: \"call\", fun: tokens[i + 1], args: [], pos };\n      i += 2;\n      while (tokens[i] && gettok(i, 0) == \"opord\" && gettok(i, 1) == \"r\") {\n        typeassert(i + 1, [\"data\", \"num\", \"lit\", \"iden\", \"bool\", \"ans\"]);\n        x.args.push(tokens[i + 1]);\n        i += 2;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"call\" && gettok(i, 1) == \"l\") {\n      asc.push({ op: \"call\", pop: true, fun: tokens[i + 1], pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"ctnr\" && gettok(i, 1) == \"push\") {\n      typeassert(i + 2, [\"opord\"]);\n      assert(`<${cmd}> Only opord l allowed`, pos, gettok(i + 2, 1) == \"l\");\n      var x: ASCNode = {\n        op: \"push\",\n        container: tokens[i + 1],\n        values: [tokens[i + 3]],\n        pos\n      };\n      i += 4;\n      while (tokens[i] && gettok(i, 0) == \"opord\" && gettok(i, 1) == \"l\") {\n        x.values.push(tokens[i + 1]);\n        i += 2;\n      }\n      asc.push(x);\n    } else if (\n      gettok(i, 0) == \"expr\" &&\n      tokens[i + 2] &&\n      gettok(i + 2, 0) == \"ctnr\" &&\n      gettok(i + 2, 1) == \"subs\"\n    ) {\n      typeassert(i + 1, [\"iden\", \"lit\", \"ans\"]);\n      var x: ASCNode = {\n        op: \"subscript\",\n        container: tokens[i + 1],\n        value: tokens[i + 3],\n        pos\n      };\n      asc.push(x);\n      i += 4;\n    } else if (\n      gettok(i, 0) == \"expr\" &&\n      tokens[i + 2] &&\n      gettok(i + 2, 0) == \"ctnr\" &&\n      gettok(i + 2, 1) == \"len\"\n    ) {\n      typeassert(i + 1, [\"iden\", \"lit\", \"subs\"]);\n      var x: ASCNode = { op: \"length\", container: tokens[i + 1], pos };\n      asc.push(x);\n      i += 3;\n    } else if (\n      gettok(i, 0) == \"expr\" &&\n      tokens[i + 3] &&\n      gettok(i + 3, 0) == \"lop\"\n    ) {\n      var x: ASCNode = {\n        op: (\"op\" + gettok(i + 3, 1)) as \"op+\",\n        lhs: tokens[i + 1],\n        rhs: tokens[i + 2],\n        pos\n      };\n      asc.push(x);\n      i += 4;\n    } else if (gettok(i, 0) == \"expr\") {\n      asc.push({ op: \"temp\", iden: tokens[i + 1], pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"ctnr\" && gettok(i, 1) == \"cat\") {\n      var x: ASCNode = { op: \"cat\", containers: [tokens[i + 1]], pos };\n      i += 2;\n      while (gettok(i, 0) == \"opord\" && gettok(i, 1) == \"l\") {\n        x.containers.push(tokens[i + 1]);\n        i += 2;\n      }\n      asc.push(x);\n    } else if (\n      gettok(i, 0) == \"ctrl\" &&\n      gettok(i, 1) == \"for\" &&\n      gettok(i + 2, 0) == \"ctrl\" &&\n      gettok(i + 2, 1) == \"forin\"\n    ) {\n      var x: ASCNode = {\n        op: \"for\",\n        container: tokens[i + 1],\n        iterator: gettok(i + 3, 1),\n        pos\n      };\n      i += 4;\n      asc.push(x);\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"whiletrue\") {\n      asc.push({ op: \"whiletrue\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"ctrl\" && gettok(i, 1) == \"whilen0\") {\n      assert(\n        `<${cmd}> Incorrect loop start`,\n        pos,\n        gettok(i + 2, 1) == \"whilen1\"\n      );\n      asc.push({ op: \"whilen\", value: tokens[i + 1], pos });\n      i += 3;\n    } else if (gettok(i, 0) == \"rassgn\" && gettok(i, 1) == \"a\") {\n      var x: ASCNode = { op: \"reassign\", lhs: tokens[i + 1], pos };\n      if (gettok(i + 2, 0) == \"ctnr\" && gettok(i + 2, 1) == \"subs\") {\n        x.lhssubs = tokens[i + 3];\n        if (gettok(i + 6, 0) == \"rassgn\" && gettok(i + 6, 1) == \"delete\") {\n          x.rhs = undefined;\n          x.del = true;\n          i += 7;\n        } else {\n          x.rhs = tokens[i + 6];\n          if (\n            tokens[i + 7] &&\n            gettok(i + 7, 0) == \"ctnr\" &&\n            gettok(i + 7, 1) == \"subs\"\n          ) {\n            x.rhssubs = tokens[i + 8];\n            i += 10;\n          } else {\n            i += 8;\n          }\n        }\n      } else {\n        assert(\n          `<${cmd}> Missing conj`,\n          pos,\n          gettok(i + 2, 0) == \"ctrl\" && gettok(i + 2, 1) == \"conj\"\n        );\n        x.rhs = tokens[i + 4];\n        if (\n          tokens[i + 5] &&\n          gettok(i + 5, 0) == \"ctnr\" &&\n          gettok(i + 5, 1) == \"subs\"\n        ) {\n          x.rhssubs = tokens[i + 6];\n          i += 8;\n        } else {\n          i += 6;\n        }\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"discard\") {\n      asc.push({ op: \"discard\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"take\") {\n      typeassert(i + 1, [\"num\"], \"argument count\");\n      const cnt = Number(gettok(i + 1, 1));\n      assert(\n        `Invalid argument count ${cnt}`,\n        pos,\n        Number.isSafeInteger(cnt) && cnt > 0\n      );\n      asc.push({ op: \"take\", count: cnt, pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"import\" && gettok(i, 1) == \"file\") {\n      var x: ASCNode = { op: \"import\", file: gettok(i + 1, 1), iden: [], pos };\n      i += 2;\n      while (gettok(i, 0) == \"import\" && gettok(i, 1) == \"in\") {\n        x.file += \"/\" + gettok(i + 1, 1);\n        i += 2;\n      }\n      i += 1;\n      if (tokens[i] && gettok(i, 0) == \"import\" && gettok(i, 1) == \"iden\") {\n        i++;\n        while (!(gettok(i, 0) == \"import\" && gettok(i, 1) == \"idenend\")) {\n          typeassert(i, [\"iden\"]);\n          x.iden.push(gettok(i, 1));\n          i++;\n        }\n        i++;\n      }\n      asc.push(x);\n    } else if (gettok(i, 0) == \"try\" && gettok(i, 1) == \"try\") {\n      asc.push({ op: \"try\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"try\" && gettok(i, 1) == \"catch\") {\n      asc.push({ op: \"catch\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"try\" && gettok(i, 1) == \"catcherr0\") {\n      typeassert(i + 2, [\"try\"]);\n      if (tokens[i + 3] && gettok(i + 3, 0) == \"name\") {\n        asc.push({\n          op: \"catcherr\",\n          error: tokens[i + 1],\n          name: gettok(i + 4, 1),\n          pos\n        });\n        i += 5;\n      } else {\n        asc.push({\n          op: \"catcherr\",\n          error: tokens[i + 1],\n          name: undefined,\n          pos\n        });\n        i += 3;\n      }\n    } else if (gettok(i, 0) == \"try\" && gettok(i, 1) == \"catchall\") {\n      if (tokens[i + 1] && gettok(i + 1, 0) == \"name\") {\n        asc.push({\n          op: \"catcherr\",\n          error: undefined,\n          name: gettok(i + 2, 1),\n          pos\n        });\n        i += 3;\n      } else {\n        asc.push({ op: \"catcherr\", error: undefined, name: undefined, pos });\n        i++;\n      }\n    } else if (gettok(i, 0) == \"try\" && gettok(i, 1) == \"end\") {\n      asc.push({ op: \"tryend\", pos });\n      i++;\n    } else if (gettok(i, 0) == \"throw\" && gettok(i, 1) == \"a\") {\n      typeassert(i + 2, [\"throw\"]);\n      if (tokens[i + 3] && gettok(i + 3, 0) == \"assgn\") {\n        asc.push({\n          op: \"throw\",\n          error: tokens[i + 1],\n          message: tokens[i + 4],\n          pos\n        });\n        i += 5;\n      } else {\n        asc.push({ op: \"throw\", error: tokens[i + 1], pos });\n        i += 3;\n      }\n    } else if (gettok(i, 0) == \"comment\") {\n      asc.push({ op: \"comment\", value: tokens[i + 1], pos });\n      i += 2;\n    } else if (gettok(i, 0) == \"macro\") {\n      i += 2;\n    } else {\n      //console.log(\"Unrecognized\",tokens[i])\n      i++;\n    }\n  }\n\n  return asc;\n}\n\nfunction compile(txt: string, options: Partial<CompileOptions> = {}): string {\n  const {\n    lang = \"js\",\n    romanizeIdentifiers = \"none\",\n    resetVarCnt = true,\n    logCallback = defaultLogCallback,\n    errorCallback = defaultErrorCallback,\n    lib = STDLIB,\n    strict = false,\n\n    // import options\n    entryFilepath = undefined,\n    importPaths = [],\n    importCache = {},\n    importContext = {},\n    allowHttp = false,\n    trustedHosts = [],\n    requestTimeout = 2000\n  } = options;\n\n  trustedHosts.push(...defaultTrustedHosts);\n\n  const importOptions = {\n    entryFilepath,\n    importPaths,\n    importCache,\n    importContext,\n    allowHttp,\n    trustedHosts,\n    requestTimeout\n  };\n\n  if (resetVarCnt) idenMap = {};\n  txt = (txt || \"\").replace(/\\r\\n/g, \"\\n\");\n\n  var txtlines = txt.split(\"\\n\");\n\n  function assert(msg: string, pos: number, b: any) {\n    var errmsg = \"\";\n    if (!b) {\n      errmsg += `[Syntax Error] ${msg}\\n`;\n      var l = 0;\n      for (var i = 0; i < txtlines.length; i++) {\n        l += txtlines[i].length + 1;\n        if (l > pos) {\n          errmsg += `Line ${1 + i}, Character ${1 +\n            pos -\n            (l - txtlines[i].length)}:${txtlines[i]}`;\n          break;\n        }\n      }\n      logCallback(errmsg);\n    }\n    if (errmsg.length) {\n      if (errorCallback) {\n        errorCallback(errmsg);\n      }\n      return errmsg;\n    }\n    return 0;\n  }\n\n  var macros = extractMacros(txt, {\n    lib,\n    lang,\n    importOptions\n  });\n  txt = expandMacros(txt, macros);\n\n  logCallback(\"\\n\\n=== [PASS 0] EXPAND-MACROS ===\");\n  logCallback(macros);\n  // logCallback(txt);\n\n  var tokens = wy2tokens(txt, assert);\n\n  logCallback(\"\\n\\n=== [PASS 1] TOKENIZER ===\");\n  logCallback(tokens);\n\n  if (romanizeIdentifiers != \"none\") {\n    tokenRomanize(tokens, romanizeIdentifiers);\n  }\n\n  var asc = tokens2asc(tokens, assert);\n\n  logCallback(\"\\n\\n=== [PASS 2] ABSTRACT SYNTAX CHAIN ===\");\n  logCallback(asc);\n\n  if (strict) {\n    logCallback(\"\\n\\n=== [PASS 2.5] TYPECHECK ===\");\n    logCallback(printSignature(typecheck(asc, assert)));\n  }\n\n  logCallback(\"\\n\\n=== [PASS 3] COMPILER ===\");\n  if (!transpilers[lang]) {\n    new Error(\"Target language not supported.\");\n  }\n  var transpiler = new transpilers[lang](asc);\n  var { imports, result } = transpiler.transpile({ imports });\n  var targ = result;\n  logCallback(targ);\n  imports = imports || [];\n  imports = Array.from(new Set(imports));\n  logCallback(\"Loading imports \" + imports.join(\", \"));\n\n  bundleImports(imports, { lib, lang }, importOptions).forEach(\n    ({ src, moduleName, entry }) => {\n      const compiledModule = compile(src, {\n        ...options,\n        entryFilepath: entry,\n        resetVarCnt: false,\n        strict: false\n      });\n\n      targ = transpiler.wrapModule(moduleName, compiledModule) + targ;\n    }\n  );\n\n  return targ;\n}\n\nfunction execute(\n  source: string,\n  options: Partial<ExecuteOptions & CompileOptions> = {}\n) {\n  const { lang = \"js\" } = options;\n  isLangSupportedForEval(lang);\n  const compiled = compile(source, options);\n  evalCompiled(compiled, options);\n}\n\nexport {\n  compile,\n  evalCompiled,\n  execute,\n  version,\n  wy2tokens,\n  tokens2asc,\n  hanzi2num,\n  hanzi2numstr,\n  num2hanzi,\n  bool2hanzi,\n  hanzi2pinyin,\n  KEYWORDS,\n  NUMBER_KEYWORDS,\n  STDLIB\n};\n","import {\n  ImportOptions,\n  CacheObject,\n  CompileOptions,\n  ImportedModule\n} from \"./types\";\n\nconst INDEX_FILENAME = \"序\";\n\nfunction isHostTrusted(url: string, trustedHosts: string[]) {\n  for (const host of trustedHosts) {\n    // FIXME: it can be bypassed by relative path resolving,\n    // for examples: https://trusted.com/a/../../hijack.com/a/\n    if (url.startsWith(host)) return true;\n  }\n  return false;\n}\n\nfunction isHttpURL(uri: string) {\n  return !!uri.match(/^https?\\:\\/\\//);\n}\n\nfunction fetchTextSync(url: string, timeout: number) {\n  const request = require(\"sync-request\");\n\n  let res = request(\"GET\", url, { timeout: timeout });\n\n  if (res.statusCode >= 200 && res.statusCode < 300)\n    return res.getBody().toString(\"utf8\");\n\n  throw new URIError(res.statusCode);\n}\n\nfunction fetchSync(uri: string, cache: CacheObject, requestTimeout: number) {\n  if (cache[uri]) return cache[uri];\n\n  const data = isHttpURL(uri)\n    ? fetchTextSync(uri, requestTimeout)\n    : eval(\"require\")(\"fs\").readFileSync(uri, \"utf-8\");\n\n  cache[uri] = data;\n\n  return data;\n}\n\nexport function importReader(\n  moduleName: string,\n  importOptions: Partial<ImportOptions> = {}\n): ImportedModule {\n  const {\n    allowHttp = false,\n    entryFilepath,\n    importPaths = [],\n    importCache = {},\n    importContext = {},\n    trustedHosts = [],\n    requestTimeout = 2000\n  } = importOptions;\n\n  const context = importContext[moduleName];\n  if (context) {\n    if (typeof context === \"string\") {\n      return {\n        src: context,\n        moduleName\n      };\n    }\n\n    if (context.entry) {\n      return {\n        moduleName,\n        entry: context.entry,\n        src: context.src\n          ? context.src\n          : fetchSync(context.entry, importCache, requestTimeout)\n      };\n    }\n\n    throw new SyntaxError(\"Failed to parse context: \" + context);\n  }\n\n  const pathes: string[] = [];\n\n  if (typeof importPaths === \"string\") {\n    pathes.push(importPaths);\n  } else {\n    pathes.push(...importPaths);\n  }\n\n  if (entryFilepath)\n    pathes.push(\n      entryFilepath\n        .replace(/\\\\/g, \"/\")\n        .split(\"/\")\n        .slice(0, -1)\n        .join(\"/\")\n    );\n\n  for (const dir of pathes) {\n    let uri = dir;\n    let entries = [];\n    let src;\n\n    if (uri.endsWith(\"/\")) uri = uri.slice(0, -1);\n\n    if (isHttpURL(uri)) {\n      if (!allowHttp && !isHostTrusted(uri, trustedHosts)) {\n        throw new URIError(\n          `URL request \"${uri}\" is blocked by default for security purpose. ` +\n            `You can turn it on by specify the \"allowHttp\" option.`\n        );\n      }\n      entries = [\n        `${uri}/${encodeURIComponent(moduleName)}.wy`,\n        `${uri}/${encodeURIComponent(moduleName)}/${encodeURIComponent(\n          INDEX_FILENAME\n        )}.wy`\n      ];\n    } else {\n      entries = [\n        `${uri}/${moduleName}.wy`,\n        `${uri}/${moduleName}/${INDEX_FILENAME}.wy`\n      ];\n    }\n\n    for (const entry of entries) {\n      try {\n        src = fetchSync(entry, importCache, requestTimeout);\n        return { src, entry, moduleName };\n      } catch (e) {}\n    }\n  }\n\n  throw new ReferenceError(\n    `Module \"${moduleName}\" is not found. Searched in ${importPaths}`\n  );\n}\n\nexport function bundleImports(\n  imports: string[],\n  options: { lib: CompileOptions[\"lib\"]; lang: CompileOptions[\"lang\"] },\n  importOptions: ImportOptions\n): ImportedModule[] {\n  const { lib, lang } = options;\n\n  return imports.map(moduleName => {\n    if (lib[lang][moduleName]) {\n      return {\n        moduleName,\n        src: lib[lang][moduleName]\n      };\n    }\n\n    if (lib[moduleName]) {\n      return {\n        moduleName,\n        src: lib[moduleName]\n      };\n    }\n\n    return importReader(moduleName, importOptions);\n  });\n}\n","module.exports = require(\"child_process\");","'use strict';\n\n//TODO: handle reviver/dehydrate function like normal\n//and handle indentation, like normal.\n//if anyone needs this... please send pull request.\n\nexports.stringify = function stringify(o) {\n  if (o && Buffer.isBuffer(o))\n    return JSON.stringify(':base64:' + o.toString('base64'));\n\n  if (o && o.toJSON) o = o.toJSON();\n\n  if (o && 'object' === typeof o) {\n    var s = '';\n    var array = Array.isArray(o);\n    s = array ? '[' : '{';\n    var first = true;\n\n    for (var k in o) {\n      var ignore =\n        'function' == typeof o[k] || (!array && 'undefined' === typeof o[k]);\n      if (Object.hasOwnProperty.call(o, k) && !ignore) {\n        if (!first) s += ',';\n        first = false;\n        if (array) {\n          s += stringify(o[k]);\n        } else if (o[k] !== void 0) {\n          s += stringify(k) + ':' + stringify(o[k]);\n        }\n      }\n    }\n\n    s += array ? ']' : '}';\n\n    return s;\n  } else if ('string' === typeof o) {\n    return JSON.stringify(/^:/.test(o) ? ':' + o : o);\n  } else if ('undefined' === typeof o) {\n    return 'null';\n  } else return JSON.stringify(o);\n};\n\nexports.parse = function(s) {\n  return JSON.parse(s, function(key, value) {\n    if ('string' === typeof value) {\n      if (/^:base64:/.test(value))\n        return new Buffer(value.substring(8), 'base64');\n      else return /^:/.test(value) ? value.substring(1) : value;\n    }\n    return value;\n  });\n};\n","module.exports = require(\"net\");","'use strict';\n\nmodule.exports = require('./lib')\n","\"use strict\";\n\nvar domain; // The domain module is executed on demand\nvar hasSetImmediate = typeof setImmediate === \"function\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including network IO events in Node.js.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n    if (!queue.length) {\n        requestFlush();\n        flushing = true;\n    }\n    // Avoids a function call\n    queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory excaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n    while (index < queue.length) {\n        var currentIndex = index;\n        // Advance the index before calling the task. This ensures that we will\n        // begin flushing on the next task the task throws an error.\n        index = index + 1;\n        queue[currentIndex].call();\n        // Prevent leaking memory for long chains of recursive calls to `asap`.\n        // If we call `asap` within tasks scheduled by `asap`, the queue will\n        // grow, but to avoid an O(n) walk for every task we execute, we don't\n        // shift tasks off the queue after they have been executed.\n        // Instead, we periodically shift 1024 tasks off the queue.\n        if (index > capacity) {\n            // Manually shift all values starting at the index back to the\n            // beginning of the queue.\n            for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n                queue[scan] = queue[scan + index];\n            }\n            queue.length -= index;\n            index = 0;\n        }\n    }\n    queue.length = 0;\n    index = 0;\n    flushing = false;\n}\n\nrawAsap.requestFlush = requestFlush;\nfunction requestFlush() {\n    // Ensure flushing is not bound to any domain.\n    // It is not sufficient to exit the domain, because domains exist on a stack.\n    // To execute code outside of any domain, the following dance is necessary.\n    var parentDomain = process.domain;\n    if (parentDomain) {\n        if (!domain) {\n            // Lazy execute the domain module.\n            // Only employed if the user elects to use domains.\n            domain = require(\"domain\");\n        }\n        domain.active = process.domain = null;\n    }\n\n    // `setImmediate` is slower that `process.nextTick`, but `process.nextTick`\n    // cannot handle recursion.\n    // `requestFlush` will only be called recursively from `asap.js`, to resume\n    // flushing after an error is thrown into a domain.\n    // Conveniently, `setImmediate` was introduced in the same version\n    // `process.nextTick` started throwing recursion errors.\n    if (flushing && hasSetImmediate) {\n        setImmediate(flush);\n    } else {\n        process.nextTick(flush);\n    }\n\n    if (parentDomain) {\n        domain.active = process.domain = parentDomain;\n    }\n}\n","var Writable = require('readable-stream').Writable\nvar inherits = require('inherits')\nvar bufferFrom = require('buffer-from')\n\nif (typeof Uint8Array === 'undefined') {\n  var U8 = require('typedarray').Uint8Array\n} else {\n  var U8 = Uint8Array\n}\n\nfunction ConcatStream(opts, cb) {\n  if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n  if (!opts) opts = {}\n\n  var encoding = opts.encoding\n  var shouldInferEncoding = false\n\n  if (!encoding) {\n    shouldInferEncoding = true\n  } else {\n    encoding =  String(encoding).toLowerCase()\n    if (encoding === 'u8' || encoding === 'uint8') {\n      encoding = 'uint8array'\n    }\n  }\n\n  Writable.call(this, { objectMode: true })\n\n  this.encoding = encoding\n  this.shouldInferEncoding = shouldInferEncoding\n\n  if (cb) this.on('finish', function () { cb(this.getBody()) })\n  this.body = []\n}\n\nmodule.exports = ConcatStream\ninherits(ConcatStream, Writable)\n\nConcatStream.prototype._write = function(chunk, enc, next) {\n  this.body.push(chunk)\n  next()\n}\n\nConcatStream.prototype.inferEncoding = function (buff) {\n  var firstBuffer = buff === undefined ? this.body[0] : buff;\n  if (Buffer.isBuffer(firstBuffer)) return 'buffer'\n  if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'\n  if (Array.isArray(firstBuffer)) return 'array'\n  if (typeof firstBuffer === 'string') return 'string'\n  if (Object.prototype.toString.call(firstBuffer) === \"[object Object]\") return 'object'\n  return 'buffer'\n}\n\nConcatStream.prototype.getBody = function () {\n  if (!this.encoding && this.body.length === 0) return []\n  if (this.shouldInferEncoding) this.encoding = this.inferEncoding()\n  if (this.encoding === 'array') return arrayConcat(this.body)\n  if (this.encoding === 'string') return stringConcat(this.body)\n  if (this.encoding === 'buffer') return bufferConcat(this.body)\n  if (this.encoding === 'uint8array') return u8Concat(this.body)\n  return this.body\n}\n\nvar isArray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]'\n}\n\nfunction isArrayish (arr) {\n  return /Array\\]$/.test(Object.prototype.toString.call(arr))\n}\n\nfunction isBufferish (p) {\n  return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')\n}\n\nfunction stringConcat (parts) {\n  var strings = []\n  var needsToString = false\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (typeof p === 'string') {\n      strings.push(p)\n    } else if (Buffer.isBuffer(p)) {\n      strings.push(p)\n    } else if (isBufferish(p)) {\n      strings.push(bufferFrom(p))\n    } else {\n      strings.push(bufferFrom(String(p)))\n    }\n  }\n  if (Buffer.isBuffer(parts[0])) {\n    strings = Buffer.concat(strings)\n    strings = strings.toString('utf8')\n  } else {\n    strings = strings.join('')\n  }\n  return strings\n}\n\nfunction bufferConcat (parts) {\n  var bufs = []\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (Buffer.isBuffer(p)) {\n      bufs.push(p)\n    } else if (isBufferish(p)) {\n      bufs.push(bufferFrom(p))\n    } else {\n      bufs.push(bufferFrom(String(p)))\n    }\n  }\n  return Buffer.concat(bufs)\n}\n\nfunction arrayConcat (parts) {\n  var res = []\n  for (var i = 0; i < parts.length; i++) {\n    res.push.apply(res, parts[i])\n  }\n  return res\n}\n\nfunction u8Concat (parts) {\n  var len = 0\n  for (var i = 0; i < parts.length; i++) {\n    if (typeof parts[i] === 'string') {\n      parts[i] = bufferFrom(parts[i])\n    }\n    len += parts[i].length\n  }\n  var u8 = new U8(len)\n  for (var i = 0, offset = 0; i < parts.length; i++) {\n    var part = parts[i]\n    for (var j = 0; j < part.length; j++) {\n      u8[offset++] = part[j]\n    }\n  }\n  return u8\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","module.exports = require('stream');\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    var obj;\n\n    while (queue.length) {\n        var item = queue.pop();\n        obj = item.obj[item.prop];\n\n        if (Array.isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n\n    return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (Array.isArray(target)) {\n            target.push(source);\n        } else if (typeof target === 'object') {\n            if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (Array.isArray(target) && !Array.isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (Array.isArray(target) && Array.isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                if (target[i] && typeof target[i] === 'object') {\n                    target[i] = merge(target[i], item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str) {\n    try {\n        return decodeURIComponent(str.replace(/\\+/g, ' '));\n    } catch (e) {\n        return str;\n    }\n};\n\nvar encode = function encode(str) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = typeof str === 'string' ? str : String(str);\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    merge: merge\n};\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n    'default': 'RFC3986',\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return value;\n        }\n    },\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"url\");","module.exports = require(\"https\");","function Caseless (dict) {\n  this.dict = dict || {}\n}\nCaseless.prototype.set = function (name, value, clobber) {\n  if (typeof name === 'object') {\n    for (var i in name) {\n      this.set(i, name[i], value)\n    }\n  } else {\n    if (typeof clobber === 'undefined') clobber = true\n    var has = this.has(name)\n\n    if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value\n    else this.dict[has || name] = value\n    return has\n  }\n}\nCaseless.prototype.has = function (name) {\n  var keys = Object.keys(this.dict)\n    , name = name.toLowerCase()\n    ;\n  for (var i=0;i<keys.length;i++) {\n    if (keys[i].toLowerCase() === name) return keys[i]\n  }\n  return false\n}\nCaseless.prototype.get = function (name) {\n  name = name.toLowerCase()\n  var result, _key\n  var headers = this.dict\n  Object.keys(headers).forEach(function (key) {\n    _key = key.toLowerCase()\n    if (name === _key) result = headers[key]\n  })\n  return result\n}\nCaseless.prototype.swap = function (name) {\n  var has = this.has(name)\n  if (has === name) return\n  if (!has) throw new Error('There is no header than matches \"'+name+'\"')\n  this.dict[name] = this.dict[has]\n  delete this.dict[has]\n}\nCaseless.prototype.del = function (name) {\n  var has = this.has(name)\n  return delete this.dict[has || name]\n}\n\nmodule.exports = function (dict) {return new Caseless(dict)}\nmodule.exports.httpify = function (resp, headers) {\n  var c = new Caseless(headers)\n  resp.setHeader = function (key, value, clobber) {\n    if (typeof value === 'undefined') return\n    return c.set(key, value, clobber)\n  }\n  resp.hasHeader = function (key) {\n    return c.has(key)\n  }\n  resp.getHeader = function (key) {\n    return c.get(key)\n  }\n  resp.removeHeader = function (key) {\n    return c.del(key)\n  }\n  resp.headers = c.dict\n  return c\n}\n","var async = require('./async.js')\n  , abort = require('./abort.js')\n  ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n  // store current index\n  var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n  state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n  {\n    // don't repeat yourself\n    // skip secondary callbacks\n    if (!(key in state.jobs))\n    {\n      return;\n    }\n\n    // clean up jobs\n    delete state.jobs[key];\n\n    if (error)\n    {\n      // don't process rest of the results\n      // stop still active jobs\n      // and reset the list\n      abort(state);\n    }\n    else\n    {\n      state.results[key] = output;\n    }\n\n    // return salvaged results\n    callback(error, state.results);\n  });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param   {function} iterator - iterator to invoke\n * @param   {string|number} key - key/index of the element in the list of jobs\n * @param   {mixed} item - job description\n * @param   {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n  var aborter;\n\n  // allow shortcut if iterator expects only two arguments\n  if (iterator.length == 2)\n  {\n    aborter = iterator(item, async(callback));\n  }\n  // otherwise go with full three arguments\n  else\n  {\n    aborter = iterator(item, key, async(callback));\n  }\n\n  return aborter;\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param   {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n  var isAsync = false;\n\n  // check if async happened\n  defer(function() { isAsync = true; });\n\n  return function async_callback(err, result)\n  {\n    if (isAsync)\n    {\n      callback(err, result);\n    }\n    else\n    {\n      defer(function nextTick_callback()\n      {\n        callback(err, result);\n      });\n    }\n  };\n}\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n  Object.keys(state.jobs).forEach(clean.bind(state));\n\n  // reset leftover jobs\n  state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this  state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n  if (typeof this.jobs[key] == 'function')\n  {\n    this.jobs[key]();\n  }\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param   {array|object} list - list to iterate over\n * @param   {function|null} sortMethod - function to use for keys sort,\n *                                     or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n  var isNamedList = !Array.isArray(list)\n    , initState =\n    {\n      index    : 0,\n      keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n      jobs     : {},\n      results  : isNamedList ? {} : [],\n      size     : isNamedList ? Object.keys(list).length : list.length\n    }\n    ;\n\n  if (sortMethod)\n  {\n    // sort array keys based on it's values\n    // sort object's keys just on own merit\n    initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n    {\n      return sortMethod(list[a], list[b]);\n    });\n  }\n\n  return initState;\n}\n","var abort = require('./abort.js')\n  , async = require('./async.js')\n  ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this  AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n  if (!Object.keys(this.jobs).length)\n  {\n    return;\n  }\n\n  // fast forward iteration index\n  this.index = this.size;\n\n  // abort jobs\n  abort(this);\n\n  // send back results we have so far\n  async(callback)(null, this.results);\n}\n","var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending  = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} sortMethod - custom sort function\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n  var state = initState(list, sortMethod);\n\n  iterate(list, iterator, state, function iteratorHandler(error, result)\n  {\n    if (error)\n    {\n      callback(error, result);\n      return;\n    }\n\n    state.index++;\n\n    // are we there yet?\n    if (state.index < (state['keyedList'] || list).length)\n    {\n      iterate(list, iterator, state, iteratorHandler);\n      return;\n    }\n\n    // done here\n    callback(null, state.results);\n  });\n\n  return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param   {mixed} a - an item to compare\n * @param   {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n  return -1 * ascending(a, b);\n}\n","export enum NumberTokenType {\n  SIGN, // 負\n  DIGIT, // 一二三...\n  DECIMAL, // ·\n  INT_MULT, // 十百千萬億...\n  FRAC_MULT, // 分釐毫...\n  DELIM, // 又\n  ZERO, // 零\n\n  // pseudo tokens\n  BEGIN, // <BEGIN>\n  END // <END>\n}\nexport type Digit = \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\";\n\nexport type NumberToken =\n  | {\n      type: NumberTokenType.ZERO | NumberTokenType.DIGIT;\n      digit: Digit;\n    }\n  | {\n      type: NumberTokenType.SIGN;\n      sign: number;\n    }\n  | {\n      type:\n        | NumberTokenType.DECIMAL\n        | NumberTokenType.INT_MULT\n        | NumberTokenType.FRAC_MULT;\n      exp: number;\n    }\n  | {\n      type: NumberTokenType.DELIM | NumberTokenType.BEGIN | NumberTokenType.END;\n    };\n\nexport interface ParseResult {\n  sign: number;\n  exp: number;\n  digits: Digit[];\n}\n\nconst NUM_TOKENS = {\n  負: { type: NumberTokenType.SIGN, sign: -1 },\n  \"·\": { type: NumberTokenType.DECIMAL, exp: 0 }, // U+00B7 Middle Dot\n  又: { type: NumberTokenType.DELIM },\n  有: { type: NumberTokenType.DELIM },\n  零: { type: NumberTokenType.ZERO, digit: \"0\" },\n  一: { type: NumberTokenType.DIGIT, digit: \"1\" },\n  二: { type: NumberTokenType.DIGIT, digit: \"2\" },\n  三: { type: NumberTokenType.DIGIT, digit: \"3\" },\n  四: { type: NumberTokenType.DIGIT, digit: \"4\" },\n  五: { type: NumberTokenType.DIGIT, digit: \"5\" },\n  六: { type: NumberTokenType.DIGIT, digit: \"6\" },\n  七: { type: NumberTokenType.DIGIT, digit: \"7\" },\n  八: { type: NumberTokenType.DIGIT, digit: \"8\" },\n  九: { type: NumberTokenType.DIGIT, digit: \"9\" },\n  十: { type: NumberTokenType.INT_MULT, exp: 1 },\n  百: { type: NumberTokenType.INT_MULT, exp: 2 },\n  千: { type: NumberTokenType.INT_MULT, exp: 3 },\n  萬: { type: NumberTokenType.INT_MULT, exp: 4 },\n  億: { type: NumberTokenType.INT_MULT, exp: 8 },\n  兆: { type: NumberTokenType.INT_MULT, exp: 12 },\n  京: { type: NumberTokenType.INT_MULT, exp: 16 },\n  垓: { type: NumberTokenType.INT_MULT, exp: 20 },\n  秭: { type: NumberTokenType.INT_MULT, exp: 24 },\n  穰: { type: NumberTokenType.INT_MULT, exp: 28 },\n  溝: { type: NumberTokenType.INT_MULT, exp: 32 },\n  澗: { type: NumberTokenType.INT_MULT, exp: 36 },\n  正: { type: NumberTokenType.INT_MULT, exp: 40 },\n  載: { type: NumberTokenType.INT_MULT, exp: 44 },\n  極: { type: NumberTokenType.INT_MULT, exp: 48 },\n  分: { type: NumberTokenType.FRAC_MULT, exp: -1 },\n  釐: { type: NumberTokenType.FRAC_MULT, exp: -2 },\n  毫: { type: NumberTokenType.FRAC_MULT, exp: -3 },\n  絲: { type: NumberTokenType.FRAC_MULT, exp: -4 },\n  忽: { type: NumberTokenType.FRAC_MULT, exp: -5 },\n  微: { type: NumberTokenType.FRAC_MULT, exp: -6 },\n  纖: { type: NumberTokenType.FRAC_MULT, exp: -7 },\n  沙: { type: NumberTokenType.FRAC_MULT, exp: -8 },\n  塵: { type: NumberTokenType.FRAC_MULT, exp: -9 },\n  埃: { type: NumberTokenType.FRAC_MULT, exp: -10 },\n  渺: { type: NumberTokenType.FRAC_MULT, exp: -11 },\n  漠: { type: NumberTokenType.FRAC_MULT, exp: -12 },\n  // eslint-disable-next-line no-useless-computed-key\n  [\"〇\"]: { type: NumberTokenType.DIGIT, digit: \"0\" } // U+3007 Ideographic Number Zero\n} as Record<string, NumberToken>;\n\nconst NEG_WORD = \"負\";\nconst INF_WORD = \"無限大數\";\nconst NAN_WORD = \"不可算數\";\n\nconst DECIMAL_WORD = {\n  readout: \"又\"\n};\n\nconst DIGIT_WORDS = {\n  readout: {\n    0: \"零\",\n    1: \"一\",\n    2: \"二\",\n    3: \"三\",\n    4: \"四\",\n    5: \"五\",\n    6: \"六\",\n    7: \"七\",\n    8: \"八\",\n    9: \"九\"\n  }\n};\n\nconst MULT_WORDS = {\n  readout: [\n    { str: \"極\", exp: 48 },\n    { str: \"載\", exp: 44 },\n    { str: \"正\", exp: 40 },\n    { str: \"澗\", exp: 36 },\n    { str: \"溝\", exp: 32 },\n    { str: \"穰\", exp: 28 },\n    { str: \"秭\", exp: 24 },\n    { str: \"垓\", exp: 20 },\n    { str: \"京\", exp: 16 },\n    { str: \"兆\", exp: 12 },\n    { str: \"億\", exp: 8 },\n    { str: \"萬\", exp: 4 },\n    { str: \"千\", exp: 3 },\n    { str: \"百\", exp: 2 },\n    { str: \"十\", exp: 1 },\n    { str: \"\", exp: 0 },\n    { str: \"分\", exp: -1 },\n    { str: \"釐\", exp: -2 },\n    { str: \"毫\", exp: -3 },\n    { str: \"絲\", exp: -4 },\n    { str: \"忽\", exp: -5 },\n    { str: \"微\", exp: -6 },\n    { str: \"纖\", exp: -7 },\n    { str: \"沙\", exp: -8 },\n    { str: \"塵\", exp: -9 },\n    { str: \"埃\", exp: -10 },\n    { str: \"渺\", exp: -11 },\n    { str: \"漠\", exp: -12 }\n  ]\n};\n\nconst eMultState = {\n  NONE: \"NONE\", // <END>, 一 (ambiguous: 一萬一 or 一十一 or 一·一 or 一絲一)\n  FRAC: \"FRAC\", // ...微\n  INT: \"INT\", // ...萬, ...·,\n  DONE: \"DONE\", // 負一,\n  SIGN: \"SIGN\"\n};\n\nconst eDigitState = {\n  NONE: \"NONE\", // <END>, ·\n  MULT: \"MULT\", // 微\n  MULT_AMBIG: \"MULT_AMBIG\", // 十 (ambiguous: ...十 or 一十)\n  DIGIT: \"DIGIT\", // 一\n  DIGIT_WITH_ZERO: \"DIGIT_WITH_ZERO\", // 一...零, 零零, 零一...零,\n  DELIM: \"DELIM\", // 又\n  ZERO: \"ZERO\", // 零<END>, 零·, 零又, 零微, 零一\n  SIGN: \"SIGN\", // 負\n  ZERO_MULT_AMBIG: \"ZERO_MULT_AMBIG\" // 零十 (ambiguous: 零一十 or 零十 or 〇十)\n};\n\nconst RESULT_2_TO_63 = {\n  sign: 1,\n  exp: 0,\n  digits: \"9223372036854775808\".split(\"\").reverse() as Digit[]\n};\n\nexport function hanzi2numstr(s: string): string | null {\n  // returns array of tokens on success, null on invalid string\n  function tokenize(s: string) {\n    const result: NumberToken[] = [{ type: NumberTokenType.BEGIN }];\n    for (let i = 0; i < s.length; ++i) {\n      const tokenStr = s.charAt(i);\n      if (!NUM_TOKENS[tokenStr]) {\n        return null;\n      }\n\n      result.push(NUM_TOKENS[tokenStr]);\n    }\n    result.push({ type: NumberTokenType.END });\n    return result;\n  }\n\n  // returns:\n  //   on success: {\n  //     sign:   +1/-1/+Infinity/-Infinity/NaN,\n  //     exp:    power of 10,\n  //     digits: array of digit chars from lowest to highest, with leading and trailing zeros\n  //   }\n  //   on invalid string: null\n  // result = sign * {digits[length-1..0]} * 10^exp\n  // e.g. 負零又五毫零絲 = { sign: -1, exp: -4, digits: [\"0\", \"5\", \"0\", \"0, \"0\"] } = -00050e-4 = -0.005\n  function parse(tokens: NumberToken[]): ParseResult | null {\n    // parses the number string backwards, from lowest to highest digit\n    // parser state\n    let digitState = eDigitState.NONE;\n\n    // multiplier stack, keep track of all active multiplier exponents\n    const multStack = {\n      isEmpty() {\n        return this._exps.length === 0;\n      },\n      total() {\n        return this._expAdd;\n      },\n      top() {\n        return this._exps[this._exps.length - 1];\n      },\n      state() {\n        if (this.isEmpty()) {\n          return eMultState.NONE;\n        } else if (this._exps[0] < 0) {\n          return eMultState.FRAC;\n        } else if (this._exps[0] < Infinity) {\n          return eMultState.INT;\n        } else {\n          return eMultState.DONE;\n        }\n      },\n\n      push(exp: number) {\n        this._expAdd += exp;\n        this._exps.push(exp);\n      },\n      pop() {\n        this._expAdd -= this.top();\n        this._exps.pop();\n      },\n      clear() {\n        this._expAdd = 0;\n        this._exps = [];\n      },\n      markDone() {\n        this.clear();\n        this.push(Infinity);\n      },\n\n      _exps: [] as number[],\n      _expAdd: 0\n    };\n\n    // result, with different convension of exp for internal use\n    const result = {\n      sign() {\n        return this._sign;\n      },\n      exp() {\n        return this._exp;\n      },\n      digits() {\n        return this._digits;\n      },\n\n      applySign(newSign: number) {\n        this._sign *= newSign;\n      },\n      // digit: number or array of numbers\n      push(digit: Digit[] | Digit) {\n        if (Array.isArray(digit)) {\n          this._digits = this._digits.concat(digit);\n          this._exp += digit.length;\n        } else {\n          this._digits.push(digit);\n          ++this._exp;\n        }\n      },\n      fillZeros(newExp: number) {\n        this.push(Array(newExp - this._exp).fill(\"0\"));\n      },\n      resetExp(newExp: number) {\n        this._exp = newExp;\n      },\n\n      // the result is sign * 0.{digits[length-1..0]} * 10^exp\n      _sign: 1, // +1/-1\n      _exp: 0, // one plus exponent of the highest digit\n      _digits: [] as Digit[] // lowest to highest\n    };\n\n    // parses the number string backwards, discarding <END>\n    for (let i = tokens.length - 1; i > 0; --i) {\n      const token = tokens[i - 1];\n\n      // sign should be the first char\n      if (\n        multStack.state() === eMultState.SIGN &&\n        token.type !== NumberTokenType.BEGIN\n      ) {\n        return null;\n      }\n\n      // disambiguate omitted 一\n      switch (digitState) {\n        case eDigitState.MULT_AMBIG:\n          switch (token.type) {\n            // <BEGIN>(一?)十 -> <BEGIN>一十\n            // 負(一?)十 -> 負一十\n            // 又(一?)十 -> 又一十\n            // ·(一?)十 -> ·一十\n            // 分(一?)十絲 -> 分一十絲\n            case NumberTokenType.BEGIN:\n            case NumberTokenType.SIGN:\n            case NumberTokenType.DELIM:\n            case NumberTokenType.DECIMAL:\n            case NumberTokenType.FRAC_MULT:\n              result.push(\"1\");\n              digitState = eDigitState.DIGIT;\n              break;\n\n            // 一(一?)十 -> 一十\n            case NumberTokenType.DIGIT:\n              digitState = eDigitState.MULT;\n              break;\n\n            // 百(一?)十 -> 百一十\n            // 千(一?)十 -> 千一十\n            // 百(一?)萬 -> 百萬\n            case NumberTokenType.INT_MULT:\n              if (multStack.top() < (token.exp || 1)) {\n                result.push(\"1\");\n                digitState = eDigitState.DIGIT;\n              } else {\n                digitState = eDigitState.MULT;\n              }\n              break;\n\n            // 零(一?)十 -> 零(一?)十\n            case NumberTokenType.ZERO:\n              digitState = eDigitState.MULT_AMBIG;\n              break;\n\n            default:\n              break;\n          }\n          break;\n\n        case eDigitState.ZERO_MULT_AMBIG:\n          switch (token.type) {\n            // <BEGIN>(零一|零|〇)十 -> <BEGIN>〇十\n            // 負(零一|零|〇)十 -> 負〇十\n            // 一(零一|零|〇)十 -> 一〇十\n            // 又(零一|零|〇)十 -> 又〇十\n            // 零(零一|零|〇)十 -> 〇〇十\n            case NumberTokenType.BEGIN:\n            case NumberTokenType.SIGN:\n            case NumberTokenType.DIGIT:\n            case NumberTokenType.DELIM:\n            case NumberTokenType.ZERO:\n              result.push(\"0\");\n              digitState = eDigitState.DIGIT_WITH_ZERO;\n              break;\n\n            // ·(零一|零|〇)十絲 -> ·零一十絲\n            // ·(零一|零|〇)十釐 -> ·〇十釐\n            // ·(零一|零|〇)十分 -> error\n            // ·(零一|零|〇)百分 -> error\n            // 分(零一|零|〇)十絲 -> 分零一十絲\n            // 分(零一|零|〇)十毫 -> 分〇十絲\n            // 分(零一|零|〇)十釐 -> error\n            // 分(零一|零|〇)十分 -> error\n            case NumberTokenType.DECIMAL:\n            case NumberTokenType.FRAC_MULT:\n              if (multStack.total() + 1 < token.exp) {\n                result.push(\"1\");\n                result.push(\"0\");\n                digitState = eDigitState.ZERO;\n              } else if (multStack.total() + 1 === token.exp) {\n                result.push(\"0\");\n                digitState = eDigitState.DIGIT_WITH_ZERO;\n              } else {\n                return null;\n              }\n              break;\n\n            // 千(零一|零|〇)十 -> 千零一十\n            // 百(零一|零|〇)十 -> 百〇十\n            // 萬(零一|零|〇)萬 -> 萬零萬\n            // 百(零一|零|〇)萬 -> 百零萬\n            case NumberTokenType.INT_MULT:\n              if (token.exp == null) {\n                return null;\n              }\n\n              if (multStack.top() + 1 < token.exp) {\n                result.push(\"1\");\n                result.push(\"0\");\n                digitState = eDigitState.ZERO;\n              } else if (multStack.top() + 1 === token.exp) {\n                result.push(\"0\");\n                digitState = eDigitState.DIGIT_WITH_ZERO;\n              } else {\n                result.push(\"0\");\n                digitState = eDigitState.ZERO;\n              }\n              break;\n\n            default:\n              break;\n          }\n          break;\n\n        default:\n          break;\n      }\n\n      // determine the exponent of tail digits\n      if (multStack.state() === eMultState.NONE) {\n        switch (token.type) {\n          case NumberTokenType.INT_MULT:\n            // exponent is correct\n            break;\n\n          case NumberTokenType.DECIMAL:\n          case NumberTokenType.FRAC_MULT:\n            if (token.exp != null) {\n              result.resetExp(token.exp);\n            }\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      // determine the current exponent and update exponent stack\n      const currExp = (function() {\n        switch (token.type) {\n          case NumberTokenType.BEGIN:\n          case NumberTokenType.SIGN:\n            switch (digitState) {\n              // <BEGIN>微 -> error\n              // 負微 -> error\n              case eDigitState.MULT:\n                return null;\n\n              default:\n                multStack.markDone();\n                return multStack.total();\n            }\n\n          case NumberTokenType.DIGIT:\n          case NumberTokenType.ZERO:\n            switch (digitState) {\n              // 一又 -> 一·\n              // 零又 -> 零·\n              case eDigitState.DELIM:\n                multStack.clear();\n                multStack.push(0);\n                return multStack.total();\n\n              default:\n                return result.exp();\n            }\n\n          case NumberTokenType.DELIM:\n            switch (digitState) {\n              // 又又 -> error\n              case eDigitState.DELIM:\n                return null;\n\n              default:\n                return result.exp();\n            }\n\n          // ·...絲 -> ·\n          // 釐...絲 -> 釐\n          // ·絲 -> error\n          // 釐絲 -> error\n          case NumberTokenType.DECIMAL:\n          case NumberTokenType.FRAC_MULT:\n            if (digitState === eDigitState.MULT) {\n              return null;\n            } else {\n              multStack.clear();\n              multStack.push(token.exp);\n              return multStack.total();\n            }\n\n          case NumberTokenType.INT_MULT:\n            switch (digitState) {\n              // 百又...絲 -> 百\n              // 萬又...百萬億 -> 萬萬億\n              case eDigitState.DELIM:\n                if (multStack.state() === eMultState.FRAC) {\n                  multStack.clear();\n                  multStack.push(token.exp);\n                } else {\n                  while (!multStack.isEmpty() && multStack.top() < token.exp) {\n                    multStack.pop();\n                  }\n\n                  multStack.push(token.exp);\n                }\n                break;\n\n              // 萬...百萬億 -> 萬萬億\n              // 萬零...百萬億 -> 萬萬億\n              // 百...十絲 -> 百絲\n              // 千零...十絲 -> 千絲\n              case eDigitState.NONE:\n              case eDigitState.MULT:\n              case eDigitState.MULT_AMBIG:\n              case eDigitState.DIGIT:\n              case eDigitState.DIGIT_WITH_ZERO:\n              case eDigitState.ZERO:\n              case eDigitState.ZERO_MULT_AMBIG:\n                while (\n                  !multStack.isEmpty() &&\n                  multStack.top() < token.exp &&\n                  multStack.top() >= 0\n                ) {\n                  multStack.pop();\n                }\n\n                multStack.push(token.exp);\n                break;\n            }\n            return multStack.total();\n        }\n      })();\n      if (currExp == null) {\n        return null;\n      }\n\n      // check for overlapping decimal places\n      if (currExp < result.exp()) {\n        return null;\n      }\n\n      // check for disallowed missing decimal places\n      if (currExp > result.exp()) {\n        const check = function() {\n          if (\n            token.type === NumberTokenType.BEGIN ||\n            token.type === NumberTokenType.SIGN\n          ) {\n            return true;\n          }\n\n          if (\n            digitState === eDigitState.DELIM ||\n            digitState === eDigitState.ZERO\n          ) {\n            return true;\n          }\n\n          if (token.type === NumberTokenType.INT_MULT) {\n            return true;\n          }\n\n          if (\n            token.type === NumberTokenType.FRAC_MULT ||\n            token.type === NumberTokenType.DECIMAL\n          ) {\n            return true;\n          }\n\n          return false;\n        };\n\n        if (!check()) {\n          return null;\n        }\n\n        if (multStack.state() !== eMultState.DONE) {\n          result.fillZeros(currExp);\n        }\n      }\n\n      // push the digit, update parser state\n      switch (token.type) {\n        case NumberTokenType.BEGIN:\n          break;\n\n        case NumberTokenType.SIGN:\n          result.applySign(token.sign);\n          digitState = eDigitState.SIGN;\n          break;\n\n        case NumberTokenType.DIGIT:\n          result.push(token.digit);\n          if (\n            digitState === eDigitState.ZERO ||\n            digitState === eDigitState.DIGIT_WITH_ZERO\n          ) {\n            digitState = eDigitState.DIGIT_WITH_ZERO;\n          } else {\n            digitState = eDigitState.DIGIT;\n          }\n\n          break;\n\n        case NumberTokenType.DECIMAL:\n          digitState = eDigitState.NONE;\n          break;\n\n        case NumberTokenType.INT_MULT:\n          digitState = eDigitState.MULT_AMBIG;\n          break;\n\n        case NumberTokenType.FRAC_MULT:\n          digitState = eDigitState.MULT;\n          break;\n\n        case NumberTokenType.DELIM:\n          digitState = eDigitState.DELIM;\n          break;\n\n        case NumberTokenType.ZERO:\n          switch (digitState) {\n            case eDigitState.NONE:\n            case eDigitState.MULT:\n            case eDigitState.DIGIT:\n            case eDigitState.DELIM:\n              result.push(token.digit);\n              digitState = eDigitState.ZERO;\n              break;\n\n            case eDigitState.DIGIT_WITH_ZERO:\n            case eDigitState.ZERO:\n              result.push(token.digit);\n              digitState = eDigitState.ZERO;\n              break;\n\n            case eDigitState.MULT_AMBIG:\n              digitState = eDigitState.ZERO_MULT_AMBIG;\n              break;\n          }\n          break;\n      }\n    }\n\n    if (result.digits().length === 0) {\n      return null;\n    }\n\n    return {\n      sign: result.sign(),\n      exp: result.exp() - result.digits().length,\n      digits: result.digits()\n    };\n  }\n\n  function getDigit(result: any, exp: number) {\n    const idx = exp - result.exp;\n    if (idx >= 0 && idx < result.digits.length) {\n      return result.digits[idx];\n    } else {\n      return \"0\";\n    }\n  }\n\n  function compareMagnitude(resultA: ParseResult, resultB: ParseResult) {\n    const getMaxExp = (result: ParseResult) =>\n      result.exp + (result.digits.length - 1);\n\n    const maxExp = Math.max(getMaxExp(resultA), getMaxExp(resultB));\n    for (let i = maxExp; i >= resultA.exp || i >= resultB.exp; --i) {\n      const digitA = Number(getDigit(resultA, i));\n      const digitB = Number(getDigit(resultB, i));\n      if (digitA > digitB) {\n        return 1;\n      } else if (digitA < digitB) {\n        return -1;\n      }\n    }\n    return 0;\n  }\n\n  // parse\n  const tokens = tokenize(s);\n  if (tokens == null) {\n    return null;\n  }\n\n  const result = parse(tokens);\n  if (result == null) {\n    return null;\n  }\n\n  // build decimal string\n  if (!Number.isFinite(result.sign)) {\n    // infinity/NaN\n    return result.sign.toString();\n  }\n  let str = result.sign < 0 ? \"-\" : \"\";\n\n  // no fractional digits (including zero) and fits in int64?\n  const printAsInt = (function() {\n    if (result.exp < 0) {\n      return false;\n    }\n\n    const c = compareMagnitude(result, RESULT_2_TO_63);\n    return result.sign < 0 ? c <= 0 : c < 0;\n  })();\n\n  // digit range, leading and trailing zeros trimmed\n  const rend = result.digits.findIndex(x => x !== \"0\");\n  if (rend < 0) {\n    str += \"0\";\n    return str;\n  }\n  const rendExp = result.exp + rend;\n\n  let rbegin = result.digits.length;\n  while (result.digits[rbegin - 1] === \"0\") {\n    --rbegin;\n  }\n\n  const rbeginExp = result.exp + rbegin;\n\n  // compute length of fixed and scientific format\n  let expStr = \"\";\n  let printAsScientific = false;\n  if (!printAsInt) {\n    const scientificExp = result.exp + (rbegin - 1);\n    expStr =\n      (scientificExp < 0 ? \"e-\" : \"e+\") + Math.abs(scientificExp).toString();\n    const fixedLen =\n      rendExp < 0 ? Math.max(rbeginExp, 1) - rendExp + 1 : rbeginExp;\n    const scientificMagLen = rbegin - rend > 1 ? rbegin - rend + 1 : 1;\n    if (scientificMagLen + expStr.length < fixedLen) {\n      printAsScientific = true;\n    }\n  }\n\n  if (printAsScientific) {\n    str += result.digits[rbegin - 1];\n    if (rbegin - 1 > rend) {\n      str += \".\";\n      for (let i = rbegin - 1; i > rend; --i) {\n        str += result.digits[i - 1];\n      }\n    }\n    str += expStr;\n    return str;\n  } else {\n    for (let i = Math.max(rbeginExp, 1); i > 0; --i) {\n      str += getDigit(result, i - 1);\n    }\n\n    if (rendExp < 0) {\n      str += \".\";\n      for (let i = 0; i > rendExp; --i) {\n        str += getDigit(result, i - 1);\n      }\n    }\n    return str;\n  }\n}\n\nexport function hanzi2num(s: string): number {\n  const str = hanzi2numstr(s);\n  if (str == null) {\n    return NaN;\n  } else {\n    return Number(str);\n  }\n}\n\nexport function num2hanzi(\n  n: number,\n  format = \"\",\n  precision = undefined\n): string {\n  if (!Number.isFinite(n)) {\n    if (n === Infinity) {\n      return INF_WORD;\n    } else if (n === -Infinity) {\n      return NEG_WORD + INF_WORD;\n    } else {\n      return NAN_WORD;\n    }\n  }\n\n  // the same format as hanzi2numstr.parse\n  function parseNumStr(str: string): ParseResult {\n    function myIndexOf(str: string, val: string) {\n      const idx = str.indexOf(val);\n      return idx < 0 ? str.length : idx;\n    }\n    const sign = str.charAt(0) === \"-\" ? -1 : 1;\n    const digitIndex = \"+-\".includes(str.charAt(0)) ? 1 : 0;\n    const expIndex = myIndexOf(str, \"e\");\n    const scientificExp =\n      expIndex === str.length ? 0 : Number(str.substring(expIndex + 1));\n    const decimalIndex = myIndexOf(str.substring(0, expIndex), \".\");\n    const intStr = str.substring(digitIndex, decimalIndex);\n    const intDigits = intStr.split(\"\").reverse() as Digit[];\n    const fracStr = str.substring(\n      Math.min(decimalIndex + 1, expIndex),\n      expIndex\n    );\n    const fracDigits = fracStr.split(\"\").reverse() as Digit[];\n    return {\n      sign,\n      exp: scientificExp - fracDigits.length,\n      digits: fracDigits.concat(intDigits)\n    };\n  }\n\n  // reserved for future extension\n  const chineseFormat = \"readout\";\n  const multWords = MULT_WORDS[chineseFormat];\n  const digitWords = DIGIT_WORDS[chineseFormat];\n  const decimalWord = DECIMAL_WORD[chineseFormat];\n\n  let numStr = precision === undefined ? n.toString() : n.toFixed(precision);\n  let result = parseNumStr(numStr);\n  let signStr = result.sign < 0 ? NEG_WORD : \"\";\n  let rend = result.digits.findIndex(x => x !== \"0\");\n  if (rend < 0) {\n    return signStr + digitWords[\"0\"];\n  }\n\n  let rbegin = result.digits.length;\n  while (result.digits[rbegin - 1] === \"0\") {\n    --rbegin;\n  }\n\n  // is this beyond the lowest fractional unit we can represent?\n  const minMultExp = multWords[multWords.length - 1].exp;\n  if (result.exp + rend < minMultExp) {\n    // cap to lowest fractional unit and retry\n    numStr = n.toFixed(-minMultExp);\n    result = parseNumStr(numStr);\n    signStr = result.sign < 0 ? NEG_WORD : \"\";\n    rend = result.digits.findIndex(x => x !== \"0\");\n    if (rend < 0) {\n      return signStr + digitWords[\"0\"];\n    }\n\n    rbegin = result.digits.length;\n    while (result.digits[rbegin - 1] === \"0\") {\n      --rbegin;\n    }\n  }\n\n  // convert digits to readout format\n  let str = signStr;\n  let pendingZero = false;\n  let i = rbegin;\n  const intToReadout = function(expBias = 0) {\n    let hasOutput = false;\n    while (i !== rend) {\n      const mult = multWords.find(x => x.exp + expBias <= result.exp + (i - 1));\n      if (mult === undefined || mult.exp < 0) {\n        // done with int part\n        break;\n      } else if (mult.exp > 0) {\n        // needs higher multiplier\n        if (intToReadout(expBias + mult.exp)) {\n          // 零 is omitted here (100 0000 -> 一百萬)\n          pendingZero = false;\n          // write the multiplier\n          str += mult.str;\n          hasOutput = true;\n        }\n      } else if (mult.exp === 0) {\n        if (result.digits[i - 1] !== \"0\") {\n          // insert 零 if necessary\n          if (pendingZero) {\n            str += digitWords[\"0\"];\n            pendingZero = false;\n          }\n          // write the digit\n          str += digitWords[result.digits[i - 1]];\n          hasOutput = true;\n        } else {\n          // mark that there are zero(s) not written yet\n          // 零 will be added later if necessary\n          pendingZero = true;\n        }\n        --i;\n        break;\n      }\n    }\n    return hasOutput;\n  };\n  const fracToReadout = function() {\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (i !== rend) {\n      const mult = multWords.find(x => x.exp <= result.exp + (i - 1));\n      if (mult === undefined) {\n        break;\n      }\n\n      if (intToReadout(mult.exp)) {\n        str += mult.str;\n        pendingZero = false;\n      }\n    }\n  };\n\n  const hasInt = intToReadout();\n  pendingZero = false;\n  if (i !== rend) {\n    if (hasInt) {\n      str += decimalWord;\n    }\n\n    // avoid 又零\n    while (i !== rend && result.digits[i - 1] === \"0\") {\n      --i;\n    }\n\n    fracToReadout();\n  }\n  return str;\n}\n\nexport function bool2hanzi(b: boolean): string {\n  return b ? \"陽\" : \"陰\";\n}\n","import { RomanizeSystem } from \"../types\";\nimport pinyin from \"./hanzi2roman-map-pinyin.json\";\nimport baxter from \"./hanzi2roman-map-baxter.json\";\n\nexport function hanzi2unicodeEntry(s: string) {\n  var y = \"\";\n  for (var c of s) {\n    y += \"U\";\n    y += c\n      .charCodeAt(0)\n      .toString(16)\n      .toUpperCase();\n  }\n  return y;\n}\n\nexport function hanzi2pinyin(a: string, system: RomanizeSystem = \"pinyin\") {\n  if (system === \"unicode\") return hanzi2unicodeEntry(a);\n\n  var tab = { pinyin, baxter }[system];\n  var s = \"\";\n  for (const x of a) {\n    var key = x\n      .charCodeAt(0)\n      .toString(16)\n      .toUpperCase();\n    var r = tab[key];\n    if (r == undefined) {\n      r = \"_\";\n    }\n    s += r.split(\" \")[0];\n  }\n  return s;\n}\n","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nexports.__esModule = true;\nvar GenericResponse = require(\"http-response-object\");\nvar FormData_1 = require(\"./FormData\");\nexports.FormData = FormData_1.FormData;\nvar init = require('sync-rpc');\nvar remote = init(require.resolve('./worker'));\nfunction request(method, url, options) {\n    var _a = options || { form: undefined }, form = _a.form, o = __rest(_a, [\"form\"]);\n    var opts = o;\n    if (form) {\n        opts.form = FormData_1.getFormDataEntries(form);\n    }\n    var req = {\n        m: method,\n        u: url && typeof url === 'object' ? url.href : url,\n        o: opts\n    };\n    var res = remote(req);\n    return new GenericResponse(res.s, res.h, res.b, res.u);\n}\nexports[\"default\"] = request;\nmodule.exports = request;\nmodule.exports[\"default\"] = request;\nmodule.exports.FormData = FormData_1.FormData;\n","\"use strict\";\nexports.__esModule = true;\nvar FormData = /** @class */ (function () {\n    function FormData() {\n        this._entries = [];\n    }\n    FormData.prototype.append = function (key, value, fileName) {\n        this._entries.push({ key: key, value: value, fileName: fileName });\n    };\n    return FormData;\n}());\nexports.FormData = FormData;\nfunction getFormDataEntries(fd) {\n    return fd._entries;\n}\nexports.getFormDataEntries = getFormDataEntries;\n","'use strict';\n\nconst path = require('path');\nconst spawn = require('child_process').spawn;\nconst spawnSync = require('child_process').spawnSync;\nconst JSON = require('./json-buffer');\n\nconst host = '127.0.0.1';\nfunction nodeNetCatSrc(port, input) {\n  return (\n    \"var c=require('net').connect(\" +\n    port +\n    \",'127.0.0.1',()=>{c.pipe(process.stdout);c.end(\" +\n    JSON.stringify(input)\n      .replace(/\\u2028/g, '\\\\u2028')\n      .replace(/\\u2029/g, '\\\\u2029') +\n    ')})'\n  );\n}\n\nconst FUNCTION_PRIORITY = [nativeNC, nodeNC];\n\nlet started = false;\nconst configuration = {port: null, fastestFunction: null};\nfunction start() {\n  if (!spawnSync) {\n    throw new Error(\n      'Sync-request requires node version 0.12 or later.  If you need to use it with an older version of node\\n' +\n        'you can `npm install sync-request@2.2.0`, which was the last version to support older versions of node.'\n    );\n  }\n  const port = findPort();\n  const p = spawn(process.execPath, [require.resolve('./worker'), port], {\n    stdio: 'inherit',\n    windowsHide: true,\n  });\n  p.unref();\n  process.on('exit', () => {\n    p.kill();\n  });\n  waitForAlive(port);\n  const fastestFunction = getFastestFunction(port);\n  configuration.port = port;\n  configuration.fastestFunction = fastestFunction;\n  started = true;\n}\n\nfunction findPort() {\n  const findPortResult = spawnSync(\n    process.execPath,\n    [require.resolve('./find-port')],\n    {\n      windowsHide: true,\n    }\n  );\n  if (findPortResult.error) {\n    if (typeof findPortResult.error === 'string') {\n      throw new Error(findPortResult.error);\n    }\n    throw findPortResult.error;\n  }\n  if (findPortResult.status !== 0) {\n    throw new Error(\n      findPortResult.stderr.toString() ||\n        'find port exited with code ' + findPortResult.status\n    );\n  }\n  const portString = findPortResult.stdout.toString('utf8').trim();\n  if (!/^[0-9]+$/.test(portString)) {\n    throw new Error('Invalid port number string returned: ' + portString);\n  }\n  return +portString;\n}\n\nfunction waitForAlive(port) {\n  let response = null;\n  let err = null;\n  let timeout = Date.now() + 10000;\n  while (response !== 'pong' && Date.now() < timeout) {\n    const result = nodeNC(port, 'ping\\r\\n');\n    response = result.stdout && result.stdout.toString();\n    err = result.stderr && result.stderr.toString();\n  }\n  if (response !== 'pong') {\n    throw new Error(\n      'Timed out waiting for sync-rpc server to start (it should respond with \"pong\" when sent \"ping\"):\\n\\n' +\n        err +\n        '\\n' +\n        response\n    );\n  }\n}\n\nfunction nativeNC(port, input) {\n  return spawnSync('nc', [host, port], {\n    input: input,\n    windowsHide: true,\n    maxBuffer: Infinity,\n  });\n}\n\nfunction nodeNC(port, input) {\n  const src = nodeNetCatSrc(port, input);\n  if (src.length < 1000) {\n    return spawnSync(process.execPath, ['-e', src], {\n      windowsHide: true,\n      maxBuffer: Infinity,\n    });\n  } else {\n    return spawnSync(process.execPath, [], {\n      input: src,\n      windowsHide: true,\n      maxBuffer: Infinity,\n    });\n  }\n}\n\nfunction test(fn, port) {\n  const result = fn(port, 'ping\\r\\n');\n  const response = result.stdout && result.stdout.toString();\n  return response === 'pong';\n}\n\nfunction getFastestFunction(port) {\n  for (let i = 0; i < FUNCTION_PRIORITY.length; i++) {\n    if (test(FUNCTION_PRIORITY[i], port)) {\n      return FUNCTION_PRIORITY[i];\n    }\n  }\n}\n\nfunction sendMessage(input) {\n  if (!started) start();\n  const res = configuration.fastestFunction(\n    configuration.port,\n    JSON.stringify(input) + '\\r\\n'\n  );\n  try {\n    return JSON.parse(res.stdout.toString('utf8'));\n  } catch (ex) {\n    if (res.error) {\n      if (typeof res.error === 'string') res.error = new Error(res.error);\n      throw res.error;\n    }\n    if (res.status !== 0) {\n      throw new Error(\n        configuration.fastestFunction.name +\n          ' failed:\\n' +\n          (res.stdout && res.stdout.toString()) +\n          '\\n' +\n          (res.stderr && res.stderr.toString())\n      );\n    }\n    throw new Error(\n      configuration.fastestFunction.name +\n        ' failed:\\n' +\n        (res.stdout && res.stdout).toString() +\n        '\\n' +\n        (res.stderr && res.stderr).toString()\n    );\n  }\n}\nfunction extractValue(msg) {\n  if (!msg.s) {\n    const error = new Error(msg.v.message);\n    error.code = msg.v.code;\n    throw error;\n  }\n  return msg.v;\n}\n\nfunction createClient(filename, args) {\n  const id = extractValue(sendMessage({t: 1, f: filename, a: args}));\n  return function(args) {\n    return extractValue(sendMessage({t: 0, i: id, a: args}));\n  };\n}\ncreateClient.FUNCTION_PRIORITY = FUNCTION_PRIORITY;\ncreateClient.configuration = configuration;\n\nmodule.exports = createClient;\n","'use strict';\n\nconst net = require('net');\nconst JSON = require('./json-buffer');\n\nconst INIT = 1;\nconst CALL = 0;\nconst modules = [];\n\nconst NULL_PROMISE = Promise.resolve(null);\nconst server = net.createServer({allowHalfOpen: true}, c => {\n  let responded = false;\n  function respond(data) {\n    if (responded) return;\n    responded = true;\n    c.end(JSON.stringify(data));\n  }\n\n  let buffer = '';\n  c.on('error', function(err) {\n    respond({s: false, v: {code: err.code, message: err.message}});\n  });\n  c.on('data', function(data) {\n    buffer += data.toString('utf8');\n    if (/\\r\\n/.test(buffer)) {\n      onMessage(buffer.trim());\n    }\n  });\n  function onMessage(str) {\n    if (str === 'ping') {\n      c.end('pong');\n      return;\n    }\n    NULL_PROMISE.then(function() {\n      const req = JSON.parse(str);\n      if (req.t === INIT) {\n        return init(req.f, req.a);\n      }\n      return modules[req.i](req.a);\n    }).then(\n      function(response) {\n        respond({s: true, v: response});\n      },\n      function(err) {\n        respond({s: false, v: {code: err.code, message: err.message}});\n      }\n    );\n  }\n});\n\nfunction init(filename, arg) {\n  let m = require(filename);\n  if (m && typeof m === 'object' && typeof m.default === 'function') {\n    m = m.default;\n  }\n  if (typeof m !== 'function') {\n    throw new Error(filename + ' did not export a function.');\n  }\n  return NULL_PROMISE.then(function() {\n    return m(arg);\n  }).then(function(fn) {\n    const i = modules.length;\n    modules[i] = fn;\n    return i;\n  });\n}\n\nserver.listen(+process.argv[2]);\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 47;","'use strict';\n\nconst getPort = require('get-port');\n\ngetPort()\n  .then(port => process.stdout.write('' + port))\n  .catch(err =>\n    setTimeout(() => {\n      throw err;\n    }, 0)\n  );\n","'use strict';\nconst net = require('net');\n\nconst getPort = options => new Promise((resolve, reject) => {\n\t// For backwards compatibility with number-only input\n\t// TODO: Remove this in the next major version\n\tif (typeof options === 'number') {\n\t\toptions = {\n\t\t\tport: options\n\t\t};\n\t}\n\n\tconst server = net.createServer();\n\n\tserver.unref();\n\tserver.on('error', reject);\n\n\tserver.listen(options, () => {\n\t\tconst port = server.address().port;\n\t\tserver.close(() => {\n\t\t\tresolve(port);\n\t\t});\n\t});\n});\n\nmodule.exports = options => options ?\n\tgetPort(options).catch(() => getPort(0)) :\n\tgetPort(0);\n","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nexports.__esModule = true;\nvar then_request_1 = require(\"then-request\");\nfunction init() {\n    return function (req) {\n        // Note how even though we return a promise, the resulting rpc client will be synchronous\n        var _a = req.o || { form: undefined }, form = _a.form, o = __rest(_a, [\"form\"]);\n        var opts = o;\n        if (form) {\n            var fd_1 = new then_request_1.FormData();\n            form.forEach(function (entry) {\n                fd_1.append(entry.key, entry.value, entry.fileName);\n            });\n            opts.form = fd_1;\n        }\n        return then_request_1[\"default\"](req.m, req.u, opts).then(function (response) { return ({\n            s: response.statusCode,\n            h: response.headers,\n            b: response.body,\n            u: response.url\n        }); });\n    };\n}\nmodule.exports = init;\n","'use strict';\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nexports.__esModule = true;\nvar GenericResponse = require(\"http-response-object\");\nvar Promise = require(\"promise\");\nvar concat = require(\"concat-stream\");\nvar ResponsePromise_1 = require(\"./ResponsePromise\");\nexports.ResponsePromise = ResponsePromise_1.ResponsePromise;\nvar handle_qs_1 = require(\"./handle-qs\");\nvar http_basic_1 = require(\"http-basic\");\nvar FormData = require(\"form-data\");\nexports.FormData = FormData;\nvar caseless = require('caseless');\nvar basicRequest = http_basic_1[\"default\"];\nvar BufferBody = /** @class */ (function () {\n    function BufferBody(body, extraHeaders) {\n        this._body = body;\n        this._headers = extraHeaders;\n    }\n    BufferBody.prototype.getHeaders = function () {\n        return Promise.resolve(__assign({ 'content-length': '' + this._body.length }, this._headers));\n    };\n    BufferBody.prototype.pipe = function (stream) {\n        stream.end(this._body);\n    };\n    return BufferBody;\n}());\nvar FormBody = /** @class */ (function () {\n    function FormBody(body) {\n        this._body = body;\n    }\n    FormBody.prototype.getHeaders = function () {\n        var _this = this;\n        var headers = this._body.getHeaders();\n        return new Promise(function (resolve, reject) {\n            var gotLength = false;\n            _this._body.getLength(function (err, length) {\n                if (gotLength)\n                    return;\n                gotLength = true;\n                if (err) {\n                    return reject(typeof err == 'string'\n                        ? new Error(err)\n                        : err);\n                }\n                headers['content-length'] = '' + length;\n                resolve(headers);\n            });\n        });\n    };\n    FormBody.prototype.pipe = function (stream) {\n        this._body.pipe(stream);\n    };\n    return FormBody;\n}());\nvar StreamBody = /** @class */ (function () {\n    function StreamBody(body) {\n        this._body = body;\n    }\n    StreamBody.prototype.getHeaders = function () {\n        return Promise.resolve({});\n    };\n    StreamBody.prototype.pipe = function (stream) {\n        this._body.pipe(stream);\n    };\n    return StreamBody;\n}());\nfunction handleBody(options) {\n    if (options.form) {\n        return new FormBody(options.form);\n    }\n    var extraHeaders = {};\n    var body = options.body;\n    if (options.json) {\n        extraHeaders['content-type'] = 'application/json';\n        body = JSON.stringify(options.json);\n    }\n    if (typeof body === 'string') {\n        body = Buffer.from(body);\n    }\n    if (!body) {\n        body = Buffer.alloc(0);\n    }\n    if (!Buffer.isBuffer(body)) {\n        if (typeof body.pipe === 'function') {\n            return new StreamBody(body);\n        }\n        throw new TypeError('body should be a Buffer or a String');\n    }\n    return new BufferBody(body, extraHeaders);\n}\nfunction request(method, url, options) {\n    if (options === void 0) { options = {}; }\n    return ResponsePromise_1[\"default\"](new Promise(function (resolve, reject) {\n        // check types of arguments\n        if (typeof method !== 'string') {\n            throw new TypeError('The method must be a string.');\n        }\n        if (typeof url !== 'string') {\n            throw new TypeError('The URL/path must be a string.');\n        }\n        if (options == null) {\n            options = {};\n        }\n        if (typeof options !== 'object') {\n            throw new TypeError('Options must be an object (or null).');\n        }\n        method = method.toUpperCase();\n        options.headers = options.headers || {};\n        var headers = caseless(options.headers);\n        // handle query string\n        if (options.qs) {\n            url = handle_qs_1[\"default\"](url, options.qs);\n        }\n        var duplex = !(method === 'GET' || method === 'DELETE' || method === 'HEAD');\n        if (duplex) {\n            var body_1 = handleBody(options);\n            body_1.getHeaders().then(function (bodyHeaders) {\n                Object.keys(bodyHeaders).forEach(function (key) {\n                    if (!headers.has(key)) {\n                        headers.set(key, bodyHeaders[key]);\n                    }\n                });\n                ready(body_1);\n            })[\"catch\"](reject);\n        }\n        else if (options.body) {\n            throw new Error('You cannot pass a body to a ' + method + ' request.');\n        }\n        else {\n            ready();\n        }\n        function ready(body) {\n            var req = basicRequest(method, url, {\n                allowRedirectHeaders: options.allowRedirectHeaders,\n                headers: options.headers,\n                followRedirects: options.followRedirects !== false,\n                maxRedirects: options.maxRedirects,\n                gzip: options.gzip !== false,\n                cache: options.cache,\n                agent: options.agent,\n                timeout: options.timeout,\n                socketTimeout: options.socketTimeout,\n                retry: options.retry,\n                retryDelay: options.retryDelay,\n                maxRetries: options.maxRetries,\n                isMatch: options.isMatch,\n                isExpired: options.isExpired,\n                canCache: options.canCache\n            }, function (err, res) {\n                if (err)\n                    return reject(err);\n                if (!res)\n                    return reject(new Error('No request was received'));\n                res.body.on('error', reject);\n                res.body.pipe(concat(function (body) {\n                    resolve(new GenericResponse(res.statusCode, res.headers, Array.isArray(body) ? Buffer.alloc(0) : body, res.url));\n                }));\n            });\n            if (req && body) {\n                body.pipe(req);\n            }\n        }\n    }));\n}\nexports[\"default\"] = request;\nmodule.exports = request;\nmodule.exports[\"default\"] = request;\nmodule.exports.FormData = FormData;\n","'use strict';\n\nmodule.exports = require('./core.js');\nrequire('./done.js');\nrequire('./finally.js');\nrequire('./es6-extensions.js');\nrequire('./node-extensions.js');\nrequire('./synchronous.js');\n","module.exports = require(\"domain\");","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype.done = function (onFulfilled, onRejected) {\n  var self = arguments.length ? this.then.apply(this, arguments) : this;\n  self.then(null, function (err) {\n    setTimeout(function () {\n      throw err;\n    }, 0);\n  });\n};\n","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype.finally = function (f) {\n  return this.then(function (value) {\n    return Promise.resolve(f()).then(function () {\n      return value;\n    });\n  }, function (err) {\n    return Promise.resolve(f()).then(function () {\n      throw err;\n    });\n  });\n};\n","'use strict';\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n  var p = new Promise(Promise._0);\n  p._V = 1;\n  p._W = value;\n  return p;\n}\nPromise.resolve = function (value) {\n  if (value instanceof Promise) return value;\n\n  if (value === null) return NULL;\n  if (value === undefined) return UNDEFINED;\n  if (value === true) return TRUE;\n  if (value === false) return FALSE;\n  if (value === 0) return ZERO;\n  if (value === '') return EMPTYSTRING;\n\n  if (typeof value === 'object' || typeof value === 'function') {\n    try {\n      var then = value.then;\n      if (typeof then === 'function') {\n        return new Promise(then.bind(value));\n      }\n    } catch (ex) {\n      return new Promise(function (resolve, reject) {\n        reject(ex);\n      });\n    }\n  }\n  return valuePromise(value);\n};\n\nvar iterableToArray = function (iterable) {\n  if (typeof Array.from === 'function') {\n    // ES2015+, iterables exist\n    iterableToArray = Array.from;\n    return Array.from(iterable);\n  }\n\n  // ES5, only arrays and array-likes exist\n  iterableToArray = function (x) { return Array.prototype.slice.call(x); };\n  return Array.prototype.slice.call(iterable);\n}\n\nPromise.all = function (arr) {\n  var args = iterableToArray(arr);\n\n  return new Promise(function (resolve, reject) {\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n    function res(i, val) {\n      if (val && (typeof val === 'object' || typeof val === 'function')) {\n        if (val instanceof Promise && val.then === Promise.prototype.then) {\n          while (val._V === 3) {\n            val = val._W;\n          }\n          if (val._V === 1) return res(i, val._W);\n          if (val._V === 2) reject(val._W);\n          val.then(function (val) {\n            res(i, val);\n          }, reject);\n          return;\n        } else {\n          var then = val.then;\n          if (typeof then === 'function') {\n            var p = new Promise(then.bind(val));\n            p.then(function (val) {\n              res(i, val);\n            }, reject);\n            return;\n          }\n        }\n      }\n      args[i] = val;\n      if (--remaining === 0) {\n        resolve(args);\n      }\n    }\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.reject = function (value) {\n  return new Promise(function (resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function (values) {\n  return new Promise(function (resolve, reject) {\n    iterableToArray(values).forEach(function(value){\n      Promise.resolve(value).then(resolve, reject);\n    });\n  });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n  return this.then(null, onRejected);\n};\n","'use strict';\n\n// This file contains then/promise specific extensions that are only useful\n// for node.js interop\n\nvar Promise = require('./core.js');\nvar asap = require('asap');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nPromise.denodeify = function (fn, argumentCount) {\n  if (\n    typeof argumentCount === 'number' && argumentCount !== Infinity\n  ) {\n    return denodeifyWithCount(fn, argumentCount);\n  } else {\n    return denodeifyWithoutCount(fn);\n  }\n};\n\nvar callbackFn = (\n  'function (err, res) {' +\n  'if (err) { rj(err); } else { rs(res); }' +\n  '}'\n);\nfunction denodeifyWithCount(fn, argumentCount) {\n  var args = [];\n  for (var i = 0; i < argumentCount; i++) {\n    args.push('a' + i);\n  }\n  var body = [\n    'return function (' + args.join(',') + ') {',\n    'var self = this;',\n    'return new Promise(function (rs, rj) {',\n    'var res = fn.call(',\n    ['self'].concat(args).concat([callbackFn]).join(','),\n    ');',\n    'if (res &&',\n    '(typeof res === \"object\" || typeof res === \"function\") &&',\n    'typeof res.then === \"function\"',\n    ') {rs(res);}',\n    '});',\n    '};'\n  ].join('');\n  return Function(['Promise', 'fn'], body)(Promise, fn);\n}\nfunction denodeifyWithoutCount(fn) {\n  var fnLength = Math.max(fn.length - 1, 3);\n  var args = [];\n  for (var i = 0; i < fnLength; i++) {\n    args.push('a' + i);\n  }\n  var body = [\n    'return function (' + args.join(',') + ') {',\n    'var self = this;',\n    'var args;',\n    'var argLength = arguments.length;',\n    'if (arguments.length > ' + fnLength + ') {',\n    'args = new Array(arguments.length + 1);',\n    'for (var i = 0; i < arguments.length; i++) {',\n    'args[i] = arguments[i];',\n    '}',\n    '}',\n    'return new Promise(function (rs, rj) {',\n    'var cb = ' + callbackFn + ';',\n    'var res;',\n    'switch (argLength) {',\n    args.concat(['extra']).map(function (_, index) {\n      return (\n        'case ' + (index) + ':' +\n        'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +\n        'break;'\n      );\n    }).join(''),\n    'default:',\n    'args[argLength] = cb;',\n    'res = fn.apply(self, args);',\n    '}',\n    \n    'if (res &&',\n    '(typeof res === \"object\" || typeof res === \"function\") &&',\n    'typeof res.then === \"function\"',\n    ') {rs(res);}',\n    '});',\n    '};'\n  ].join('');\n\n  return Function(\n    ['Promise', 'fn'],\n    body\n  )(Promise, fn);\n}\n\nPromise.nodeify = function (fn) {\n  return function () {\n    var args = Array.prototype.slice.call(arguments);\n    var callback =\n      typeof args[args.length - 1] === 'function' ? args.pop() : null;\n    var ctx = this;\n    try {\n      return fn.apply(this, arguments).nodeify(callback, ctx);\n    } catch (ex) {\n      if (callback === null || typeof callback == 'undefined') {\n        return new Promise(function (resolve, reject) {\n          reject(ex);\n        });\n      } else {\n        asap(function () {\n          callback.call(ctx, ex);\n        })\n      }\n    }\n  }\n};\n\nPromise.prototype.nodeify = function (callback, ctx) {\n  if (typeof callback != 'function') return this;\n\n  this.then(function (value) {\n    asap(function () {\n      callback.call(ctx, null, value);\n    });\n  }, function (err) {\n    asap(function () {\n      callback.call(ctx, err);\n    });\n  });\n};\n","\"use strict\";\n\nvar rawAsap = require(\"./raw\");\nvar freeTasks = [];\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with\n * priority over IO events. An exception thrown in a task can be handled by\n * `process.on(\"uncaughtException\") or `domain.on(\"error\")`, but will otherwise\n * crash the process. If the error is handled, all subsequent tasks will\n * resume.\n *\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n    var rawTask;\n    if (freeTasks.length) {\n        rawTask = freeTasks.pop();\n    } else {\n        rawTask = new RawTask();\n    }\n    rawTask.task = task;\n    rawTask.domain = process.domain;\n    rawAsap(rawTask);\n}\n\nfunction RawTask() {\n    this.task = null;\n    this.domain = null;\n}\n\nRawTask.prototype.call = function () {\n    if (this.domain) {\n        this.domain.enter();\n    }\n    var threw = true;\n    try {\n        this.task.call();\n        threw = false;\n        // If the task throws an exception (presumably) Node.js restores the\n        // domain stack for the next event.\n        if (this.domain) {\n            this.domain.exit();\n        }\n    } finally {\n        // We use try/finally and a threw flag to avoid messing up stack traces\n        // when we catch and release errors.\n        if (threw) {\n            // In Node.js, uncaught exceptions are considered fatal errors.\n            // Re-throw them to interrupt flushing!\n            // Ensure that flushing continues if an uncaught exception is\n            // suppressed listening process.on(\"uncaughtException\") or\n            // domain.on(\"error\").\n            rawAsap.requestFlush();\n        }\n        // If the task threw an error, we do not want to exit the domain here.\n        // Exiting the domain would prevent the domain from catching the error.\n        this.task = null;\n        this.domain = null;\n        freeTasks.push(this);\n    }\n};\n\n","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.enableSynchronous = function () {\n  Promise.prototype.isPending = function() {\n    return this.getState() == 0;\n  };\n\n  Promise.prototype.isFulfilled = function() {\n    return this.getState() == 1;\n  };\n\n  Promise.prototype.isRejected = function() {\n    return this.getState() == 2;\n  };\n\n  Promise.prototype.getValue = function () {\n    if (this._V === 3) {\n      return this._W.getValue();\n    }\n\n    if (!this.isFulfilled()) {\n      throw new Error('Cannot get a value of an unfulfilled promise.');\n    }\n\n    return this._W;\n  };\n\n  Promise.prototype.getReason = function () {\n    if (this._V === 3) {\n      return this._W.getReason();\n    }\n\n    if (!this.isRejected()) {\n      throw new Error('Cannot get a rejection reason of a non-rejected promise.');\n    }\n\n    return this._W;\n  };\n\n  Promise.prototype.getState = function () {\n    if (this._V === 3) {\n      return this._W.getState();\n    }\n    if (this._V === -1 || this._V === -2) {\n      return 0;\n    }\n\n    return this._V;\n  };\n};\n\nPromise.disableSynchronous = function() {\n  Promise.prototype.isPending = undefined;\n  Promise.prototype.isFulfilled = undefined;\n  Promise.prototype.isRejected = undefined;\n  Promise.prototype.getValue = undefined;\n  Promise.prototype.getReason = undefined;\n  Promise.prototype.getState = undefined;\n};\n","var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","module.exports = require(\"events\");","module.exports = require(\"buffer\");","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","var toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n","var undefined = (void 0); // Paranoia\n\n// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to\n// create, and consume so much memory, that the browser appears frozen.\nvar MAX_ARRAY_LENGTH = 1e5;\n\n// Approximations of internal ECMAScript conversion functions\nvar ECMAScript = (function() {\n  // Stash a copy in case other scripts modify these\n  var opts = Object.prototype.toString,\n      ophop = Object.prototype.hasOwnProperty;\n\n  return {\n    // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:\n    Class: function(v) { return opts.call(v).replace(/^\\[object *|\\]$/g, ''); },\n    HasProperty: function(o, p) { return p in o; },\n    HasOwnProperty: function(o, p) { return ophop.call(o, p); },\n    IsCallable: function(o) { return typeof o === 'function'; },\n    ToInt32: function(v) { return v >> 0; },\n    ToUint32: function(v) { return v >>> 0; }\n  };\n}());\n\n// Snapshot intrinsics\nvar LN2 = Math.LN2,\n    abs = Math.abs,\n    floor = Math.floor,\n    log = Math.log,\n    min = Math.min,\n    pow = Math.pow,\n    round = Math.round;\n\n// ES5: lock down object properties\nfunction configureProperties(obj) {\n  if (getOwnPropNames && defineProp) {\n    var props = getOwnPropNames(obj), i;\n    for (i = 0; i < props.length; i += 1) {\n      defineProp(obj, props[i], {\n        value: obj[props[i]],\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n}\n\n// emulate ES5 getter/setter API using legacy APIs\n// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx\n// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but\n// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)\nvar defineProp\nif (Object.defineProperty && (function() {\n      try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n      } catch (e) {\n        return false;\n      }\n    })()) {\n  defineProp = Object.defineProperty;\n} else {\n  defineProp = function(o, p, desc) {\n    if (!o === Object(o)) throw new TypeError(\"Object.defineProperty called on non-object\");\n    if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }\n    if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }\n    if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }\n    return o;\n  };\n}\n\nvar getOwnPropNames = Object.getOwnPropertyNames || function (o) {\n  if (o !== Object(o)) throw new TypeError(\"Object.getOwnPropertyNames called on non-object\");\n  var props = [], p;\n  for (p in o) {\n    if (ECMAScript.HasOwnProperty(o, p)) {\n      props.push(p);\n    }\n  }\n  return props;\n};\n\n// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)\n// for index in 0 ... obj.length\nfunction makeArrayAccessors(obj) {\n  if (!defineProp) { return; }\n\n  if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError(\"Array too large for polyfill\");\n\n  function makeArrayAccessor(index) {\n    defineProp(obj, index, {\n      'get': function() { return obj._getter(index); },\n      'set': function(v) { obj._setter(index, v); },\n      enumerable: true,\n      configurable: false\n    });\n  }\n\n  var i;\n  for (i = 0; i < obj.length; i += 1) {\n    makeArrayAccessor(i);\n  }\n}\n\n// Internal conversion functions:\n//    pack<Type>()   - take a number (interpreted as Type), output a byte array\n//    unpack<Type>() - take a byte array, output a Type-like number\n\nfunction as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }\nfunction as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }\n\nfunction packI8(n) { return [n & 0xff]; }\nfunction unpackI8(bytes) { return as_signed(bytes[0], 8); }\n\nfunction packU8(n) { return [n & 0xff]; }\nfunction unpackU8(bytes) { return as_unsigned(bytes[0], 8); }\n\nfunction packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }\n\nfunction packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packIEEE754(v, ebits, fbits) {\n\n  var bias = (1 << (ebits - 1)) - 1,\n      s, e, f, ln,\n      i, bits, str, bytes;\n\n  function roundToEven(n) {\n    var w = floor(n), f = n - w;\n    if (f < 0.5)\n      return w;\n    if (f > 0.5)\n      return w + 1;\n    return w % 2 ? w + 1 : w;\n  }\n\n  // Compute sign, exponent, fraction\n  if (v !== v) {\n    // NaN\n    // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping\n    e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;\n  } else if (v === Infinity || v === -Infinity) {\n    e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;\n  } else if (v === 0) {\n    e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;\n  } else {\n    s = v < 0;\n    v = abs(v);\n\n    if (v >= pow(2, 1 - bias)) {\n      e = min(floor(log(v) / LN2), 1023);\n      f = roundToEven(v / pow(2, e) * pow(2, fbits));\n      if (f / pow(2, fbits) >= 2) {\n        e = e + 1;\n        f = 1;\n      }\n      if (e > bias) {\n        // Overflow\n        e = (1 << ebits) - 1;\n        f = 0;\n      } else {\n        // Normalized\n        e = e + bias;\n        f = f - pow(2, fbits);\n      }\n    } else {\n      // Denormalized\n      e = 0;\n      f = roundToEven(v / pow(2, 1 - bias - fbits));\n    }\n  }\n\n  // Pack sign, exponent, fraction\n  bits = [];\n  for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }\n  for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }\n  bits.push(s ? 1 : 0);\n  bits.reverse();\n  str = bits.join('');\n\n  // Bits to bytes\n  bytes = [];\n  while (str.length) {\n    bytes.push(parseInt(str.substring(0, 8), 2));\n    str = str.substring(8);\n  }\n  return bytes;\n}\n\nfunction unpackIEEE754(bytes, ebits, fbits) {\n\n  // Bytes to bits\n  var bits = [], i, j, b, str,\n      bias, s, e, f;\n\n  for (i = bytes.length; i; i -= 1) {\n    b = bytes[i - 1];\n    for (j = 8; j; j -= 1) {\n      bits.push(b % 2 ? 1 : 0); b = b >> 1;\n    }\n  }\n  bits.reverse();\n  str = bits.join('');\n\n  // Unpack sign, exponent, fraction\n  bias = (1 << (ebits - 1)) - 1;\n  s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n  e = parseInt(str.substring(1, 1 + ebits), 2);\n  f = parseInt(str.substring(1 + ebits), 2);\n\n  // Produce number\n  if (e === (1 << ebits) - 1) {\n    return f !== 0 ? NaN : s * Infinity;\n  } else if (e > 0) {\n    // Normalized\n    return s * pow(2, e - bias) * (1 + f / pow(2, fbits));\n  } else if (f !== 0) {\n    // Denormalized\n    return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));\n  } else {\n    return s < 0 ? -0 : 0;\n  }\n}\n\nfunction unpackF64(b) { return unpackIEEE754(b, 11, 52); }\nfunction packF64(v) { return packIEEE754(v, 11, 52); }\nfunction unpackF32(b) { return unpackIEEE754(b, 8, 23); }\nfunction packF32(v) { return packIEEE754(v, 8, 23); }\n\n\n//\n// 3 The ArrayBuffer Type\n//\n\n(function() {\n\n  /** @constructor */\n  var ArrayBuffer = function ArrayBuffer(length) {\n    length = ECMAScript.ToInt32(length);\n    if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');\n\n    this.byteLength = length;\n    this._bytes = [];\n    this._bytes.length = length;\n\n    var i;\n    for (i = 0; i < this.byteLength; i += 1) {\n      this._bytes[i] = 0;\n    }\n\n    configureProperties(this);\n  };\n\n  exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;\n\n  //\n  // 4 The ArrayBufferView Type\n  //\n\n  // NOTE: this constructor is not exported\n  /** @constructor */\n  var ArrayBufferView = function ArrayBufferView() {\n    //this.buffer = null;\n    //this.byteOffset = 0;\n    //this.byteLength = 0;\n  };\n\n  //\n  // 5 The Typed Array View Types\n  //\n\n  function makeConstructor(bytesPerElement, pack, unpack) {\n    // Each TypedArray type requires a distinct constructor instance with\n    // identical logic, which this produces.\n\n    var ctor;\n    ctor = function(buffer, byteOffset, length) {\n      var array, sequence, i, s;\n\n      if (!arguments.length || typeof arguments[0] === 'number') {\n        // Constructor(unsigned long length)\n        this.length = ECMAScript.ToInt32(arguments[0]);\n        if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');\n\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n      } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {\n        // Constructor(TypedArray array)\n        array = arguments[0];\n\n        this.length = array.length;\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          this._setter(i, array._getter(i));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(sequence<type> array)\n        sequence = arguments[0];\n\n        this.length = ECMAScript.ToUint32(sequence.length);\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          s = sequence[i];\n          this._setter(i, Number(s));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(ArrayBuffer buffer,\n        //             optional unsigned long byteOffset, optional unsigned long length)\n        this.buffer = buffer;\n\n        this.byteOffset = ECMAScript.ToUint32(byteOffset);\n        if (this.byteOffset > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset out of range\");\n        }\n\n        if (this.byteOffset % this.BYTES_PER_ELEMENT) {\n          // The given byteOffset must be a multiple of the element\n          // size of the specific type, otherwise an exception is raised.\n          throw new RangeError(\"ArrayBuffer length minus the byteOffset is not a multiple of the element size.\");\n        }\n\n        if (arguments.length < 3) {\n          this.byteLength = this.buffer.byteLength - this.byteOffset;\n\n          if (this.byteLength % this.BYTES_PER_ELEMENT) {\n            throw new RangeError(\"length of buffer minus byteOffset not a multiple of the element size\");\n          }\n          this.length = this.byteLength / this.BYTES_PER_ELEMENT;\n        } else {\n          this.length = ECMAScript.ToUint32(length);\n          this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        }\n\n        if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n\n      this.constructor = ctor;\n\n      configureProperties(this);\n      makeArrayAccessors(this);\n    };\n\n    ctor.prototype = new ArrayBufferView();\n    ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;\n    ctor.prototype._pack = pack;\n    ctor.prototype._unpack = unpack;\n    ctor.BYTES_PER_ELEMENT = bytesPerElement;\n\n    // getter type (unsigned long index);\n    ctor.prototype._getter = function(index) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = [], i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        bytes.push(this.buffer._bytes[o]);\n      }\n      return this._unpack(bytes);\n    };\n\n    // NONSTANDARD: convenience alias for getter: type get(unsigned long index);\n    ctor.prototype.get = ctor.prototype._getter;\n\n    // setter void (unsigned long index, type value);\n    ctor.prototype._setter = function(index, value) {\n      if (arguments.length < 2) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = this._pack(value), i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        this.buffer._bytes[o] = bytes[i];\n      }\n    };\n\n    // void set(TypedArray array, optional unsigned long offset);\n    // void set(sequence<type> array, optional unsigned long offset);\n    ctor.prototype.set = function(index, value) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n      var array, sequence, offset, len,\n          i, s, d,\n          byteOffset, byteLength, tmp;\n\n      if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {\n        // void set(TypedArray array, optional unsigned long offset);\n        array = arguments[0];\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + array.length > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;\n        byteLength = array.length * this.BYTES_PER_ELEMENT;\n\n        if (array.buffer === this.buffer) {\n          tmp = [];\n          for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {\n            tmp[i] = array.buffer._bytes[s];\n          }\n          for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {\n            this.buffer._bytes[d] = tmp[i];\n          }\n        } else {\n          for (i = 0, s = array.byteOffset, d = byteOffset;\n               i < byteLength; i += 1, s += 1, d += 1) {\n            this.buffer._bytes[d] = array.buffer._bytes[s];\n          }\n        }\n      } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {\n        // void set(sequence<type> array, optional unsigned long offset);\n        sequence = arguments[0];\n        len = ECMAScript.ToUint32(sequence.length);\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + len > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        for (i = 0; i < len; i += 1) {\n          s = sequence[i];\n          this._setter(offset + i, Number(s));\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n    };\n\n    // TypedArray subarray(long begin, optional long end);\n    ctor.prototype.subarray = function(start, end) {\n      function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }\n\n      start = ECMAScript.ToInt32(start);\n      end = ECMAScript.ToInt32(end);\n\n      if (arguments.length < 1) { start = 0; }\n      if (arguments.length < 2) { end = this.length; }\n\n      if (start < 0) { start = this.length + start; }\n      if (end < 0) { end = this.length + end; }\n\n      start = clamp(start, 0, this.length);\n      end = clamp(end, 0, this.length);\n\n      var len = end - start;\n      if (len < 0) {\n        len = 0;\n      }\n\n      return new this.constructor(\n        this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n    };\n\n    return ctor;\n  }\n\n  var Int8Array = makeConstructor(1, packI8, unpackI8);\n  var Uint8Array = makeConstructor(1, packU8, unpackU8);\n  var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);\n  var Int16Array = makeConstructor(2, packI16, unpackI16);\n  var Uint16Array = makeConstructor(2, packU16, unpackU16);\n  var Int32Array = makeConstructor(4, packI32, unpackI32);\n  var Uint32Array = makeConstructor(4, packU32, unpackU32);\n  var Float32Array = makeConstructor(4, packF32, unpackF32);\n  var Float64Array = makeConstructor(8, packF64, unpackF64);\n\n  exports.Int8Array = exports.Int8Array || Int8Array;\n  exports.Uint8Array = exports.Uint8Array || Uint8Array;\n  exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;\n  exports.Int16Array = exports.Int16Array || Int16Array;\n  exports.Uint16Array = exports.Uint16Array || Uint16Array;\n  exports.Int32Array = exports.Int32Array || Int32Array;\n  exports.Uint32Array = exports.Uint32Array || Uint32Array;\n  exports.Float32Array = exports.Float32Array || Float32Array;\n  exports.Float64Array = exports.Float64Array || Float64Array;\n}());\n\n//\n// 6 The DataView View Type\n//\n\n(function() {\n  function r(array, index) {\n    return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];\n  }\n\n  var IS_BIG_ENDIAN = (function() {\n    var u16array = new(exports.Uint16Array)([0x1234]),\n        u8array = new(exports.Uint8Array)(u16array.buffer);\n    return r(u8array, 0) === 0x12;\n  }());\n\n  // Constructor(ArrayBuffer buffer,\n  //             optional unsigned long byteOffset,\n  //             optional unsigned long byteLength)\n  /** @constructor */\n  var DataView = function DataView(buffer, byteOffset, byteLength) {\n    if (arguments.length === 0) {\n      buffer = new exports.ArrayBuffer(0);\n    } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {\n      throw new TypeError(\"TypeError\");\n    }\n\n    this.buffer = buffer || new exports.ArrayBuffer(0);\n\n    this.byteOffset = ECMAScript.ToUint32(byteOffset);\n    if (this.byteOffset > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset out of range\");\n    }\n\n    if (arguments.length < 3) {\n      this.byteLength = this.buffer.byteLength - this.byteOffset;\n    } else {\n      this.byteLength = ECMAScript.ToUint32(byteLength);\n    }\n\n    if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n    }\n\n    configureProperties(this);\n  };\n\n  function makeGetter(arrayType) {\n    return function(byteOffset, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n      byteOffset += this.byteOffset;\n\n      var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),\n          bytes = [], i;\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(uint8Array, i));\n      }\n\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);\n    };\n  }\n\n  DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);\n  DataView.prototype.getInt8 = makeGetter(exports.Int8Array);\n  DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);\n  DataView.prototype.getInt16 = makeGetter(exports.Int16Array);\n  DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);\n  DataView.prototype.getInt32 = makeGetter(exports.Int32Array);\n  DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);\n  DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);\n\n  function makeSetter(arrayType) {\n    return function(byteOffset, value, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n\n      // Get bytes\n      var typeArray = new arrayType([value]),\n          byteArray = new exports.Uint8Array(typeArray.buffer),\n          bytes = [], i, byteView;\n\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(byteArray, i));\n      }\n\n      // Flip if necessary\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      // Write them\n      byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);\n      byteView.set(bytes);\n    };\n  }\n\n  DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);\n  DataView.prototype.setInt8 = makeSetter(exports.Int8Array);\n  DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);\n  DataView.prototype.setInt16 = makeSetter(exports.Int16Array);\n  DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);\n  DataView.prototype.setInt32 = makeSetter(exports.Int32Array);\n  DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);\n  DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);\n\n  exports.DataView = exports.DataView || DataView;\n\n}());\n","\"use strict\";\nexports.__esModule = true;\nvar Promise = require(\"promise\");\nfunction getBody(encoding) {\n    if (!encoding) {\n        return this.then(getBodyBinary);\n    }\n    if (encoding === 'utf8') {\n        return this.then(getBodyUTF8);\n    }\n    return this.then(getBodyWithEncoding(encoding));\n}\nfunction getBodyWithEncoding(encoding) {\n    return function (res) { return res.getBody(encoding); };\n}\nfunction getBodyBinary(res) {\n    return res.getBody();\n}\nfunction getBodyUTF8(res) {\n    return res.getBody('utf8');\n}\nfunction toResponsePromise(result) {\n    result.getBody = getBody;\n    return result;\n}\nexports[\"default\"] = toResponsePromise;\nexports.ResponsePromise = undefined;\n","\"use strict\";\nexports.__esModule = true;\nvar qs_1 = require(\"qs\");\nfunction handleQs(url, query) {\n    var _a = url.split('?'), start = _a[0], part2 = _a[1];\n    var qs = (part2 || '').split('#')[0];\n    var end = part2 && part2.split('#').length > 1 ? '#' + part2.split('#')[1] : '';\n    var baseQs = qs_1.parse(qs);\n    for (var i in query) {\n        baseQs[i] = query[i];\n    }\n    qs = qs_1.stringify(baseQs);\n    if (qs !== '') {\n        qs = '?' + qs;\n    }\n    return start + qs + end;\n}\nexports[\"default\"] = handleQs;\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) { // eslint-disable-line func-name-matching\n        return prefix + '[]';\n    },\n    indices: function indices(prefix, key) { // eslint-disable-line func-name-matching\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) { // eslint-disable-line func-name-matching\n        return prefix;\n    }\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaults = {\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar stringify = function stringify( // eslint-disable-line func-name-matching\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    formatter,\n    encodeValuesOnly\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (Array.isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n\n        if (Array.isArray(obj)) {\n            values = values.concat(stringify(\n                obj[key],\n                generateArrayPrefix(prefix, key),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        } else {\n            values = values.concat(stringify(\n                obj[key],\n                prefix + (allowDots ? '.' + key : '[' + key + ']'),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        }\n    }\n\n    return values;\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;\n    var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n    var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;\n    var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;\n    var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;\n    var sort = typeof options.sort === 'function' ? options.sort : null;\n    var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;\n    var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;\n    var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;\n    if (typeof options.format === 'undefined') {\n        options.format = formats['default'];\n    } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {\n        throw new TypeError('Unknown format option provided.');\n    }\n    var formatter = formats.formatters[options.format];\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (Array.isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (options.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = options.arrayFormat;\n    } else if ('indices' in options) {\n        arrayFormat = options.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (sort) {\n        objKeys.sort(sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n\n        keys = keys.concat(stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encode ? encoder : null,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            formatter,\n            encodeValuesOnly\n        ));\n    }\n\n    var joined = keys.join(delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    parameterLimit: 1000,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n\n    for (var i = 0; i < parts.length; ++i) {\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder);\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder);\n            val = options.decoder(part.slice(pos + 1), defaults.decoder);\n        }\n        if (has.call(obj, key)) {\n            obj[key] = [].concat(obj[key]).concat(val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n    var leaf = val;\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]') {\n            obj = [];\n            obj = obj.concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys\n        // that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options);\n};\n\nmodule.exports = function (str, opts) {\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;\n    options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;\n    options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;\n    options.parseArrays = options.parseArrays !== false;\n    options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;\n    options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;\n    options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;\n    options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;\n    options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options);\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nexports.__esModule = true;\nvar cacheUtils = require(\"./cache-utils\");\nvar FileCache_1 = require(\"./FileCache\");\nvar MemoryCache_1 = require(\"./MemoryCache\");\nvar http_1 = require(\"http\");\nvar zlib_1 = require(\"zlib\");\nvar url_1 = require(\"url\");\nvar stream_1 = require(\"stream\");\nvar https_1 = require(\"https\");\nvar Response = require(\"http-response-object\");\nexports.Response = Response;\nvar caseless = require('caseless');\nvar fileCache = new FileCache_1[\"default\"](__dirname + '/cache');\nvar memoryCache = new MemoryCache_1[\"default\"]();\nfunction requestProtocol(protocol, options, callback) {\n    if (protocol === 'http') {\n        return http_1.request(options, callback);\n    }\n    else if (protocol === 'https') {\n        return https_1.request(options, callback);\n    }\n    throw new Error('Unsupported protocol ' + protocol);\n}\nfunction request(method, url, options, callback) {\n    if (typeof options === 'function') {\n        callback = options;\n        options = null;\n    }\n    if (options === null || options === undefined) {\n        options = {};\n    }\n    if (typeof options !== 'object') {\n        throw new TypeError('options must be an object (or null)');\n    }\n    if (typeof callback !== 'function') {\n        throw new TypeError('callback must be a function');\n    }\n    return _request(method, ((url && typeof url === 'object') ? url.href : url), options, callback);\n}\nfunction _request(method, url, options, callback) {\n    var start = Date.now();\n    if (typeof method !== 'string') {\n        throw new TypeError('The method must be a string.');\n    }\n    if (typeof url !== 'string') {\n        throw new TypeError('The URL/path must be a string or a URL object.');\n    }\n    method = method.toUpperCase();\n    var urlObject = url_1.parse(url);\n    var protocol = (urlObject.protocol || '').replace(/\\:$/, '');\n    if (protocol !== 'http' && protocol !== 'https') {\n        throw new TypeError('The protocol \"' + protocol + '\" is not supported, cannot load \"' + url + '\"');\n    }\n    var rawHeaders = options.headers || {};\n    var headers = caseless(rawHeaders);\n    if (urlObject.auth) {\n        headers.set('Authorization', 'Basic ' + (Buffer.from(urlObject.auth)).toString('base64'));\n    }\n    var agent = 'agent' in options ? options.agent : false;\n    var cache = options.cache;\n    if (typeof cache === 'string') {\n        if (cache === 'file') {\n            cache = fileCache;\n        }\n        else if (cache === 'memory') {\n            cache = memoryCache;\n        }\n    }\n    if (cache && !(typeof cache === 'object' && typeof cache.getResponse === 'function' && typeof cache.setResponse === 'function' && typeof cache.invalidateResponse === 'function')) {\n        throw new TypeError(cache + ' is not a valid cache, caches must have `getResponse`, `setResponse` and `invalidateResponse` methods.');\n    }\n    var ignoreFailedInvalidation = options.ignoreFailedInvalidation;\n    if (options.duplex !== undefined && typeof options.duplex !== 'boolean') {\n        throw new Error('expected options.duplex to be a boolean if provided');\n    }\n    var duplex = options.duplex !== undefined ? options.duplex : !(method === 'GET' || method === 'DELETE' || method === 'HEAD');\n    var unsafe = !(method === 'GET' || method === 'OPTIONS' || method === 'HEAD');\n    if (options.gzip) {\n        headers.set('Accept-Encoding', headers.has('Accept-Encoding') ? headers.get('Accept-Encoding') + ',gzip,deflate' : 'gzip,deflate');\n        return _request(method, url, {\n            allowRedirectHeaders: options.allowRedirectHeaders,\n            duplex: duplex,\n            headers: rawHeaders,\n            agent: agent,\n            followRedirects: options.followRedirects,\n            retry: options.retry,\n            retryDelay: options.retryDelay,\n            maxRetries: options.maxRetries,\n            cache: cache,\n            timeout: options.timeout\n        }, function (err, res) {\n            if (err)\n                return callback(err);\n            if (!res)\n                return callback(new Error('Response should not be undefined if there is no error.'));\n            var newHeaders = __assign({}, res.headers);\n            var newBody = res.body;\n            switch (newHeaders['content-encoding']) {\n                case 'gzip':\n                    delete newHeaders['content-encoding'];\n                    newBody = res.body.pipe(zlib_1.createGunzip());\n                    break;\n                case 'deflate':\n                    delete newHeaders['content-encoding'];\n                    newBody = res.body.pipe(zlib_1.createInflate());\n                    break;\n            }\n            return callback(err, new Response(res.statusCode, newHeaders, newBody, res.url));\n        });\n    }\n    if (options.followRedirects) {\n        return _request(method, url, {\n            allowRedirectHeaders: options.allowRedirectHeaders,\n            duplex: duplex,\n            headers: rawHeaders,\n            agent: agent,\n            retry: options.retry,\n            retryDelay: options.retryDelay,\n            maxRetries: options.maxRetries,\n            cache: cache,\n            timeout: options.timeout\n        }, function (err, res) {\n            if (err)\n                return callback(err);\n            if (!res)\n                return callback(new Error('Response should not be undefined if there is no error.'));\n            if (options.followRedirects && isRedirect(res.statusCode)) {\n                // prevent leakage of file handles\n                res.body.resume();\n                if (method === 'DELETE' && res.statusCode === 303) {\n                    // 303 See Other should convert to GET for duplex\n                    // requests and for DELETE\n                    method = 'GET';\n                }\n                if (options.maxRedirects === 0) {\n                    var err_1 = new Error('Maximum number of redirects exceeded');\n                    err_1.res = res;\n                    return callback(err_1, res);\n                }\n                options = __assign({}, options, { duplex: false, maxRedirects: options.maxRedirects && options.maxRedirects !== Infinity ? options.maxRedirects - 1 : options.maxRedirects });\n                // don't maintain headers through redirects\n                // This fixes a problem where a POST to http://example.com\n                // might result in a GET to http://example.co.uk that includes \"content-length\"\n                // as a header\n                var headers_1 = caseless(options.headers);\n                var redirectHeaders = {};\n                if (options.allowRedirectHeaders) {\n                    for (var i = 0; i < options.allowRedirectHeaders.length; i++) {\n                        var headerName = options.allowRedirectHeaders[i];\n                        var headerValue = headers_1.get(headerName);\n                        if (headerValue) {\n                            redirectHeaders[headerName] = headerValue;\n                        }\n                    }\n                }\n                options.headers = redirectHeaders;\n                var location = res.headers.location;\n                if (typeof location !== 'string') {\n                    return callback(new Error('Cannot redirect to non string location: ' + location));\n                }\n                return request(duplex ? 'GET' : method, url_1.resolve(url, location), options, callback);\n            }\n            else {\n                return callback(null, res);\n            }\n        });\n    }\n    if (cache && method === 'GET' && !duplex) {\n        var timestamp_1 = Date.now();\n        return cache.getResponse(url, function (err, cachedResponse) {\n            if (err) {\n                console.warn('Error reading from cache: ' + err.message);\n            }\n            var isMatch = !!(cachedResponse && cacheUtils.isMatch(rawHeaders, cachedResponse));\n            if (cachedResponse && (options.isMatch ? options.isMatch(rawHeaders, cachedResponse, isMatch) : isMatch)) {\n                var isExpired = cacheUtils.isExpired(cachedResponse);\n                if (!(options.isExpired ? options.isExpired(cachedResponse, isExpired) : isExpired)) {\n                    var res = new Response(cachedResponse.statusCode, cachedResponse.headers, cachedResponse.body, url);\n                    res.fromCache = true;\n                    res.fromNotModified = false;\n                    return callback(null, res);\n                }\n                else {\n                    if (cachedResponse.headers['etag']) {\n                        headers.set('If-None-Match', cachedResponse.headers['etag']);\n                    }\n                    if (cachedResponse.headers['last-modified']) {\n                        headers.set('If-Modified-Since', cachedResponse.headers['last-modified']);\n                    }\n                }\n            }\n            request('GET', url, {\n                allowRedirectHeaders: options.allowRedirectHeaders,\n                headers: rawHeaders,\n                retry: options.retry,\n                retryDelay: options.retryDelay,\n                maxRetries: options.maxRetries,\n                agent: agent,\n                timeout: options.timeout\n            }, function (err, res) {\n                if (err)\n                    return callback(err);\n                if (!res)\n                    return callback(new Error('Response should not be undefined if there is no error.'));\n                if (res.statusCode === 304 && cachedResponse) { // Not Modified\n                    // prevent leakage of file handles\n                    res.body.resume();\n                    var resultBody = cachedResponse.body;\n                    var c = cache;\n                    if (c.updateResponseHeaders) {\n                        c.updateResponseHeaders(url, {\n                            headers: res.headers,\n                            requestTimestamp: timestamp_1\n                        });\n                    }\n                    else {\n                        var cachedResponseBody_1 = new stream_1.PassThrough();\n                        var newResultBody_1 = new stream_1.PassThrough();\n                        resultBody.on('data', function (data) {\n                            cachedResponseBody_1.write(data);\n                            newResultBody_1.write(data);\n                        });\n                        resultBody.on('end', function () {\n                            cachedResponseBody_1.end();\n                            newResultBody_1.end();\n                        });\n                        resultBody = newResultBody_1;\n                        cache.setResponse(url, {\n                            statusCode: cachedResponse.statusCode,\n                            headers: res.headers,\n                            body: cachedResponseBody_1,\n                            requestHeaders: cachedResponse.requestHeaders,\n                            requestTimestamp: timestamp_1\n                        });\n                    }\n                    var response = new Response(cachedResponse.statusCode, cachedResponse.headers, resultBody, url);\n                    response.fromCache = true;\n                    response.fromNotModified = true;\n                    return callback(null, response);\n                }\n                // prevent leakage of file handles\n                cachedResponse && cachedResponse.body.resume();\n                var canCache = cacheUtils.canCache(res);\n                if (options.canCache ? options.canCache(res, canCache) : canCache) {\n                    var cachedResponseBody_2 = new stream_1.PassThrough();\n                    var resultResponseBody_1 = new stream_1.PassThrough();\n                    res.body.on('data', function (data) {\n                        cachedResponseBody_2.write(data);\n                        resultResponseBody_1.write(data);\n                    });\n                    res.body.on('end', function () { cachedResponseBody_2.end(); resultResponseBody_1.end(); });\n                    var resultResponse = new Response(res.statusCode, res.headers, resultResponseBody_1, url);\n                    cache.setResponse(url, {\n                        statusCode: res.statusCode,\n                        headers: res.headers,\n                        body: cachedResponseBody_2,\n                        requestHeaders: rawHeaders,\n                        requestTimestamp: timestamp_1\n                    });\n                    return callback(null, resultResponse);\n                }\n                else {\n                    return callback(null, res);\n                }\n            });\n        });\n    }\n    function attempt(n) {\n        return _request(method, url, {\n            allowRedirectHeaders: options.allowRedirectHeaders,\n            headers: rawHeaders,\n            agent: agent,\n            timeout: options.timeout\n        }, function (err, res) {\n            var retry = err || !res || res.statusCode >= 400;\n            if (typeof options.retry === 'function') {\n                retry = options.retry(err, res, n + 1);\n            }\n            if (n >= (options.maxRetries || 5)) {\n                retry = false;\n            }\n            if (retry) {\n                var delay = options.retryDelay;\n                if (typeof delay === 'function') {\n                    delay = delay(err, res, n + 1);\n                }\n                delay = delay || 200;\n                setTimeout(function () {\n                    attempt(n + 1);\n                }, delay);\n            }\n            else {\n                callback(err, res);\n            }\n        });\n    }\n    if (options.retry && method === 'GET' && !duplex) {\n        return attempt(0);\n    }\n    var responded = false;\n    var timeout = null;\n    var req = requestProtocol(protocol, {\n        host: urlObject.hostname,\n        port: urlObject.port == null ? undefined : +urlObject.port,\n        path: urlObject.path,\n        method: method,\n        headers: rawHeaders,\n        agent: agent\n    }, function (res) {\n        var end = Date.now();\n        if (responded)\n            return res.resume();\n        responded = true;\n        if (timeout !== null)\n            clearTimeout(timeout);\n        var result = new Response(res.statusCode || 0, res.headers, res, url);\n        if (cache && unsafe && res.statusCode && res.statusCode < 400) {\n            cache.invalidateResponse(url, function (err) {\n                if (err && !ignoreFailedInvalidation) {\n                    callback(new Error('Error invalidating the cache for' + url + ': ' + err.message), result);\n                }\n                else {\n                    callback(null, result);\n                }\n            });\n        }\n        else {\n            callback(null, result);\n        }\n    }).on('error', function (err) {\n        if (responded)\n            return;\n        responded = true;\n        if (timeout !== null)\n            clearTimeout(timeout);\n        callback(err);\n    });\n    function onTimeout() {\n        if (responded)\n            return;\n        responded = true;\n        if (timeout !== null)\n            clearTimeout(timeout);\n        req.abort();\n        var duration = Date.now() - start;\n        var err = new Error('Request timed out after ' + duration + 'ms');\n        err.timeout = true;\n        err.duration = duration;\n        callback(err);\n    }\n    if (options.socketTimeout) {\n        req.setTimeout(options.socketTimeout, onTimeout);\n    }\n    if (options.timeout) {\n        timeout = setTimeout(onTimeout, options.timeout);\n    }\n    if (duplex) {\n        return req;\n    }\n    else {\n        req.end();\n    }\n    return undefined;\n}\nfunction isRedirect(statusCode) {\n    return statusCode === 301 || statusCode === 302 || statusCode === 303 || statusCode === 307 || statusCode === 308;\n}\nexports[\"default\"] = request;\nmodule.exports = request;\nmodule.exports[\"default\"] = request;\nmodule.exports.Response = Response;\n","\"use strict\";\nexports.__esModule = true;\nvar cache_control_utils_1 = require(\"./cache-control-utils\");\nfunction isMatch(requestHeaders, cachedResponse) {\n    var vary = cachedResponse.headers['vary'];\n    if (vary && cachedResponse.requestHeaders) {\n        vary = '' + vary;\n        return vary.split(',').map(function (header) { return header.trim().toLowerCase(); }).every(function (header) {\n            return requestHeaders[header] === cachedResponse.requestHeaders[header];\n        });\n    }\n    else {\n        return true;\n    }\n}\nexports.isMatch = isMatch;\n;\nfunction isExpired(cachedResponse) {\n    var policy = cache_control_utils_1.cachePolicy(cachedResponse);\n    if (policy) {\n        var time = (Date.now() - cachedResponse.requestTimestamp) / 1000;\n        if (policy.maxage !== null && policy.maxage > time) {\n            return false;\n        }\n    }\n    if (cachedResponse.statusCode === 301 || cachedResponse.statusCode === 308)\n        return false;\n    return true;\n}\nexports.isExpired = isExpired;\n;\nfunction canCache(res) {\n    if (res.headers['etag'])\n        return true;\n    if (res.headers['last-modified'])\n        return true;\n    if (cache_control_utils_1.isCacheable(res))\n        return true;\n    if (res.statusCode === 301 || res.statusCode === 308)\n        return true;\n    return false;\n}\nexports.canCache = canCache;\n;\n","\"use strict\";\nexports.__esModule = true;\nvar parseCacheControl = require('parse-cache-control');\nfunction parseCacheControlHeader(res) {\n    var cacheControl = res.headers['cache-control'];\n    var normalisedCacheControl = typeof cacheControl === 'string' ? cacheControl.trim() : ''; // must be normalised for parsing (e.g. parseCacheControl)\n    if (!cacheControl) {\n        return null;\n    }\n    return parseCacheControl(cacheControl);\n}\n// for the purposes of this library, we err on the side of caution and do not cache anything except public (or implicit public)\nvar nonCaching = ['private', 'no-cache', 'no-store', 'no-transform', 'must-revalidate', 'proxy-revalidate'];\nfunction isCacheControlCacheable(parsedCacheControl) {\n    if (!parsedCacheControl) {\n        return false;\n    }\n    if (parsedCacheControl.public) {\n        return true;\n    }\n    // note that the library does not currently support s-maxage\n    if (parsedCacheControl[\"max-age\"]) {\n        // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3\n        // The max-age directive on a response implies that the response is cacheable (i.e., \"public\") unless some other, more restrictive cache directive is also present.\n        for (var i = 0; i < nonCaching.length; i++) {\n            if (parsedCacheControl[nonCaching[i]]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    return false;\n}\n/**\n * returns true if this response is cacheable (according to cache-control headers)\n */\nfunction isCacheable(res) {\n    return isCacheControlCacheable(parseCacheControlHeader(res));\n}\nexports.isCacheable = isCacheable;\nfunction buildPolicy(parsedCacheControl) {\n    // note that the library does not currently support s-maxage\n    return { maxage: parsedCacheControl['max-age'] || null };\n}\n/**\n * if the response is cacheable, returns an object detailing the maxage of the cache\n * otherwise returns null\n */\nfunction cachePolicy(res) {\n    var parsed = parseCacheControlHeader(res);\n    return parsed && isCacheControlCacheable(parsed) ? buildPolicy(parsed) : null;\n}\nexports.cachePolicy = cachePolicy;\n","module.exports = function parseCacheControl(field) {\n\n  if (typeof field !== 'string') {\n    return null;\n  }\n\n  /*\n    Cache-Control   = 1#cache-directive\n    cache-directive = token [ \"=\" ( token / quoted-string ) ]\n    token           = [^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+\n    quoted-string   = \"(?:[^\"\\\\]|\\\\.)*\"\n  */\n\n  //                             1: directive                                        =   2: token                                              3: quoted-string\n  var regex = /(?:^|(?:\\s*\\,\\s*))([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)(?:\\=(?:([^\\x00-\\x20\\(\\)<>@\\,;\\:\\\\\"\\/\\[\\]\\?\\=\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g;\n\n  var header = {};\n  var err = field.replace(regex, function($0, $1, $2, $3) {\n    var value = $2 || $3;\n    header[$1] = value ? value.toLowerCase() : true;\n    return '';\n  });\n\n  if (header['max-age']) {\n    try {\n      var maxAge = parseInt(header['max-age'], 10);\n      if (isNaN(maxAge)) {\n        return null;\n      }\n\n      header['max-age'] = maxAge;\n    }\n    catch (err) { }\n  }\n\n  return (err ? null : header);\n};\n","'use strict';\nexports.__esModule = true;\nvar fs = require(\"fs\");\nvar path_1 = require(\"path\");\nvar crypto_1 = require(\"crypto\");\nfunction jsonParse(data, cb) {\n    var result = null;\n    try {\n        result = JSON.parse(data);\n    }\n    catch (ex) {\n        return cb(ex);\n    }\n    cb(null, result);\n}\nfunction getCacheKey(url) {\n    var hash = crypto_1.createHash('sha512');\n    hash.update(url);\n    return hash.digest('hex');\n}\nvar FileCache = /** @class */ (function () {\n    function FileCache(location) {\n        this._location = location;\n    }\n    FileCache.prototype.getResponse = function (url, callback) {\n        var key = path_1.resolve(this._location, getCacheKey(url));\n        fs.readFile(key + '.json', 'utf8', function (err, data) {\n            if (err && err.code === 'ENOENT')\n                return callback(null, null);\n            else if (err)\n                return callback(err, null);\n            jsonParse(data, function (err, response) {\n                if (err) {\n                    return callback(err, null);\n                }\n                var body = fs.createReadStream(key + '.body');\n                response.body = body;\n                callback(null, response);\n            });\n        });\n    };\n    FileCache.prototype.setResponse = function (url, response) {\n        var key = path_1.resolve(this._location, getCacheKey(url));\n        var errored = false;\n        fs.mkdir(this._location, function (err) {\n            if (err && err.code !== 'EEXIST') {\n                console.warn('Error creating cache: ' + err.message);\n                return;\n            }\n            response.body.pipe(fs.createWriteStream(key + '.body')).on('error', function (err) {\n                errored = true;\n                console.warn('Error writing to cache: ' + err.message);\n            }).on('close', function () {\n                if (!errored) {\n                    fs.writeFile(key + '.json', JSON.stringify({\n                        statusCode: response.statusCode,\n                        headers: response.headers,\n                        requestHeaders: response.requestHeaders,\n                        requestTimestamp: response.requestTimestamp\n                    }, null, '  '), function (err) {\n                        if (err) {\n                            console.warn('Error writing to cache: ' + err.message);\n                        }\n                    });\n                }\n            });\n        });\n    };\n    FileCache.prototype.updateResponseHeaders = function (url, response) {\n        var key = path_1.resolve(this._location, getCacheKey(url));\n        fs.readFile(key + '.json', 'utf8', function (err, data) {\n            if (err) {\n                console.warn('Error writing to cache: ' + err.message);\n                return;\n            }\n            var parsed = null;\n            try {\n                parsed = JSON.parse(data);\n            }\n            catch (ex) {\n                console.warn('Error writing to cache: ' + ex.message);\n                return;\n            }\n            fs.writeFile(key + '.json', JSON.stringify({\n                statusCode: parsed.statusCode,\n                headers: response.headers,\n                requestHeaders: parsed.requestHeaders,\n                requestTimestamp: response.requestTimestamp\n            }, null, '  '), function (err) {\n                if (err) {\n                    console.warn('Error writing to cache: ' + err.message);\n                }\n            });\n        });\n    };\n    FileCache.prototype.invalidateResponse = function (url, callback) {\n        var key = path_1.resolve(this._location, getCacheKey(url));\n        fs.unlink(key + '.json', function (err) {\n            if (err && err.code === 'ENOENT')\n                return callback(null);\n            else\n                callback(err || null);\n        });\n    };\n    return FileCache;\n}());\nexports[\"default\"] = FileCache;\n","module.exports = require(\"crypto\");","'use strict';\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nexports.__esModule = true;\nvar stream_1 = require(\"stream\");\nvar concat = require(\"concat-stream\");\nvar MemoryCache = /** @class */ (function () {\n    function MemoryCache() {\n        this._cache = {};\n    }\n    MemoryCache.prototype.getResponse = function (url, callback) {\n        var cache = this._cache;\n        if (cache[url]) {\n            var body = new stream_1.PassThrough();\n            body.end(cache[url].body);\n            callback(null, {\n                statusCode: cache[url].statusCode,\n                headers: cache[url].headers,\n                body: body,\n                requestHeaders: cache[url].requestHeaders,\n                requestTimestamp: cache[url].requestTimestamp\n            });\n        }\n        else {\n            callback(null, null);\n        }\n    };\n    MemoryCache.prototype.updateResponseHeaders = function (url, response) {\n        this._cache[url] = __assign({}, this._cache[url], { headers: response.headers, requestTimestamp: response.requestTimestamp });\n    };\n    MemoryCache.prototype.setResponse = function (url, response) {\n        var cache = this._cache;\n        response.body.pipe(concat(function (body) {\n            cache[url] = {\n                statusCode: response.statusCode,\n                headers: response.headers,\n                body: body,\n                requestHeaders: response.requestHeaders,\n                requestTimestamp: response.requestTimestamp\n            };\n        }));\n    };\n    MemoryCache.prototype.invalidateResponse = function (url, callback) {\n        var cache = this._cache;\n        delete cache[url];\n        callback(null);\n    };\n    return MemoryCache;\n}());\nexports[\"default\"] = MemoryCache;\n","module.exports = require(\"zlib\");","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n  if (!(this instanceof FormData)) {\n    return new FormData();\n  }\n\n  this._overheadLength = 0;\n  this._valueLength = 0;\n  this._valuesToMeasure = [];\n\n  CombinedStream.call(this);\n\n  options = options || {};\n  for (var option in options) {\n    this[option] = options[option];\n  }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n  options = options || {};\n\n  // allow filename as single option\n  if (typeof options == 'string') {\n    options = {filename: options};\n  }\n\n  var append = CombinedStream.prototype.append.bind(this);\n\n  // all that streamy business can't handle numbers\n  if (typeof value == 'number') {\n    value = '' + value;\n  }\n\n  // https://github.com/felixge/node-form-data/issues/38\n  if (util.isArray(value)) {\n    // Please convert your array into string\n    // the way web server expects it\n    this._error(new Error('Arrays are not supported.'));\n    return;\n  }\n\n  var header = this._multiPartHeader(field, value, options);\n  var footer = this._multiPartFooter();\n\n  append(header);\n  append(value);\n  append(footer);\n\n  // pass along options.knownLength\n  this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n  var valueLength = 0;\n\n  // used w/ getLengthSync(), when length is known.\n  // e.g. for streaming directly from a remote server,\n  // w/ a known file a size, and not wanting to wait for\n  // incoming file to finish to get its size.\n  if (options.knownLength != null) {\n    valueLength += +options.knownLength;\n  } else if (Buffer.isBuffer(value)) {\n    valueLength = value.length;\n  } else if (typeof value === 'string') {\n    valueLength = Buffer.byteLength(value);\n  }\n\n  this._valueLength += valueLength;\n\n  // @check why add CRLF? does this account for custom/multiple CRLFs?\n  this._overheadLength +=\n    Buffer.byteLength(header) +\n    FormData.LINE_BREAK.length;\n\n  // empty or either doesn't have path or not an http response\n  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {\n    return;\n  }\n\n  // no need to bother with the length\n  if (!options.knownLength) {\n    this._valuesToMeasure.push(value);\n  }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n  if (value.hasOwnProperty('fd')) {\n\n    // take read range into a account\n    // `end` = Infinity –> read file till the end\n    //\n    // TODO: Looks like there is bug in Node fs.createReadStream\n    // it doesn't respect `end` options without `start` options\n    // Fix it when node fixes it.\n    // https://github.com/joyent/node/issues/7819\n    if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n      // when end specified\n      // no need to calculate range\n      // inclusive, starts with 0\n      callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n    // not that fast snoopy\n    } else {\n      // still need to fetch file size from fs\n      fs.stat(value.path, function(err, stat) {\n\n        var fileSize;\n\n        if (err) {\n          callback(err);\n          return;\n        }\n\n        // update final size based on the range options\n        fileSize = stat.size - (value.start ? value.start : 0);\n        callback(null, fileSize);\n      });\n    }\n\n  // or http response\n  } else if (value.hasOwnProperty('httpVersion')) {\n    callback(null, +value.headers['content-length']);\n\n  // or request stream http://github.com/mikeal/request\n  } else if (value.hasOwnProperty('httpModule')) {\n    // wait till response come back\n    value.on('response', function(response) {\n      value.pause();\n      callback(null, +response.headers['content-length']);\n    });\n    value.resume();\n\n  // something else\n  } else {\n    callback('Unknown stream');\n  }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n  // custom header specified (as string)?\n  // it becomes responsible for boundary\n  // (e.g. to handle extra CRLFs on .NET servers)\n  if (typeof options.header == 'string') {\n    return options.header;\n  }\n\n  var contentDisposition = this._getContentDisposition(value, options);\n  var contentType = this._getContentType(value, options);\n\n  var contents = '';\n  var headers  = {\n    // add custom disposition as third element or keep it two elements if not\n    'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n    // if no content type. allow it to be empty array\n    'Content-Type': [].concat(contentType || [])\n  };\n\n  // allow custom headers.\n  if (typeof options.header == 'object') {\n    populate(headers, options.header);\n  }\n\n  var header;\n  for (var prop in headers) {\n    if (!headers.hasOwnProperty(prop)) continue;\n    header = headers[prop];\n\n    // skip nullish headers.\n    if (header == null) {\n      continue;\n    }\n\n    // convert all headers to arrays.\n    if (!Array.isArray(header)) {\n      header = [header];\n    }\n\n    // add non-empty headers.\n    if (header.length) {\n      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n    }\n  }\n\n  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n  var filename\n    , contentDisposition\n    ;\n\n  if (typeof options.filepath === 'string') {\n    // custom filepath for relative paths\n    filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n  } else if (options.filename || value.name || value.path) {\n    // custom filename take precedence\n    // formidable and the browser add a name property\n    // fs- and request- streams have path property\n    filename = path.basename(options.filename || value.name || value.path);\n  } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n    // or try http response\n    filename = path.basename(value.client._httpMessage.path);\n  }\n\n  if (filename) {\n    contentDisposition = 'filename=\"' + filename + '\"';\n  }\n\n  return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n  // use custom content-type above all\n  var contentType = options.contentType;\n\n  // or try `name` from formidable, browser\n  if (!contentType && value.name) {\n    contentType = mime.lookup(value.name);\n  }\n\n  // or try `path` from fs-, request- streams\n  if (!contentType && value.path) {\n    contentType = mime.lookup(value.path);\n  }\n\n  // or if it's http-reponse\n  if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n    contentType = value.headers['content-type'];\n  }\n\n  // or guess it from the filepath or filename\n  if (!contentType && (options.filepath || options.filename)) {\n    contentType = mime.lookup(options.filepath || options.filename);\n  }\n\n  // fallback to the default content type if `value` is not simple value\n  if (!contentType && typeof value == 'object') {\n    contentType = FormData.DEFAULT_CONTENT_TYPE;\n  }\n\n  return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n  return function(next) {\n    var footer = FormData.LINE_BREAK;\n\n    var lastPart = (this._streams.length === 0);\n    if (lastPart) {\n      footer += this._lastBoundary();\n    }\n\n    next(footer);\n  }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n  var header;\n  var formHeaders = {\n    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n  };\n\n  for (header in userHeaders) {\n    if (userHeaders.hasOwnProperty(header)) {\n      formHeaders[header.toLowerCase()] = userHeaders[header];\n    }\n  }\n\n  return formHeaders;\n};\n\nFormData.prototype.getBoundary = function() {\n  if (!this._boundary) {\n    this._generateBoundary();\n  }\n\n  return this._boundary;\n};\n\nFormData.prototype._generateBoundary = function() {\n  // This generates a 50 character boundary similar to those used by Firefox.\n  // They are optimized for boyer-moore parsing.\n  var boundary = '--------------------------';\n  for (var i = 0; i < 24; i++) {\n    boundary += Math.floor(Math.random() * 10).toString(16);\n  }\n\n  this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n  // so it basically checks if there is any value added to the form\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  // https://github.com/form-data/form-data/issues/40\n  if (!this.hasKnownLength()) {\n    // Some async length retrievers are present\n    // therefore synchronous length calculation is false.\n    // Please use getLength(callback) to get proper length\n    this._error(new Error('Cannot calculate proper length in synchronous way.'));\n  }\n\n  return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n  var hasKnownLength = true;\n\n  if (this._valuesToMeasure.length) {\n    hasKnownLength = false;\n  }\n\n  return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n  var knownLength = this._overheadLength + this._valueLength;\n\n  if (this._streams.length) {\n    knownLength += this._lastBoundary().length;\n  }\n\n  if (!this._valuesToMeasure.length) {\n    process.nextTick(cb.bind(this, null, knownLength));\n    return;\n  }\n\n  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n    if (err) {\n      cb(err);\n      return;\n    }\n\n    values.forEach(function(length) {\n      knownLength += length;\n    });\n\n    cb(null, knownLength);\n  });\n};\n\nFormData.prototype.submit = function(params, cb) {\n  var request\n    , options\n    , defaults = {method: 'post'}\n    ;\n\n  // parse provided url if it's string\n  // or treat it as options object\n  if (typeof params == 'string') {\n\n    params = parseUrl(params);\n    options = populate({\n      port: params.port,\n      path: params.pathname,\n      host: params.hostname,\n      protocol: params.protocol\n    }, defaults);\n\n  // use custom params\n  } else {\n\n    options = populate(params, defaults);\n    // if no port provided use default one\n    if (!options.port) {\n      options.port = options.protocol == 'https:' ? 443 : 80;\n    }\n  }\n\n  // put that good code in getHeaders to some use\n  options.headers = this.getHeaders(params.headers);\n\n  // https if specified, fallback to http in any other case\n  if (options.protocol == 'https:') {\n    request = https.request(options);\n  } else {\n    request = http.request(options);\n  }\n\n  // get content length and fire away\n  this.getLength(function(err, length) {\n    if (err) {\n      this._error(err);\n      return;\n    }\n\n    // add content length\n    request.setHeader('Content-Length', length);\n\n    this.pipe(request);\n    if (cb) {\n      request.on('error', cb);\n      request.on('response', cb.bind(this, null));\n    }\n  }.bind(this));\n\n  return request;\n};\n\nFormData.prototype._error = function(err) {\n  if (!this.error) {\n    this.error = err;\n    this.pause();\n    this.emit('error', err);\n  }\n};\n\nFormData.prototype.toString = function () {\n  return '[object FormData]';\n};\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n  this.writable = false;\n  this.readable = true;\n  this.dataSize = 0;\n  this.maxDataSize = 2 * 1024 * 1024;\n  this.pauseStreams = true;\n\n  this._released = false;\n  this._streams = [];\n  this._currentStream = null;\n  this._insideLoop = false;\n  this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n  var combinedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    combinedStream[option] = options[option];\n  }\n\n  return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n  return (typeof stream !== 'function')\n    && (typeof stream !== 'string')\n    && (typeof stream !== 'boolean')\n    && (typeof stream !== 'number')\n    && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n\n  if (isStreamLike) {\n    if (!(stream instanceof DelayedStream)) {\n      var newStream = DelayedStream.create(stream, {\n        maxDataSize: Infinity,\n        pauseStream: this.pauseStreams,\n      });\n      stream.on('data', this._checkDataSize.bind(this));\n      stream = newStream;\n    }\n\n    this._handleErrors(stream);\n\n    if (this.pauseStreams) {\n      stream.pause();\n    }\n  }\n\n  this._streams.push(stream);\n  return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n  Stream.prototype.pipe.call(this, dest, options);\n  this.resume();\n  return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n  this._currentStream = null;\n\n  if (this._insideLoop) {\n    this._pendingNext = true;\n    return; // defer call\n  }\n\n  this._insideLoop = true;\n  try {\n    do {\n      this._pendingNext = false;\n      this._realGetNext();\n    } while (this._pendingNext);\n  } finally {\n    this._insideLoop = false;\n  }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n  var stream = this._streams.shift();\n\n\n  if (typeof stream == 'undefined') {\n    this.end();\n    return;\n  }\n\n  if (typeof stream !== 'function') {\n    this._pipeNext(stream);\n    return;\n  }\n\n  var getStream = stream;\n  getStream(function(stream) {\n    var isStreamLike = CombinedStream.isStreamLike(stream);\n    if (isStreamLike) {\n      stream.on('data', this._checkDataSize.bind(this));\n      this._handleErrors(stream);\n    }\n\n    this._pipeNext(stream);\n  }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n  this._currentStream = stream;\n\n  var isStreamLike = CombinedStream.isStreamLike(stream);\n  if (isStreamLike) {\n    stream.on('end', this._getNext.bind(this));\n    stream.pipe(this, {end: false});\n    return;\n  }\n\n  var value = stream;\n  this.write(value);\n  this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n  var self = this;\n  stream.on('error', function(err) {\n    self._emitError(err);\n  });\n};\n\nCombinedStream.prototype.write = function(data) {\n  this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n  if (!this.pauseStreams) {\n    return;\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n  this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n  if (!this._released) {\n    this._released = true;\n    this.writable = true;\n    this._getNext();\n  }\n\n  if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n  this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n  this._reset();\n  this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n  this._reset();\n  this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n  this.writable = false;\n  this._streams = [];\n  this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n  this._updateDataSize();\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n  this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n  this.dataSize = 0;\n\n  var self = this;\n  this._streams.forEach(function(stream) {\n    if (!stream.dataSize) {\n      return;\n    }\n\n    self.dataSize += stream.dataSize;\n  });\n\n  if (this._currentStream && this._currentStream.dataSize) {\n    this.dataSize += this._currentStream.dataSize;\n  }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n  this._reset();\n  this.emit('error', err);\n};\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n  this.source = null;\n  this.dataSize = 0;\n  this.maxDataSize = 1024 * 1024;\n  this.pauseStream = true;\n\n  this._maxDataSizeExceeded = false;\n  this._released = false;\n  this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n  var delayedStream = new this();\n\n  options = options || {};\n  for (var option in options) {\n    delayedStream[option] = options[option];\n  }\n\n  delayedStream.source = source;\n\n  var realEmit = source.emit;\n  source.emit = function() {\n    delayedStream._handleEmit(arguments);\n    return realEmit.apply(source, arguments);\n  };\n\n  source.on('error', function() {});\n  if (delayedStream.pauseStream) {\n    source.pause();\n  }\n\n  return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n  configurable: true,\n  enumerable: true,\n  get: function() {\n    return this.source.readable;\n  }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n  return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n  if (!this._released) {\n    this.release();\n  }\n\n  this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n  this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n  this._released = true;\n\n  this._bufferedEvents.forEach(function(args) {\n    this.emit.apply(this, args);\n  }.bind(this));\n  this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n  var r = Stream.prototype.pipe.apply(this, arguments);\n  this.resume();\n  return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n  if (this._released) {\n    this.emit.apply(this, args);\n    return;\n  }\n\n  if (args[0] === 'data') {\n    this.dataSize += args[1].length;\n    this._checkIfMaxDataSizeExceeded();\n  }\n\n  this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n  if (this._maxDataSizeExceeded) {\n    return;\n  }\n\n  if (this.dataSize <= this.maxDataSize) {\n    return;\n  }\n\n  this._maxDataSizeExceeded = true;\n  var message =\n    'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n  this.emit('error', new Error(message));\n};\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n  var mime = match && db[match[1].toLowerCase()]\n\n  if (mime && mime.charset) {\n    return mime.charset\n  }\n\n  // default text/* to utf-8\n  if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n    return 'UTF-8'\n  }\n\n  return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n  // TODO: should this even be in this module?\n  if (!str || typeof str !== 'string') {\n    return false\n  }\n\n  var mime = str.indexOf('/') === -1\n    ? exports.lookup(str)\n    : str\n\n  if (!mime) {\n    return false\n  }\n\n  // TODO: use content-type or other module\n  if (mime.indexOf('charset') === -1) {\n    var charset = exports.charset(mime)\n    if (charset) mime += '; charset=' + charset.toLowerCase()\n  }\n\n  return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n  if (!type || typeof type !== 'string') {\n    return false\n  }\n\n  // TODO: use media-typer\n  var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n  // get extensions\n  var exts = match && exports.extensions[match[1].toLowerCase()]\n\n  if (!exts || !exts.length) {\n    return false\n  }\n\n  return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n  if (!path || typeof path !== 'string') {\n    return false\n  }\n\n  // get the extension (\"ext\" or \".ext\" or full path)\n  var extension = extname('x.' + path)\n    .toLowerCase()\n    .substr(1)\n\n  if (!extension) {\n    return false\n  }\n\n  return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n  // source preference (least -> most)\n  var preference = ['nginx', 'apache', undefined, 'iana']\n\n  Object.keys(db).forEach(function forEachMimeType (type) {\n    var mime = db[type]\n    var exts = mime.extensions\n\n    if (!exts || !exts.length) {\n      return\n    }\n\n    // mime -> extensions\n    extensions[type] = exts\n\n    // extension -> mime\n    for (var i = 0; i < exts.length; i++) {\n      var extension = exts[i]\n\n      if (types[extension]) {\n        var from = preference.indexOf(db[types[extension]].source)\n        var to = preference.indexOf(mime.source)\n\n        if (types[extension] !== 'application/octet-stream' &&\n          (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n          // skip the remapping\n          continue\n        }\n      }\n\n      // set the extension -> mime\n      types[extension] = type\n    }\n  })\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","module.exports =\n{\n  parallel      : require('./parallel.js'),\n  serial        : require('./serial.js'),\n  serialOrdered : require('./serialOrdered.js')\n};\n","var iterate    = require('./lib/iterate.js')\n  , initState  = require('./lib/state.js')\n  , terminator = require('./lib/terminator.js')\n  ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n  var state = initState(list);\n\n  while (state.index < (state['keyedList'] || list).length)\n  {\n    iterate(list, iterator, state, function(error, result)\n    {\n      if (error)\n      {\n        callback(error, result);\n        return;\n      }\n\n      // looks like it's the last one\n      if (Object.keys(state.jobs).length === 0)\n      {\n        callback(null, state.results);\n        return;\n      }\n    });\n\n    state.index++;\n  }\n\n  return terminator.bind(state, callback);\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n  var nextTick = typeof setImmediate == 'function'\n    ? setImmediate\n    : (\n      typeof process == 'object' && typeof process.nextTick == 'function'\n      ? process.nextTick\n      : null\n    );\n\n  if (nextTick)\n  {\n    nextTick(fn);\n  }\n  else\n  {\n    setTimeout(fn, 0);\n  }\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param   {array|object} list - array or object (named list) to iterate over\n * @param   {function} iterator - iterator to run\n * @param   {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n  return serialOrdered(list, iterator, null, callback);\n}\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n  Object.keys(src).forEach(function(prop)\n  {\n    dst[prop] = dst[prop] || src[prop];\n  });\n\n  return dst;\n};\n","import { MarcoOptions, MacroDefinition } from \"./types\";\nimport { bundleImports } from \"./reader\";\nimport { match } from \"./utils\";\n\nexport function extractMacros(src: string, options: MarcoOptions) {\n  const { lib, lang, importOptions } = options;\n\n  function getImports(): string[] {\n    var imports = [];\n    var qlvl = 0;\n    for (var i = 0; i < src.length; i++) {\n      if (src[i] == \"「\") {\n        qlvl++;\n      } else if (src[i] == \"」\") {\n        qlvl--;\n      } else if (src[i] == \"『\") {\n        qlvl += 2;\n      } else if (src[i] == \"』\") {\n        qlvl -= 2;\n      }\n      if (qlvl != 0) {\n        continue;\n      }\n      if (match(src, i, \"吾嘗觀\")) {\n        var imp = src\n          .slice(i + 3)\n          .split(\"之書\")[0]\n          .split(\"中\")\n          .map(x => x.replace(/[「」『』]/g, \"\"))\n          .join(\"/\");\n        imports.push(imp);\n      }\n    }\n    return imports;\n  }\n  function getMacros() {\n    var macros: MacroDefinition[] = [];\n    var qlvl = 0;\n    for (var i = 0; i < src.length; i++) {\n      if (src[i] == \"「\") {\n        qlvl++;\n      } else if (src[i] == \"」\") {\n        qlvl--;\n      } else if (src[i] == \"『\") {\n        qlvl += 2;\n      } else if (src[i] == \"』\") {\n        qlvl -= 2;\n      }\n      if (qlvl != 0) {\n        continue;\n      }\n      if (src[i] == \"或\" && src[i + 1] == \"云\") {\n        const grabLit = () => {\n          var lvl = 0;\n          var s = \"\";\n          while (true) {\n            if (src[j] == \"「\") {\n              lvl++;\n            } else if (src[j] == \"」\") {\n              lvl--;\n            } else if (src[j] == \"『\") {\n              lvl += 2;\n            } else if (src[j] == \"』\") {\n              lvl -= 2;\n            }\n            s += src[j];\n            j++;\n            if (lvl == 0) {\n              break;\n            }\n            if (j >= src.length) {\n              return s;\n            }\n          }\n          return s;\n        };\n        var j = i + 2;\n        var s0 = grabLit();\n        while (!(src[j] == \"蓋\" && src[j + 1] == \"謂\")) {\n          j++;\n          if (j >= src.length) {\n            return macros;\n          }\n        }\n        j += 2;\n        var s1 = grabLit();\n\n        const stripQuotes = s => {\n          if (s[0] == \"「\") {\n            s = s.slice(2);\n          } else {\n            s = s.slice(1);\n          }\n          if (s[s.length - 1] == \"」\") {\n            s = s.slice(0, -2);\n          } else {\n            s = s.slice(0, -1);\n          }\n          return s;\n        };\n        s0 = stripQuotes(s0);\n        s1 = stripQuotes(s1);\n        var ins = s0.match(/「[甲乙丙丁戊己庚辛壬癸]」/g);\n        var ous = s1.match(/「[甲乙丙丁戊己庚辛壬癸]」/g);\n\n        if (ins !== null && ous !== null) {\n          for (var k = 0; k < ous.length; k++) {\n            var ii = ins.indexOf(ous[k]);\n            if (ii >= 0) {\n              s1 = s1.replace(new RegExp(ous[k], \"g\"), `\\$${ii + 1}`);\n            }\n          }\n        }\n        s0 = s0.replace(/「[甲乙丙丁戊己庚辛壬癸]」/g, \"(.+?)\");\n        macros.push([s0, s1]);\n        i = j;\n      }\n    }\n    return macros;\n  }\n  const imports = getImports();\n  const macros = getMacros();\n\n  bundleImports(imports, { lib, lang }, importOptions).forEach(\n    ({ src, entry }) => {\n      const moduleMacros = extractMacros(src, {\n        ...options,\n        importOptions: {\n          ...importOptions,\n          entryFilepath: entry\n        }\n      });\n      macros.push(...moduleMacros);\n    }\n  );\n\n  return macros;\n}\n\nfunction calcBracketStarts(src: string) {\n  const starts: number[] = [];\n  let level = 0;\n  for (var i = 0; i < src.length; i++) {\n    let c = src[i];\n    if (c == \"「\") {\n      level++;\n    } else if (c == \"」\") {\n      level--;\n    } else if (c == \"『\") {\n      level += 2;\n    } else if (c == \"』\") {\n      level -= 2;\n    }\n    if (level > 0) starts.push(i);\n  }\n  return starts;\n}\n\nexport function expandMacros(src: string, macros: MacroDefinition[]) {\n  for (const [from, to] of macros) {\n    let re = new RegExp(from);\n    const expand = ntxt => {\n      let starts = calcBracketStarts(ntxt);\n      let idx = ntxt.search(re);\n      if (idx == -1) {\n        return ntxt;\n      }\n      if (starts.includes(idx)) {\n        // console.log(\"refused to expand macro inside string\")\n        let nxtend = idx + 1;\n        while (starts.includes(nxtend) && nxtend < starts.length) {\n          nxtend++;\n        }\n        nxtend++;\n        ntxt = ntxt.slice(0, nxtend) + expand(ntxt.slice(nxtend));\n      } else {\n        ntxt = expand(ntxt.replace(re, to));\n      }\n      return ntxt;\n    };\n    src = expand(src);\n  }\n  return src;\n}\n","const { version }: { version: string } = require(\"../package.json\");\n\nexport { version };\n","import { TokenType } from \"./types\";\n\nexport const NUMBER_KEYWORDS = Array.from(\n  \"負·又零〇一二三四五六七八九十百千萬億兆京垓秭穰溝澗正載極分釐毫絲忽微纖沙塵埃渺漠\"\n);\n\nexport const KEYWORDS_DEFINE: Record<\n  string,\n  [TokenType, string | undefined]\n> = {\n  吾有: [\"decl\", \"uninit\"],\n  今有: [\"decl\", \"public\"],\n  物之: [\"decl\", \"prop\"],\n  有: [\"decl\", \"init\"],\n  數: [\"type\", \"num\"],\n  列: [\"type\", \"arr\"],\n  言: [\"type\", \"str\"],\n  術: [\"type\", \"fun\"],\n  爻: [\"type\", \"bol\"],\n  物: [\"type\", \"obj\"],\n  元: [\"type\", \"any\"],\n  書之: [\"print\", undefined],\n  名之曰: [\"name\", undefined],\n  施: [\"call\", \"r\"],\n  以施: [\"call\", \"l\"],\n  曰: [\"assgn\", undefined],\n  噫: [\"discard\", undefined],\n  取: [\"take\", undefined],\n\n  昔之: [\"rassgn\", \"a\"],\n  今: [\"rassgn\", \"b\"],\n  是矣: [\"rassgn\", \"c\"],\n  不復存矣: [\"rassgn\", \"delete\"],\n  其: [\"ans\", undefined],\n\n  乃得: [\"ctrl\", \"ret\"],\n  乃得矣: [\"ctrl\", \"retprev\"],\n  乃歸空無: [\"ctrl\", \"retvoid\"],\n  是謂: [\"ctrl\", \"bigend\"],\n  之術也: [\"ctrl\", \"funend\"],\n  必先得: [\"ctrl\", \"funarg\"],\n  是術曰: [\"ctrl\", \"funbody\"],\n  乃行是術曰: [\"ctrl\", \"funbody\"],\n  欲行是術: [\"ctrl\", \"funstart\"],\n  也: [\"ctrl\", \"end\"],\n  云云: [\"ctrl\", \"end\"],\n  凡: [\"ctrl\", \"for\"],\n  中之: [\"ctrl\", \"forin\"],\n  恆為是: [\"ctrl\", \"whiletrue\"],\n  為是: [\"ctrl\", \"whilen0\"],\n  遍: [\"ctrl\", \"whilen1\"],\n  乃止: [\"ctrl\", \"break\"],\n  乃止是遍: [\"ctrl\", \"continue\"],\n\n  若非: [\"ctrl\", \"else\"],\n  若: [\"ctrl\", \"if\"],\n  者: [\"ctrl\", \"conj\"],\n  若其然者: [\"ctrl\", \"iftrue\"],\n  若其不然者: [\"ctrl\", \"iffalse\"],\n  或若: [\"ctrl\", \"elseif\"],\n\n  其物如是: [\"ctrl\", \"objbody\"],\n  之物也: [\"ctrl\", \"objend\"],\n\n  夫: [\"expr\", undefined],\n\n  等於: [\"cmp\", \"==\"],\n  不等於: [\"cmp\", \"!=\"],\n  不大於: [\"cmp\", \"<=\"],\n  不小於: [\"cmp\", \">=\"],\n  大於: [\"cmp\", \">\"],\n  小於: [\"cmp\", \"<\"],\n\n  加: [\"op\", \"+\"],\n  減: [\"op\", \"-\"],\n  乘: [\"op\", \"*\"],\n  除: [\"op\", \"/\"],\n  中有陽乎: [\"lop\", \"||\"],\n  中無陰乎: [\"lop\", \"&&\"],\n  變: [\"not\", undefined],\n  所餘幾何: [\"mod\", undefined],\n\n  以: [\"opord\", \"l\"],\n  於: [\"opord\", \"r\"],\n\n  之長: [\"ctnr\", \"len\"],\n  之: [\"ctnr\", \"subs\"],\n  充: [\"ctnr\", \"push\"],\n  銜: [\"ctnr\", \"cat\"],\n  其餘: [\"ctnr\", \"rest\"],\n\n  陰: [\"bool\", \"false\"],\n  陽: [\"bool\", \"true\"],\n\n  吾嘗觀: [\"import\", \"file\"],\n  中: [\"import\", \"in\"],\n  之書: [\"import\", \"fileend\"],\n  方悟: [\"import\", \"iden\"],\n  之義: [\"import\", \"idenend\"],\n\n  嗚呼: [\"throw\", \"a\"],\n  之禍: [\"throw\", \"b\"],\n  姑妄行此: [\"try\", \"try\"],\n  如事不諧: [\"try\", \"catch\"],\n  豈: [\"try\", \"catcherr0\"],\n  之禍歟: [\"try\", \"catcherr1\"],\n  不知何禍歟: [\"try\", \"catchall\"],\n  乃作罷: [\"try\", \"end\"],\n\n  或云: [\"macro\", \"from\"],\n  蓋謂: [\"macro\", \"to\"],\n\n  注曰: [\"comment\", undefined],\n  疏曰: [\"comment\", undefined],\n  批曰: [\"comment\", undefined]\n};\n\nvar ke = Object.entries(KEYWORDS_DEFINE);\nke.sort((a, b) => b[0].length - a[0].length);\nif (!Object.fromEntries) {\n  Object.fromEntries = l => {\n    var o = {};\n    l.map(x => (o[x[0]] = x[1]));\n    return o;\n  };\n}\n\nexport const KEYWORDS = Object.fromEntries(ke);\n","import { StandardLibraryObject } from \"./types\";\n\nfunction loadStdlib() {\n  const STDLIB = {};\n\n  try {\n    const raw = require.context(\"../lib\", true, /.*\\.wy$/);\n\n    raw.keys().forEach(key => {\n      const parts = key.slice(2, -3).split(\"/\");\n      const data = raw(key).default;\n      let sublib = STDLIB;\n      for (const part of parts.slice(0, -1)) {\n        if (!sublib[part]) sublib[part] = {};\n        sublib = sublib[part];\n      }\n      sublib[parts[parts.length - 1]] = data;\n    });\n  } catch (e) {} // ignore \"require.context\" error for testing\n\n  return STDLIB as StandardLibraryObject;\n}\n\nexport const STDLIB = loadStdlib();\n","var map = {\n\t\"./js/位經.wy\": 100,\n\t\"./js/天地經.wy\": 101,\n\t\"./js/格物.wy\": 102,\n\t\"./js/畫譜.wy\": 103,\n\t\"./js/西曆法.wy\": 104,\n\t\"./py/位經.wy\": 105,\n\t\"./py/天地經.wy\": 106,\n\t\"./py/西曆法.wy\": 107,\n\t\"./rb/天地經.wy\": 108,\n\t\"./列經.wy\": 109,\n\t\"./易經.wy\": 110,\n\t\"./曆法.wy\": 111,\n\t\"./曆表.wy\": 112,\n\t\"./渾沌經.wy\": 113,\n\t\"./算經.wy\": 114,\n\t\"./籌經.wy\": 115\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 99;","export default \"疏曰「「左移。同犀之x<<y也。」」\\n今有一術。名之曰「左移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x<<y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「左移」之術也。\\n\\n疏曰「「右移。同犀之x>>y也。」」\\n今有一術。名之曰「右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「右移」之術也。\\n\\n疏曰「「補零右移。同犀之x>>>y也。」」\\n今有一術。名之曰「補零右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x>>>y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「補零右移」之術也。\\n\\n疏曰「「位與。同犀之x&y也。」」\\n今有一術。名之曰「位與」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x&y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「位与」之術也。\\n\\n疏曰「「位或。同犀之x|y也。」」\\n今有一術。名之曰「位或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x|y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「位或」之術也。\\n\\n疏曰「「異或。同犀之x^y也。」」\\n今有一術。名之曰「異或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(x^y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「异或」之術也。\\n\\n疏曰「「與非。同犀之~(x&y)也。」」\\n今有一術。名之曰「與非」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(x=>y=>(~(x&y)))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「与非」之術也。\\n\\n疏曰「「位變。同犀之~x也。」」\\n今有一術。名之曰「位變」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「(x=>(~x))」於「甲」。名之曰「乙」。乃得「乙」。\\n是謂「位變」之術也。\\n\";","export default \"今有一言。曰「「犀」」。名之曰「境」。\\n\\n注曰「「鑒。同Javascript之eval也。」」\\n今有一術。名之曰「鑒」。欲行是術。必先得一言。曰「言」。乃行是術曰。\\n\\t施「eval」於「言」。乃得矣。\\n是謂「鑒」之術也。\";","export default \"\\n今有一術。名之曰「取物」。欲行是術。必先得一物曰「物」。一言曰「端」。乃行是術曰。\\n\\t施「(obj=>x=>obj[x])」於「物」於「端」。乃得矣。\\n是謂「取物」之術也。\\n\\n今有一術。名之曰「置物」。欲行是術。必先得一物曰「物」。一言曰「端」。一元曰「實」。乃行是術曰。\\n\\t施「(obj=>x=>v=>{obj[x]=v})」於「物」於「端」於「實」。\\n是謂「置物」之術也。\\n\\n今有一術。名之曰「列物之端」。欲行是術。必先得一物曰「物」。乃行是術曰。\\n\\t施「Object.keys」於「物」乃得矣。\\n是謂「列物之端」之術也。\\n\\n今有一術。名之曰「識類」。欲行是術。必先得一元曰「元」。乃行是術曰。\\n\\t施「(x=>((x instanceof Array)?\\\"列\\\":({\\\"number\\\":\\\"數\\\",\\\"boolean\\\":\\\"爻\\\",\\\"string\\\":\\\"言\\\",\\\"function\\\":\\\"術\\\",\\\"object\\\":\\\"物\\\"}[(typeof x)])))」於「元」乃得矣。\\n是謂「識類」之術也。\\n\";","export default \"吾有一列。名之曰「色表」。充「色表」\\n以「「黑」」。\\t以「「#000000」」。\\n以「「鈦白」」。\\t以「「#ffffff」」。\\n以「「藤黃」」。\\t以「「#faea56」」。\\n以「「硃磦」」。\\t以「「#d44906」」。\\n以「「硃砂」」。\\t以「「#c0927b」」。\\n以「「胭脂」」。\\t以「「#491817」」。\\n以「「曙紅」」。\\t以「「#c72c35」」。\\n以「「赭石」」。\\t以「「#522d14」」。\\n以「「大紅」」。\\t以「「#b91c1b」」。\\n以「「花青」」。\\t以「「#141931」」。\\n以「「三綠」」。\\t以「「#afceb5」」。\\n以「「酞青藍」」。\\t以「「#1e2867」」。\\n以「「三青」」。\\t以「「#acc8d4」」。\\n\\n\\n今有一術。名之曰「備紙」。欲行是術。必先得二數。曰「寬」。曰「高」。乃行是術曰。\\n\\t施「document.createElement」於「「canvas」」。名之曰「canv」。\\n\\t施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t昔之「canv」之「「width」」者。今「寬」是矣。\\n\\t昔之「canv」之「「height」」者。今「高」是矣。\\n\\t昔之「ctx.lineJoin」者。今「「round」」是矣。\\n\\t昔之「ctx.lineCap」者。今「「round」」是矣。\\n\\t乃得「canv」。\\n是謂「備紙」之術也。\\n\\n今有一術。名之曰「裱畫」。欲行是術。必先得一物。曰「紙」。一言。曰「壁」。乃行是術曰。\\n\\t施「document.getElementById」於「壁」。名之曰「div」。\\n\\t施「div.appendChild」於「紙」。\\n是謂「裱畫」之術也。\\n\\n\\n今有一術。名之曰「落筆」。欲行是術。必先得一物。曰「紙」。二數。曰「東」曰「南」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t施「ctx.beginPath」。\\n\\t施「(x=>y=>ctx.moveTo(x,y))」於「東」於「南」。\\n是謂「落筆」之術也。\\n\\n今有一術。名之曰「運筆」。欲行是術。必先得一物。曰「紙」。二數。曰「東」曰「南」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t施「(x=>y=>ctx.lineTo(x,y))」於「東」於「南」。\\n是謂「運筆」之術也。\\n\\n吾有一術。名之曰「取十六進制色」。欲行是術。必先得一言。曰「色」。乃行是術曰。\\n\\t有數一。名之曰「戊」。恆為是。若「戊」大於「色表」之長者乃止也。\\n\\t\\t若「色表」之「戊」等於「色」者。\\n\\t\\t\\t加「戊」以一。名之曰「色數」。\\n\\t\\t\\t夫「色表」之「色數」。乃得矣。\\n\\t\\t\\t乃止。\\n\\t\\t云云。\\n\\t加二以「戊」。昔之「戊」者。今其是矣。云云。\\n是謂「取十六進制色」之術也。\\n\\n今有一術。名之曰「蘸色」。欲行是術。必先得一物。曰「紙」。一言。曰「色」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t昔之「ctx.globalAlpha」者。今一是矣。\\n\\t\\n\\t施「取十六進制色」於「色」。名之曰「十六進制色」。\\n\\t昔之「ctx.strokeStyle」者。今「十六進制色」是矣。\\n\\t昔之「ctx.fillStyle」者。今「十六進制色」是矣。\\n是謂「蘸色」之術也。\\n\\n今有一術。名之曰「調色」。欲行是術。必先得一物曰「紙」。一言曰「色」。一數曰「分」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t昔之「ctx.globalAlpha」者。今一是矣。\\n\\t\\n\\t施「取十六進制色」於「色」。名之曰「col」。\\n\\t夫「分」。名之曰「t」。\\n\\t\\n\\t夫「parseInt(ctx.fillStyle.slice(1),16)」。名之曰「rgb0」。\\n\\t夫「parseInt(col.slice(1),16)」。名之曰「rgb1」\\n\\t夫「Math.floor((rgb0>>>16)*(1-t)+(rgb1>>>16)*t)」名之曰「r」\\n\\t夫「Math.floor(((rgb0>>8)&0xff)*(1-t)+((rgb1>>8)&0xff)*t)」名之曰「g」\\n\\t夫「Math.floor((rgb0&0xff)*(1-t)+(rgb1&0xff)*t)」名之曰「b」\\n\\t夫「r.toString(16).padStart(2,'0')」名之曰「R」。\\n\\t夫「g.toString(16).padStart(2,'0')」名之曰「G」。\\n\\t夫「b.toString(16).padStart(2,'0')」名之曰「B」。\\n\\t夫「\\\"#\\\"+R+G+B」。名之曰「十六進制色」。\\n\\t昔之「ctx.strokeStyle」者。今「十六進制色」是矣。\\n\\t昔之「ctx.fillStyle」者。今「十六進制色」是矣。\\n\\n是謂「調色」之術也。\\n\\n今有一術。名之曰「蘸水」。欲行是術。必先得一物曰「紙」。一數曰「分」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t減「分」於一。昔之「ctx.globalAlpha」者。今其是矣。\\n是謂「蘸水」之術也。\\n\\n今有一術。名之曰「擇筆」。欲行是術。必先得一物。曰「紙」。一數。曰「號」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t昔之「ctx.lineWidth」者。今「號」是矣。\\n是謂「擇筆」之術也。\\n\\n今有一術。名之曰「提筆」。欲行是術。必先得一物。曰「紙」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t施「ctx.stroke」。\\n是謂「提筆」之術也。\\n\\n今有一術。名之曰「設色」。欲行是術。必先得一物。曰「紙」。乃行是術曰。\\n\\t有物「紙」。名之曰「canv」。施「canv.getContext」於「「2d」」。名之曰「ctx」。\\n\\t施「ctx.fill」。\\n是謂「設色」之術也。\";","export default \"今有一術。名之曰「紀元時」。是術曰。\\n\\t施「(()=>new Date().getTime()/1000)」。乃得矣。\\n是謂「紀元時」之術也。\\n\\n今有一術。名之曰「時差」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「(x => 0 - new Date(x * 1000).getTimezoneOffset() * 60)」於「時」。乃得矣。\\n是謂「時差」之術也。\\n\";","export default \"今有一術。名之曰「左移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t吾有一術。名之曰\\n\\t施「(lambda x: lambda y : x<<y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「左移」之術也。\\n\\n今有一術。名之曰「右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : x>>y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「右移」之術也。\\n\\n今有一術。名之曰「補零右移」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : return (x % 0x100000000) >> y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「補零右移」之術也。\\n\\n今有一術。名之曰「位与」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : x&y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「位与」之術也。\\n\\n今有一術。名之曰「位或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : x|y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「位或」之術也。\\n\\n今有一術。名之曰「异或」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : x^y)」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「异或」之術也。\\n\\n今有一術。名之曰「与非」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t施「(lambda x: lambda y : ~(x&y))」於「甲」。於「乙」。名之曰「丙」。乃得「丙」。\\n是謂「与非」之術也。\\n\\n今有一術。名之曰「位變」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「(lambda x: ~x」於「甲」。名之曰「乙」。乃得「乙」。\\n是謂「位變」之術也。\\n\";","export default \"今有一言。曰「「蟒」」。名之曰「境」。\\n\\n今有一術。名之曰「鑒」。欲行是術。必先得一言。曰「言」。乃行是術曰。\\n\\t施「eval」於「言」。乃得矣。\\n是謂「鑒」之術也。\";","export default \"\\n今有一術。名之曰「紀元時」。是術曰。\\n\\t施「__import__」於「「time」」。名之曰「time」。\\n\\t施「time.time」。乃得矣。\\n是謂「紀元時」之術也。\\n\\n今有一術。名之曰「時差」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「__import__」於「「time」」。名之曰「time」。\\n\\t施「(lambda x: time.localtime(x).tm_gmtoff)」於「時」。乃得矣。\\n是謂「時差」之術也。\\n\";","export default \"今有一言。曰「「鑽」」。名之曰「境」。\\n\\n今有一術。名之曰「鑒」。欲行是術。必先得一言。曰「言」。乃行是術曰。\\n\\t施「eval」於「言」。乃得矣。\\n是謂「鑒」之術也。\";","export default \"或云「「凡「甲」皆「乙」其上者」」。\\n蓋謂「「施「遍施」於「乙」於「甲」」」\\n\\n或云「「唯「甲」中得「乙」者」」\\n蓋謂「「施「篩剔」於「乙」於「甲」」」\\n\\n或云「「併「甲」於「乙」以「丙」者」」\\n蓋謂「「施「左併」於「丙」於「乙」於「甲」」」\\n\\n注曰「「遍施。同Javascript之Array.forEach也。」」\\n今有一術。名之曰「遍施」。欲行是術。必先得一術。曰「甲」。一列。曰「乙」。乃行是術曰。\\n\\t吾有一列。名之曰「丙」。\\n\\t凡「乙」中之「丁」。\\n\\t\\t施「甲」於「丁」。充「丙」以其也。\\n\\t乃得「丙」。\\n是謂「遍施」之術也。\\n\\n注曰「「篩剔。同Javascript之Array.filter也。」」\\n今有一術。名之曰「篩剔」。欲行是術。必先得一術。曰「甲」。一列。曰「乙」。乃行是術曰。\\n\\t吾有一列。名之曰「丙」。\\n\\t凡「乙」中之「丁」。\\n\\t\\t施「甲」於「丁」。\\n\\t\\t若其者。充「丙」以「丁」也。\\n\\t云云。\\n\\t乃得「丙」。\\n是謂「篩剔」之術也。\\n\\n今有一術。名之曰「左併」。欲行是術。必先得一術。曰「甲」。一元。曰「乙」。一列。曰「丙」。乃行是術曰。\\n\\t吾有一元曰「乙」。名之曰「丁」。\\n\\t凡「丙」中之「戊」。\\n\\t\\t施「甲」於「丁」於「戊」。\\n\\t\\t昔之「丁」者。今其是矣。\\n\\t云云。\\n\\t乃得「丁」。\\n是謂「左併」之術也。\\n\\n\\n今有一術。名之曰「右併」。欲行是術。必先得一術。曰「甲」。一元。曰「乙」。一列。曰「丙」。乃行是術曰。\\n\\t吾有一元曰「乙」。名之曰「丁」。\\n\\t夫「丙」之長。名之曰「戊」。\\n\\t恆為是。若「戊」小於一者乃止也。\\n\\t\\t夫「丙」之「戊」。夫「丁」。取二以施「甲」。\\n\\t\\t昔之「丁」者。今其是矣。\\n\\t減「戊」以一。昔之「戊」者。今其是矣。云云。\\n\\t乃得「丁」。\\n是謂「右併」之術也。\\n\\n注曰「「排序。同Javascript之Array.sort也。」」\\n今有一術。名之曰「排序」。欲行是術。必先得一術。曰「甲」。一列。曰「乙」。乃行是術曰。\\n\\n\\t若「乙」之長不大於一者。乃得「乙」也。\\n\\t吾有三列。名之曰「首」。曰「頷」。曰「尾」。\\n\\n\\t夫「乙」之一。名之曰「乙一」。\\n\\t充「頷」以「乙一」。\\n\\t夫「乙」之其餘。名之曰「乙餘」。\\n\\n\\t凡「乙餘」中之「丁」。\\n\\t\\t施「甲」於「丁」於「乙一」。\\n\\t\\t若其小於零者。\\n\\t\\t\\t充「首」以「丁」。\\n\\t\\t若非。\\n\\t\\t\\t充「尾」以「丁」\\n\\t\\t也。\\n\\t云云。\\n\\t施「排序」於「甲」於「首」。昔之「首」者。今其是矣。\\n\\t施「排序」於「甲」於「尾」。昔之「尾」者。今其是矣。\\n\\n\\t銜「首」以「頷」以「尾」。名之曰「丙」。\\n\\t乃得「丙」。\\n\\n是謂「排序」之術也。\\n\\n注曰「「倒序。同Javascript之Array.reverse也。」」\\n今有一術。名之曰「倒序」。欲行是術。必先得一列。曰「甲」。乃行是術曰。\\n\\t吾有一列。名之曰「乙」。\\n\\t夫「甲」之長。名之曰「戊」。\\n\\t恆為是。若「戊」小於一者乃止也。\\n\\t\\t夫「甲」之「戊」。充「乙」以其。\\n\\t減「戊」以一。昔之「戊」者。今其是矣。云云。\\n\\t乃得「乙」。\\n是謂「倒序」之術也。\\n\\n注曰「「擷取。同Javascript之Array.slice也。」」\\n今有一術。名之曰「擷取」。欲行是術。必先得一列。曰「甲」。二數。曰「乙」曰「丙」。乃行是術曰。\\n\\t吾有一列。名之曰「丁」。\\n\\t吾有一數。曰「乙」。名之曰「戊」。\\n\\t若「丙」小於零者。夫「甲」之長。加其以「丙」。昔之「丙」者。今其是矣。云云。\\n\\n\\t恆為是。若「戊」大於「丙」者乃止也。\\n\\t\\t夫「甲」之「戊」。充「丁」以其。\\n\\t加「戊」以一。昔之「戊」者。今其是矣。云云。\\n\\t乃得「丁」。\\n是謂「擷取」之術也。\\n\\n\\n今有一術。名之曰「製列」。欲行是術。必先得一數。曰「甲」。一術。曰「乙」。一列。曰「丙」。乃行是術曰。\\n\\t吾有一列。名之曰「丁」。\\n\\t吾有一數曰一。名之曰「戊」。\\n\\n\\t恆為是。若「戊」大於「甲」者乃止也。\\n\\t\\t施「乙」於「戊」。充「丁」以其。\\n\\t加「戊」以一。昔之「戊」者。今其是矣。云云。\\n\\t乃得「丁」。\\n是謂「製列」之術也。\\n\\n\\n今有一術。名之曰「索一」。欲行是術。必先得一列。曰「甲」。一元。曰「乙」。乃行是術曰。\\n\\t吾有一數曰一。名之曰「戊」。\\n\\t恆為是。若「戊」大於「甲」之長者乃止也。\\n\\t\\t若「乙」等於「甲」之「戊」者。乃得「戊」也。\\n\\t加「戊」以一。昔之「戊」者。今其是矣。云云。\\n\\t乃得零。\\n是謂「索一」之術也。\\n\\n\\n\\n\";","export default \"吾有一數。曰四十二。名之曰「運數」。\\n\\n注曰「「運。同Javascript之set random seed也。」」\\n今有一術。名之曰「運」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「運者。隨機種子也」」\\n\\t昔之「運數」者。今「甲」是矣。\\n是謂「運」之術也。\\n\\n注曰「「占。同Javascript之Math.random也。」」\\n今有一術。名之曰「占」。是術曰。\\n\\t注曰「「線性同餘方法所得隨機數也」」\\n\\t有數四十二億九千四百九十六萬七千二百九十六。名之曰「模」。\\n\\t注曰「「有數二千二百六十九萬五千四百七十七。名之曰「倍」。」」\\n\\t有數二千二百六十七萬五千四百五十六。名之曰「上倍」。有數二萬零二十一。名之曰「下倍」。\\n\\t有數一。名之曰「增」。\\n\\t乘「上倍」於「運數」。除其以「模」。所餘幾何。名之曰「上餘」。\\n\\t乘「下倍」於「運數」。加其於「上餘」。加其以「增」。除其以「模」。所餘幾何。昔之「運數」者。今其是矣。\\n\\t除「運數」以「模」。名之曰「卦」。\\n\\t乃得「卦」。\\n是謂「占」之術也。\\n\";","export default \"吾嘗觀「「西曆法」」之書。方悟「紀元時」「時差」之義。\\n吾嘗觀「「曆表」」之書。方悟「始曆月」「曆月表」「始閏月」「閏月表」之義。\\n吾嘗觀「「算經」」之書。方悟「取底除」「取整除」「取底」「取頂」「取整」之義。\\n\\n注曰「「今之年月日時刻者。當以紀元時(Unix timestamp)推算之。」」\\n疏曰「「格林威治平時西曆一九七〇年一月一日木曜日〇時即西元一九六九年己酉年十一月二十四日辛巳日子正起所積秒數也。」」\\n疏曰「「日八萬六千四百秒。」」\\n\\n注曰「「今何紀元時。同Javascript之Date.now() / 1000也。」」\\n今有一術。名之曰「今何紀元時」。是術曰。\\n\\t施「紀元時」。乃得矣。\\n是謂「今何紀元時」之術也。\\n\\n注曰「「言今之日時。同Javascript之new Date().toString(), in Chinese calendar也。」」\\n今有一術。名之曰「言今之日時」。是術曰。\\n\\t施「紀元時」。取一以施「言彼之日時」。乃得矣。\\n是謂「言今之日時」之術也。\\n\\n注曰「「言今之年月日。同Javascript之new Date().toDateString(), in Chinese calendar也。」」\\n今有一術。名之曰「言今之年月日」。是術曰。\\n\\t施「紀元時」。取一以施「言彼之年月日」。乃得矣。\\n是謂「言今之年月日」之術也。\\n\\n注曰「「言今之時刻。同Javascript之new Date().toTimeString(), in Chinese calendar也。」」\\n今有一術。名之曰「言今之時刻」。是術曰。\\n\\t施「紀元時」。取一以施「言彼之時刻」。乃得矣。\\n是謂「言今之時刻」之術也。\\n\\n注曰「「今年何年號。同Javascript之\\\"西元\\\" for modern dates也。」」\\n今有一術。名之曰「今年何年號」。是術曰。\\n\\t施「紀元時」。取一以施「彼年何年號」。乃得矣。\\n是謂「今年何年號」之術也。\\n\\n注曰「「今年何年。同Javascript之new Date().getFullYear() for modern dates, in Chinese calendar也。」」\\n今有一術。名之曰「今年何年」。是術曰。\\n\\t注曰「「年者。或以西元。或以帝王年號紀之。」」\\n\\t施「紀元時」。取一以施「彼年何年」。乃得矣。\\n是謂「今年何年」之術也。\\n\\n注曰「「今年何干支。同Javascript之Get index (1 to 60) of this year in the 60-year cycle也。」」\\n今有一術。名之曰「今年何干支」。是術曰。\\n\\t注曰「「甲子得一。乙丑得二。乃至癸亥得六十也。」」\\n\\t施「紀元時」。取一以施「彼年何干支」。乃得矣。\\n是謂「今年何干支」之術也。\\n\\n注曰「「今年積何年。同Javascript之new Date().getFullYear() + 2697, in Chinese calendar也。」」\\n今有一術。名之曰「今年積何年」。是術曰。\\n\\t注曰「「米制公約訂立年積四千五百七十二年。」」\\n\\t注曰「「紀元年積四千六百六十六年。」」\\n\\t施「紀元時」。取一以施「彼年積何年」。乃得矣。\\n是謂「今年積何年」之術也。\\n\\n注曰「「今月何月。同Javascript之new Date().getMonth() + 1, N + 0.5 for leap months, in Chinese calendar也。」」\\n今有一術。名之曰「今月何月」。是術曰。\\n\\t注曰「「月者。正月至臘月也。」」\\n\\t注曰「「正月得一。二月得二。乃至十二月得十二也。閏月者。加半於前月數。」」\\n\\t施「紀元時」。取一以施「彼月何月」。乃得矣。\\n是謂「今月何月」之術也。\\n\\n注曰「「今月積何月。同Javascript之Get continuously counting month number of this month也。」」\\n今有一術。名之曰「今月積何月」。是術曰。\\n\\t注曰「「米制公約訂立月積五萬六千五百五十一月。」」\\n\\t注曰「「紀元月積五萬七千七百二十一月。」」\\n\\t施「紀元時」。取一以施「彼月積何月」。乃得矣。\\n是謂「今月積何月」之術也。\\n\\n注曰「「今日何日。同Javascript之new Date().getDate(), in Chinese calendar也。」」\\n今有一術。名之曰「今日何日」。是術曰。\\n\\t批曰「「古有越人歌。曰。今日何日兮,得與王子同舟。」」\\n\\t注曰「「初一日得一。初二日得二。乃至三十日得三十也。」」\\n\\t施「紀元時」。取一以施「彼日何日」。乃得矣。\\n是謂「今日何日」之術也。\\n\\n注曰「「今日何干支。同Javascript之Get index (1 to 60) of today in the 60-day cycle也。」」\\n今有一術。名之曰「今日何干支」。是術曰。\\n\\t注曰「「甲子得一。乙丑得二。乃至癸亥得六十也。」」\\n\\t施「紀元時」。取一以施「彼日何干支」。乃得矣。\\n是謂「今日何干支」之術也。\\n\\n注曰「「今日積何日。同Javascript之Get continuously counting day number of today也。」」\\n今有一術。名之曰「今日積何日」。是術曰。\\n\\t注曰「「米制公約訂立日積一百六十六萬九千九百九十九日。」」\\n\\t注曰「「紀元日積一百七十〇萬四千五百五十八日。」」\\n\\t施「紀元時」。取一以施「彼日積何日」。乃得矣。\\n是謂「今日積何日」之術也。\\n\\n注曰「「今時何時。同Javascript之Get index (1 to 12) of current time in the 12 divisions of day也。」」\\n今有一術。名之曰「今時何時」。是術曰。\\n\\t注曰「「時者。子丑寅卯辰巳午未申酉戌亥。」」\\n\\t注曰「「子時得一。丑時得二。乃至亥時得十二也。」」\\n\\t施「紀元時」。取一以施「彼時何時」。乃得矣。\\n是謂「今時何時」之術也。\\n\\n注曰「「今時何小時。同Javascript之new Date().getHours()也。」」\\n今有一術。名之曰「今時何小時」。是術曰。\\n\\t注曰「「小時者。子丑寅卯辰巳午未申酉戌亥。各分初正。」」\\n\\t注曰「「子正得〇。丑初得一。乃至子初得二十三也。」」\\n\\t施「紀元時」。取一以施「彼時何小時」。乃得矣。\\n是謂「今時何小時」之術也。\\n\\n注曰「「今刻何刻。同Javascript之Math.floor(new Date().getMinutes() / 15)也。」」\\n今有一術。名之曰「今刻何刻」。是術曰。\\n\\t注曰「「說文解字曰。晝夜百刻。後世改為九十六、百八、百二十刻。未知孰為可法。」」\\n\\t注曰「「初刻得〇。一刻得一。二刻得二。三刻得三。古法四刻得四。」」\\n\\t施「紀元時」。取一以施「彼刻何刻」。乃得矣。\\n是謂「今刻何刻」之術也。\\n\\n注曰「「今分何分。同Javascript之new Date().getMinutes() % 15也。」」\\n今有一術。名之曰「今分何分」。是術曰。\\n\\t施「紀元時」。取一以施「彼分何分」。乃得矣。\\n是謂「今分何分」之術也。\\n\\n注曰「「今秒何秒。同Javascript之new Date().getSeconds()也。」」\\n今有一術。名之曰「今秒何秒」。是術曰。\\n\\t施「紀元時」。取一以施「彼秒何秒」。乃得矣。\\n是謂「今秒何秒」之術也。\\n\\n注曰「「既知某一紀元時。乃得其年月日時刻。故謂之彼。」」\\n\\n吾有一列。名之曰「天干」。充「天干」。\\n\\t以「「甲」」以「「乙」」以「「丙」」以「「丁」」以「「戊」」。\\n\\t以「「己」」以「「庚」」以「「辛」」以「「壬」」以「「癸」」。\\n吾有一列。名之曰「地支」。充「地支」。\\n\\t以「「子」」以「「丑」」以「「寅」」以「「卯」」以「「辰」」以「「巳」」。\\n\\t以「「午」」以「「未」」以「「申」」以「「酉」」以「「戌」」以「「亥」」。\\n吾有一列。名之曰「數字」。充「數字」。\\n\\t以「「〇」」以「「一」」以「「二」」以「「三」」以「「四」」。\\n\\t以「「五」」以「「六」」以「「七」」以「「八」」以「「九」」。\\n\\n吾有一術。名之曰「言序數」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t夫「甲」。夫十。取二以施「取底除」。名之曰「乙」。\\n\\t夫「乙」之「「餘」」。加其以一。夫「數字」之其。名之曰「數」。\\n\\t恆為是。\\n\\t\\t夫「乙」之「「商」」。夫十。取二以施「取底除」。昔之「乙」者。今其是矣。\\n\\t\\t夫「乙」之「「餘」」。加其以一。夫「數字」之其。加其以「數」。昔之「數」者。今其是矣。\\n\\t\\t若「乙」之「「商」」等於零者。\\n\\t\\t\\t乃得「數」也。\\n\\t云云。\\n是謂「言序數」之術也。\\n\\n吾有一術。名之曰「言百內數」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t夫「甲」。夫十。取二以施「取底除」。名之曰「乙」。\\n\\t夫「乙」之「「商」」。若其等於零者。\\n\\t\\t夫「乙」之「「餘」」。加其以一。夫「數字」之其。乃得矣。云云。\\n\\t吾有一言。名之曰「數」。\\n\\t夫「乙」之「「商」」。若其等於一者。\\n\\t\\t昔之「數」者。今「「十」」是矣。\\n\\t若非\\n\\t\\t夫「乙」之「「商」」。加其以一。夫「數字」之其。加其以「「十」」。昔之「數」者。今其是矣。云云。\\n\\t夫「乙」之「「餘」」。若其大於零者。\\n\\t\\t夫「乙」之「「餘」」。加其以一。夫「數字」之其。加「數」以其。昔之「數」者。今其是矣。云云。\\n\\t乃得「數」。\\n是謂「言百內數」之術也。\\n\\n吾有一術。名之曰「言年月日」。欲行是術。必先得一數。曰「積日」。乃行是術曰。\\n\\t夫「積日」。取一以施「日積何月」。名之曰「積月」。\\n\\t夫「積月」。取一以施「月積何閏月」。名之曰「積閏月」。\\n\\t減「積月」以「積閏月」。除其以十二。取一以施「取底」。名之曰「積年」。\\n\\t有言「「西元」」。名之曰「年號」。\\n\\t減「積年」以二六九七。名之曰「年」。\\n\\t減「積月」以「積閏月」。除其以十二。所餘幾何。加其於一。名之曰「月」。\\n\\t有爻陰。名之曰「閏」。\\n\\t夫「積閏月」。取一以施「閏月積何月」。若其等於「積月」者。\\n\\t\\t昔之「閏」者。今陽是矣。云云。\\n\\t夫「積月」。取一以施「月積何日」。減其於「積日」。加其以一。名之曰「日」。\\n\\n\\t有言「年號」。名之曰「年月日」。\\n\\t若「年」不大於零者。\\n\\t\\t加「年號」以「「前」」。昔之「年月日」者。今其是矣。\\n\\t\\t減「年」於一。昔之「年」者。今其是矣。\\n\\t云云。\\n\\t若「年」不大於一百者。\\n\\t\\t夫「年」。取一以施「言百內數」。加其以「「年」」。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t若非。\\n\\t\\t夫「年」。取一以施「言序數」。加其以「「年」」。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t云云。\\n\\t減一於「積年」。除其以十。所餘幾何。加其以一。夫「天干」之其。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t減一於「積年」。除其以十二。所餘幾何。加其以一。夫「地支」之其。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t加「年月日」以「「年」」。昔之「年月日」者。今其是矣。\\n\\n\\t若「閏」者。\\n\\t\\t加「年月日」以「「閏」」。昔之「年月日」者。今其是矣。云云。\\n\\t若「月」等於一者。\\n\\t\\t加「年月日」以「「正月」」。昔之「年月日」者。今其是矣。\\n\\t若非。\\n\\t\\t夫「月」。取一以施「言百內數」。加其以「「月」」。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t云云。\\n\\n\\t若「日」不大於十者。\\n\\t\\t加「年月日」以「「初」」。昔之「年月日」者。今其是矣。云云。\\n\\t夫「日」。取一以施「言百內數」。加其以「「日」」。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t減一於「積日」。除其以十。所餘幾何。加其以一。夫「天干」之其。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t減一於「積日」。除其以十二。所餘幾何。加其以一。夫「地支」之其。加「年月日」以其。昔之「年月日」者。今其是矣。\\n\\t加「年月日」以「「日」」。昔之「年月日」者。今其是矣。\\n\\t乃得「年月日」。\\n是謂「言年月日」之術也。\\n\\n吾有一術。名之曰「言時刻」。欲行是術。必先得一數。曰「日內秒」。乃行是術曰。\\n\\t夫「日內秒」。夫三千六百。取二以施「取底除」。名之曰「甲」。\\n\\t夫「甲」之「「商」」。除其以二。取一以施「取頂」。加其以一。名之曰「乙」。\\n\\t若「乙」大於十二者。\\n\\t\\t減十二於「乙」。昔之「乙」者。今其是矣。云云。\\n\\t夫「地支」之「乙」。名之曰「時刻」。\\n\\n\\t夫「甲」之「「商」」。除其以二。所餘幾何。若其等於零者。\\n\\t\\t加「時刻」以「「正」」。昔之「時刻」者。今其是矣。\\n\\t若非。\\n\\t\\t加「時刻」以「「初」」。昔之「時刻」者。今其是矣。云云。\\n\\n\\t夫「甲」之「「餘」」。夫九百。取二以施「取底除」。名之曰「丙」。\\n\\t夫「丙」之「「商」」。若其等於零者。\\n\\t\\t加「時刻」以「「初刻」」。昔之「時刻」者。今其是矣。\\n\\t若非。\\n\\t\\t夫「丙」之「「商」」。取一以施「言百內數」。加其以「「刻」」。\\n\\t\\t加「時刻」以其。昔之「時刻」者。今其是矣。\\n\\t云云。\\n\\n\\t夫「丙」之「「餘」」。夫六十。取二以施「取底除」。名之曰「丁」。\\n\\t夫「丁」之「「商」」。若其等於零者。\\n\\t\\t夫「丁」之「「餘」」。若其大於零者。\\n\\t\\t\\t加「時刻」以「「零」」。昔之「時刻」者。今其是矣。云云。\\n\\t若非。\\n\\t\\t夫「丁」之「「商」」。取一以施「言百內數」。加其以「「分」」。\\n\\t\\t加「時刻」以其。昔之「時刻」者。今其是矣。\\n\\t云云。\\n\\n\\t夫「丁」之「「餘」」。若其大於零者。\\n\\t\\t夫「丁」之「「餘」」。取一以施「言百內數」。加其以「「秒」」。\\n\\t\\t加「時刻」以其。昔之「時刻」者。今其是矣。\\n\\t云云。\\n\\t乃得「時刻」。\\n是謂「言時刻」之術也。\\n\\n注曰「「言彼之日時。同Javascript之new Date(x * 1000).toString(), in Chinese calendar也。」」\\n今有一術。名之曰「言彼之日時」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫八萬六千四百。取二以施「取底除」。名之曰「乙」。\\n\\t夫「乙」之「「商」」。加其以一七〇四五五八。取一以施「言年月日」。名之曰「年月日」。\\n\\t夫「乙」之「「餘」」。取一以施「取底」。取一以施「言時刻」。名之曰「時刻」。\\n\\t加「年月日」以「時刻」。乃得矣。\\n是謂「言彼之日時」之術也。\\n\\n注曰「「言彼之年月日。同Javascript之new Date(x * 1000).toDateString(), in Chinese calendar也。」」\\n今有一術。名之曰「言彼之年月日」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫八萬六千四百。取二以施「取底除」。名之曰「乙」。\\n\\t夫「乙」之「「商」」。加其以一七〇四五五八。取一以施「言年月日」。乃得矣。\\n是謂「言彼之年月日」之術也。\\n\\n注曰「「言彼之時刻。同Javascript之new Date(x * 1000).toTimeString(), in Chinese calendar也。」」\\n今有一術。名之曰「言彼之時刻」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫八萬六千四百。取二以施「取底除」。名之曰「乙」。\\n\\t夫「乙」之「「餘」」。取一以施「取底」。取一以施「言時刻」。乃得矣。\\n是謂「言彼之時刻」之術也。\\n\\n注曰「「彼年何年號。同Javascript之\\\"西元\\\" for modern dates也。」」\\n今有一術。名之曰「彼年何年號」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t乃得「「西元」」。\\n是謂「彼年何年號」之術也。\\n\\n注曰「「彼年何年。同Javascript之new Date(x * 1000).getFullYear() for modern dates, in Chinese calendar也。」」\\n今有一術。名之曰「彼年何年」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼年積何年」於「時」。減其以二六九七。乃得矣。\\n是謂「彼年何年」之術也。\\n\\n注曰「「彼年何干支。同Javascript之Get index (1 to 60) in the 60-year cycle也。」」\\n今有一術。名之曰「彼年何干支」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼年積何年」於「時」。減其以一。夫六十。取二以施「取底除」。\\n\\t夫其之「「餘」」。加其以一。乃得矣。\\n是謂「彼年何干支」之術也。\\n\\n注曰「「彼年積何年。同Javascript之new Date(x * 1000).getFullYear() + 2697, in Chinese calendar也。」」\\n今有一術。名之曰「彼年積何年」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼月積何月」於「時」。名之曰「積月」。\\n\\t夫「積月」。取一以施「月積何閏月」。名之曰「積閏月」。\\n\\t減「積月」以「積閏月」。除其以十二。取一以施「取底」。乃得矣。\\n是謂「彼年積何年」之術也。\\n\\n注曰「「彼月何月。同Javascript之new Date(x * 1000).getMonth() + 1, N + 0.5 for leap months, in Chinese calendar也。」」\\n今有一術。名之曰「彼月何月」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼月積何月」於「時」。名之曰「積月」。\\n\\t夫「積月」。取一以施「月積何閏月」。名之曰「積閏月」。\\n\\t減「積月」以「積閏月」。除其以十二。所餘幾何。加其於一。名之曰「月」。\\n\\t夫「積閏月」。取一以施「閏月積何月」。若其等於「積月」者。\\n\\t\\t加五分於「月」。乃得矣。\\n\\t若非。\\n\\t\\t乃得「月」也。\\n是謂「彼月何月」之術也。\\n\\n注曰「「彼月積何月。同Javascript之Get continuously counting month number也。」」\\n今有一術。名之曰「彼月積何月」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼日積何日」於「時」。取一以施「日積何月」。乃得矣。\\n是謂「彼月積何月」之術也。\\n\\n注曰「「彼日何日。同Javascript之new Date(x * 1000).getDate(), in Chinese calendar也。」」\\n今有一術。名之曰「彼日何日」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼日積何日」於「時」。名之曰「積日」。\\n\\t夫「積日」。取一以施「日積何月」。取一以施「月積何日」。減其於「積日」。加其以一。乃得矣。\\n是謂「彼日何日」之術也。\\n\\n注曰「「彼日何干支。同Javascript之Get index (1 to 60) in the 60-day cycle也。」」\\n今有一術。名之曰「彼日何干支」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼日積何日」於「時」。減其以一。夫六十。取二以施「取底除」。\\n\\t夫其之「「餘」」。加其以一。乃得矣。\\n是謂「彼日何干支」之術也。\\n\\n注曰「「彼日積何日。同Javascript之Get continuously counting day number也。」」\\n今有一術。名之曰「彼日積何日」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫八萬六千四百。取二以施「取底除」。\\n\\t夫其之「「商」」。加其以一七〇四五五八。乃得矣。\\n是謂「彼日積何日」之術也。\\n\\n注曰「「彼時何時。同Javascript之Get index (1 to 12) in the 12 divisions of day也。」」\\n今有一術。名之曰「彼時何時」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「彼時何小時」於「時」。除其以二。取一以施「取頂」。加其以一。名之曰「甲」。\\n\\t若「甲」大於十二者。\\n\\t\\t減十二於「甲」。乃得矣。\\n\\t若非。\\n\\t\\t乃得「甲」也。\\n是謂「彼時何時」之術也。\\n\\n注曰「「彼時何小時。同Javascript之new Date(x * 1000).getHours()也。」」\\n今有一術。名之曰「彼時何小時」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫八萬六千四百。取二以施「取底除」。\\n\\t夫其之「「餘」」。夫三千六百。取二以施「取底除」。\\n\\t夫其之「「商」」。乃得矣。\\n是謂「彼時何小時」之術也。\\n\\n注曰「「彼刻何刻。同Javascript之Math.floor(new Date(x * 1000).getMinutes() / 15)也。」」\\n今有一術。名之曰「彼刻何刻」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫三千六百。取二以施「取底除」。\\n\\t夫其之「「餘」」。夫九百。取二以施「取底除」。\\n\\t夫其之「「商」」。乃得矣。\\n是謂「彼刻何刻」之術也。\\n\\n注曰「「彼分何分。同Javascript之new Date(x * 1000).getMinutes() % 15也。」」\\n今有一術。名之曰「彼分何分」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫九百。取二以施「取底除」。\\n\\t夫其之「「餘」」。夫六十。取二以施「取底除」。\\n\\t夫其之「「商」」。乃得矣。\\n是謂「彼分何分」之術也。\\n\\n注曰「「彼秒何秒。同Javascript之new Date(x * 1000).getSeconds()也。」」\\n今有一術。名之曰「彼秒何秒」。欲行是術。必先得一數。曰「時」。乃行是術曰。\\n\\t施「時差」於「時」。加其於「時」。名之曰「甲」。\\n\\t夫「甲」。夫六十。取二以施「取底除」。\\n\\t夫其之「「餘」」。取一以施「取底」。乃得矣。\\n是謂「彼秒何秒」之術也。\\n\\n吾有一術。名之曰「月積何日」。欲行是術。必先得一數。曰「積月」。乃行是術曰。\\n\\t減「積月」以「始曆月」。加其以一。名之曰「引」。\\n\\t若「引」小於一者。\\n\\t\\t嗚呼。「「越界」」之禍。乃歸空無也。\\n\\t夫「曆月表」之長。若「引」大於其者。\\n\\t\\t嗚呼。「「越界」」之禍。乃歸空無也。\\n\\t夫「曆月表」之「引」。名之曰「校」。\\n\\t乘「積月」以二五一〇一。除其以八五〇。減其以一。取一以施「取頂」。加其以「校」。乃得矣。\\n是謂「月積何日」之術也。\\n\\n吾有一術。名之曰「日積何月」。欲行是術。必先得一數。曰「積日」。乃行是術曰。\\n\\t加「積日」以一。乘其以八五〇。除其以二五一〇一。取一以施「取整」。名之曰「積月」。\\n\\t施「月積何日」於「積月」。名之曰「初日」。\\n\\t若「積日」小於「初日」者。\\n\\t\\t減一於「積月」。乃得矣。\\n\\t若非。\\n\\t\\t乃得「積月」也。\\n是謂「日積何月」之術也。\\n\\n吾有一術。名之曰「閏月積何月」。欲行是術。必先得一數。曰「積閏月」。乃行是術曰。\\n\\t減「積閏月」以「始閏月」。加其以一。名之曰「引」。\\n\\t若「引」小於一者。\\n\\t\\t若「引」等於零者。\\n\\t\\t\\t乃得負一京。\\n\\t\\t若非。\\n\\t\\t\\t嗚呼。「「越界」」之禍。乃歸空無也。\\n\\t云云。\\n\\t夫「閏月表」之長。若「引」大於其者。\\n\\t\\t夫「閏月表」之長。加其以一。若「引」等於其者。\\n\\t\\t\\t乃得一京。\\n\\t\\t若非。\\n\\t\\t\\t嗚呼。「「越界」」之禍。乃歸空無也。\\n\\t云云。\\n\\t夫「閏月表」之「引」。名之曰「校」。\\n\\t乘「積閏月」以三一五七。除其以九四。減其以二七。取一以施「取頂」。加其以「校」。乃得矣。\\n是謂「閏月積何月」之術也。\\n\\n吾有一術。名之曰「月積何閏月」。欲行是術。必先得一數。曰「積月」。乃行是術曰。\\n\\t加「積月」以二七。乘其以九四。除其以三一五七。取一以施「取整」。名之曰「積閏月」。\\n\\t施「閏月積何月」於「積閏月」。名之曰「閏月」。\\n\\t若「積月」小於「閏月」者。\\n\\t\\t減一於「積閏月」。乃得矣。\\n\\t若非。\\n\\t\\t乃得「積閏月」也。\\n是謂「月積何閏月」之術也。\\n\";","export default \"注曰「「此文程式之作文也。勿施以修訂。」」\\n注曰「「程式書於文 tools/make_calendar.js 」」\\n\\n今有一數。曰五七一〇五。名之曰「始曆月」。\\n今有一列。名之曰「曆月表」。\\n今有一數。曰一七〇一。名之曰「始閏月」。\\n今有一列。名之曰「閏月表」。\\n\\n充「曆月表」。\\n\\t以一以一以一以一以〇以一以〇以〇以〇以負一以〇以〇以一以一以一。\\n\\t以一以一以〇以一以〇以〇以〇以〇以〇以一以一以〇以一以一以一以〇以一以〇以〇以〇。\\n\\t以〇以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以〇以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一。\\n\\t以〇以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以負一以〇以〇以一以一以一以一以一。\\n\\t以〇以一以〇以〇以〇以〇以〇以一以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇。\\n\\t以一以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一。\\n\\t以一以〇以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以一以〇以〇以〇。\\n\\t以〇以〇以〇以一以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以一以〇。\\n\\t以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以一以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇以一以〇。\\n\\t以一以一以二以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇。\\n\\t以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇。\\n\\t以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇。\\n\\t以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以一以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一。\\n\\t以二以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以〇以〇。\\n\\t以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一。\\n\\t以〇以一以一以一以〇以一以〇以一以〇以一以〇以〇以一以〇以一以〇以一以〇以一以〇。\\n\\t以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以〇以一以〇以〇以〇以一。\\n\\t以〇以一以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一。\\n\\t以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇。\\n\\t以〇以〇以一以一以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一。\\n\\t以一以一以〇以一以〇以一以〇以一以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇。\\n\\t以一以〇以一以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一。\\n\\t以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇。\\n\\t以一以一以一以一以一以一以一以〇以一以〇以負一以〇以〇以〇以〇以一以一以一以一以一。\\n\\t以〇以一以〇以〇以〇以一以〇以〇以一以〇以一以一以一以〇以一以〇以一以〇以一以〇。\\n\\t以一以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以一以〇。\\n\\t以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一以〇。\\n\\t以一以一以一以一以一以〇以一以〇以負一以〇以〇以〇以〇以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以一以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一。\\n\\t以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇。\\n\\t以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以一以〇以一以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以一以〇以一以一。\\n\\t以一以一以一以〇以一以〇以負一以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一。\\n\\t以一以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇。\\n\\t以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一。\\n\\t以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一。\\n\\t以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一。\\n\\t以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇。\\n\\t以〇以〇以一以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以一以〇以一以〇以一。\\n\\t以一以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以一以一以〇以一以〇。\\n\\t以一以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以一以〇以〇。\\n\\t以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇。\\n\\t以一以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一。\\n\\t以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇。\\n\\t以〇以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以〇以一以〇。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以一以〇以一以一以二以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一。\\n\\t以一以一以一以一以一以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一。\\n\\t以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以〇以〇。\\n\\t以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以〇以一以〇以一以〇。\\n\\t以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一。\\n\\t以一以一以一以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以一以〇以一以〇以〇以一以〇以一。\\n\\t以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以一以〇以一以〇以一以〇以一以〇。\\n\\t以一以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以一。\\n\\t以〇以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一。\\n\\t以一以〇以〇以〇以負一以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以一以〇以〇以一以〇以一以〇以一。\\n\\t以〇以一以〇以〇以〇以一以〇以一以〇以一以一以〇以一以〇以一以〇以一以〇以〇以〇。\\n\\t以一以〇以一以〇以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以一以〇。\\n\\t以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇。\\n\\t以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇。\\n\\t以一以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以〇以一以一以一。\\n\\t以一以〇以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以一以〇以〇以〇。\\n\\t以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一。\\n\\t以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇。\\n\\t以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一以一。\\n\\t以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以一以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一。\\n\\t以一以一以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以一以〇以一以〇以一以一以一以〇以一以〇以一以〇以〇以〇以〇以〇以〇以一。\\n\\t以〇以一以一以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以一以一以一以一以一以〇。\\n\\t以一以〇以〇以〇以〇以〇以一以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇以一。\\n\\t以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一。\\n\\t以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以一以〇以一以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一。\\n\\t以〇以一以〇以一以〇以一以〇以一以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇。\\n\\t以〇以〇以一以〇以一以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以一以一。\\n\\t以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇。\\n\\t以〇以〇以〇以〇以〇以一以一以一以一以一以一以一以〇以一以〇以〇以〇以〇以一以〇。\\n\\t以一以一以一以一以一以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以〇以一。\\n\\t以〇以一以〇以一以〇以一以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇。\\n\\t以一以〇以一以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以〇。\\n\\t以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇。\\n\\t以〇以〇以〇以一以一以一以一以一以一以一以〇以一以〇以負一以〇以〇以一以〇以一以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以一以一以〇以一以〇以一以〇以〇。\\n\\t以〇以一以〇以一以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一以一。\\n\\t以一以一以〇以一以〇以一以〇以一以〇以〇以〇以一以〇以一以一以一以一以〇以一以〇。\\n\\t以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇。\\n\\t以〇以一以一以一以一以一以一以一以〇以一以〇以負一以〇以〇以一以〇以一以一以一以一。\\n\\t以一以〇以〇以〇以〇以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以一。\\n\\t以〇以一以一以〇以一以〇以一以〇以一以〇以〇以〇以〇以〇以一以〇以一以一以一以一。\\n\\t以〇以一以〇以一以〇以〇以〇以一以〇以一以〇以一以一以一以一以〇以一以〇以〇以〇。\\n\\t以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一。\\n\\t以一以一以一以一以一以一以〇以一以〇以負一以〇以〇以一以〇以一以一以一以一以一以〇。\\n\\t以一以〇以〇以〇以〇以〇以〇以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一。\\n\\t以一以〇以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一。\\n\\t以〇以〇以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇。\\n\\t以一以〇以一以〇以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以〇以一以一以一。\\n\\t以一以一以一以一以〇以一以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇。\\n\\t以〇以〇以〇以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一以〇以〇。\\n\\t以〇以〇以〇以一以〇以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以〇以一以〇。\\n\\t以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以〇以一以〇以一以〇以一以一以一。\\n\\t以〇以一以〇以一以〇以〇以〇以〇以一以〇以一以一以一以一以一以〇以一以〇以〇以〇。\\n\\t以一以〇以〇以一以一以一以一以一以〇以一以〇以〇以〇以〇以〇以一以一以〇以一以一。\\n\\t以一以〇以一以〇以〇以〇以〇以〇以一以一以一以一以一以一以〇以一以〇以〇以〇以〇。\\n\\t以〇以一以〇以一以一以一以一以一以一以一以〇以〇以〇以〇以〇以〇以一以〇以一以一。\\n\\t以一以一以一以〇以一以〇以〇以〇以〇以一以〇以一以〇以一以〇以一以〇以一以〇以一。\\n\\t以〇以一以〇以〇以〇以〇以一以〇以一以〇以一。\\n\\n充「閏月表」。\\n\\t以負三以負一以一以二以負二以〇以二以負三以〇以一以二以負一以〇以二以負二以負一以一以三以負一。\\n\\t以〇以三以負二以負一以一以負二以負二以〇以一以負二以負二以一以二以負一以〇以二以負一以負一以一以二。\\n\\t以負三以〇以一以一以負一以一以二以負二以〇以一以負二以負一以〇以三以負二以〇以二以負三以負一以〇。\\n\\t以三以負二以〇以二以負三以負一以〇以二以負二以負一以二以負二以負一以〇以三以負二。\\n\";","export default \"吾嘗觀「「格物」」之書。方悟「取物」「置物」「列物之端」「識類」之義。\\n\\n吾有一言。曰「「「」」」。名之曰「引號」。\\n夫「引號」之一。名之曰「引起」。\\n夫「引號」之二。名之曰「引迄」。\\n吾有一列。名之曰「位名」。充「位名」\\n以「「〇」」以「「一」」以「「二」」以「「三」」以「「四」」\\n以「「五」」以「「六」」以「「七」」以「「八」」以「「九」」。\\n\\n吾有一術。名之曰「斬渾沌」。欲行是術。必先得一言。曰「渾沌語」。乃行是術曰。\\n\\t吾有一列。名之曰「諸咒」。充「諸咒」以「「物」」以「「言」」以「「數」」以「「爻」」以「「列」」以「「之」」以「「也」」。\\n\\t吾有一列。名之曰「渾沌碎」。\\n\\t有數一。名之曰「讀」。\\n\\t有數零。名之曰「層」。\\n\\t吾有一言。名之曰「辭」。\\n\\n\\t恆為是。若「讀」大於「渾沌語」之長者乃止也。\\n\\t\\t若「渾沌語」之「讀」等於「引起」者。\\n\\t\\t\\t若「層」不等於零者。\\n\\t\\t\\t\\t夫「渾沌語」之「讀」。加其於「辭」。昔之「辭」者。今其是矣。\\n\\t\\t\\t云云。\\n\\t\\t\\t加「層」以一。昔之「層」者。今其是矣。\\n\\t\\t或若「渾沌語」之「讀」等於「引迄」者。\\n\\t\\t\\t減「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t若「層」等於零者。\\n\\t\\t\\t\\t充「渾沌碎」以「辭」。\\n\\t\\t\\t\\t昔之「辭」者。今「「」」是矣。\\n\\t\\t\\t若非。\\n\\t\\t\\t\\t夫「渾沌語」之「讀」。加其於「辭」。昔之「辭」者。今其是矣。\\n\\t\\t\\t云云。\\n\\t\\t或若「層」大於零者。\\n\\t\\t\\t夫「渾沌語」之「讀」。加其於「辭」。昔之「辭」者。今其是矣。\\n\\t\\t若非。\\n\\t\\t\\t凡「諸咒」中之「咒」。\\n\\t\\t\\t\\t若「渾沌語」之「讀」等於「咒」者\\n\\t\\t\\t\\t\\t充「渾沌碎」以「咒」。\\n\\t\\t\\t\\t乃止也。\\n\\t\\t\\t云云。\\n\\t\\t云云。\\n\\t加一以「讀」。昔之「讀」者。今其是矣云云。\\n\\t乃得「渾沌碎」。\\n是謂「斬渾沌」之術也。\\n\\n吾有一術。名之曰「食數」。欲行是術。必先得一言。曰「數名」。乃行是術曰。\\n\\t吾有一數。曰一。名之曰「正負」。\\n\\t夫「數名」之一。若其等於「「負」」者。\\n\\t\\t夫「數名」之其餘。昔之「數名」者。今其是矣。\\n\\t\\t昔之「正負」者。今負一是矣。\\n\\t云云。\\n\\t吾有二數。名之曰「整」曰「小」。\\n\\t吾有二數。曰一曰一。名之曰「讀」曰「小長」。\\n\\t有爻陰。名之曰「小耶」。\\n\\t恆為是。若「讀」大於「數名」之長者乃止也。\\n\\t\\t若「讀」等於「「·」」者\\n\\t\\t\\t昔之「小耶」者。今陽是矣。\\n\\t\\t若非。\\n\\t\\t\\t有數一。名之曰「位」\\n\\t\\t\\t恆為是。若「位」大於「位名」之長者乃止也。\\n\\t\\t\\t\\t若「位名」之「位」等於「數名」之「讀」者乃止也。\\n\\t\\t\\t加一以「位」。昔之「位」者。今其是矣云云。\\n\\t\\t\\t減「位」以一。昔之「位」者。今其是矣。\\n\\n\\t\\t\\t若「小耶」者。\\n\\t\\t\\t\\t乘「小」以十。加其以「位」。昔之「小」者。今其是矣。\\n\\t\\t\\t\\t加「小長」以一。昔之「小長」者。今其是矣。\\n\\t\\t\\t若非。\\n\\t\\t\\t\\t乘「整」以十。加其以「位」。昔之「整」者。今其是矣。\\n\\t\\t\\t云云。\\n\\t\\t云云。\\n\\t加一以「讀」。昔之「讀」者。今其是矣云云。\\n\\t為是「小長」遍。乘「小」以零又一分。昔之「小」者。今其是矣。云云。\\n\\t加「整」以「小」。乘其以「正負」。乃得矣。\\n是謂「食數」之術也。\\n\\n吾有一術名之曰「食列」。欲行是術。必先得一列。曰「渾沌碎」。乃行是術曰。\\n\\t吾有一列。名之曰「渾沌列」。\\n\\t有數一。名之曰「讀」。\\n\\t恆為是。若「讀」大於「渾沌碎」之長者乃止也。\\n\\t\\t夫「渾沌碎」之「讀」。名之曰「類」\\n\\t\\t若「類」等於「「數」」者。\\n\\t\\t\\t加「讀」以一。夫「渾沌碎」之其。取一以施「食數」。充「渾沌列」以其。\\n\\t\\t\\t加「讀」以二。昔之「讀」者。今其是矣。\\n\\t\\t或若「類」等於「「言」」者。\\n\\t\\t\\t加「讀」以一。夫「渾沌碎」之其。充「渾沌列」以其。\\n\\t\\t\\t加「讀」以二。昔之「讀」者。今其是矣。\\n\\t\\t或若「類」等於「「爻」」者。\\n\\t\\t\\t加「讀」以一。夫「渾沌碎」之其。\\n\\t\\t\\t若其等於「「陰」」者。充「渾沌列」以陰。\\n\\t\\t\\t若非。充「渾沌列」以陽也。\\n\\t\\t\\t加「讀」以二。昔之「讀」者。今其是矣。\\n\\t\\t若非\\n\\t\\t\\t吾有一數。名之曰「層」。\\n\\t\\t\\t加「讀」以一。名之曰「次讀」。\\n\\t\\t\\t吾有一列。名之曰「句」。\\n\\t\\t\\t恆為是。若「次讀」大於「渾沌碎」之長者乃止也。\\n\\t\\t\\t\\t若「渾沌碎」之「次讀」等於「「物」」者。\\n\\t\\t\\t\\t\\t加「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t或若「渾沌碎」之「次讀」等於「「列」」者。\\n\\t\\t\\t\\t\\t加「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t或若「渾沌碎」之「次讀」等於「「也」」者。\\n\\t\\t\\t\\t\\t若「層」等於零者。\\n\\t\\t\\t\\t\\t\\t若「類」等於「「物」」者。\\n\\t\\t\\t\\t\\t\\t\\t施「食物」於「句」。充「渾沌列」以其。\\n\\t\\t\\t\\t\\t\\t若非。\\n\\t\\t\\t\\t\\t\\t\\t施「食列」於「句」。充「渾沌列」以其。\\n\\t\\t\\t\\t\\t\\t云云。\\n\\t\\t\\t\\t\\t乃止也。\\n\\t\\t\\t\\t\\t減「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t云云。\\n\\t\\t\\t\\t夫「渾沌碎」之「次讀」。充「句」以其。\\n\\t\\t\\t加「次讀」以一。昔之「次讀」者。今其是矣云云。\\n\\t\\t\\t加「次讀」以一。昔之「讀」者。今其是矣\\n\\t\\t云云。\\n\\t云云。\\n\\t乃得「渾沌列」。\\n是謂「食列」之術也。\\n\\n吾有一術名之曰「食物」。欲行是術。必先得一列。曰「渾沌碎」。乃行是術曰。\\n\\t吾有一物。名之曰「渾沌物」。\\n\\t有數二。名之曰「讀」。\\n\\t恆為是。若「讀」大於「渾沌碎」之長者乃止也。\\n\\t\\t夫「渾沌碎」之「讀」。名之曰「端」。\\n\\t\\t加「讀」以一。夫「渾沌碎」之其。名之曰「類」。\\n\\n\\t\\t若「類」等於「「數」」者。\\n\\t\\t\\t加「讀」以二。夫「渾沌碎」之其。取一以施「食數」。施「置物」於「渾沌物」於「端」於其。\\n\\t\\t\\t加「讀」以四。昔之「讀」者。今其是矣。\\n\\t\\t或若「類」等於「「言」」者。\\n\\t\\t\\t加「讀」以二。夫「渾沌碎」之其。施「置物」於「渾沌物」於「端」於其。\\n\\t\\t\\t加「讀」以四。昔之「讀」者。今其是矣。\\n\\t\\t或若「類」等於「「爻」」者。\\n\\t\\t\\t加「讀」以二。夫「渾沌碎」之其。\\n\\t\\t\\t若其等於「「陰」」者。施「置物」於「渾沌物」於「端」於陰。\\n\\t\\t\\t若非。施「置物」於「渾沌物」於「端」於陽也。\\n\\t\\t\\t加「讀」以四。昔之「讀」者。今其是矣。\\n\\t\\t若非\\n\\t\\t\\t吾有一數。名之曰「層」。\\n\\t\\t\\t加「讀」以二。名之曰「次讀」。\\n\\t\\t\\t吾有一列。名之曰「句」。\\n\\t\\t\\t恆為是。若「次讀」大於「渾沌碎」之長者乃止也。\\n\\t\\t\\t\\t若「渾沌碎」之「次讀」等於「「物」」者。\\n\\t\\t\\t\\t\\t加「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t或若「渾沌碎」之「次讀」等於「「列」」者。\\n\\t\\t\\t\\t\\t加「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t或若「渾沌碎」之「次讀」等於「「也」」者。\\n\\t\\t\\t\\t\\t若「層」等於零者。\\n\\t\\t\\t\\t\\t\\t若「類」等於「「物」」者。\\n\\t\\t\\t\\t\\t\\t\\t施「食物」於「句」。施「置物」於「渾沌物」於「端」於其。\\n\\t\\t\\t\\t\\t\\t若非。\\n\\t\\t\\t\\t\\t\\t\\t施「食列」於「句」。施「置物」於「渾沌物」於「端」於其。\\n\\t\\t\\t\\t\\t\\t云云。\\n\\t\\t\\t\\t\\t乃止也。\\n\\t\\t\\t\\t\\t減「層」以一。昔之「層」者。今其是矣。\\n\\t\\t\\t\\t云云。\\n\\t\\t\\t\\t夫「渾沌碎」之「次讀」。充「句」以其。\\n\\t\\t\\t加「次讀」以一。昔之「次讀」者。今其是矣云云。\\n\\t\\t\\t加「次讀」以二。昔之「讀」者。今其是矣\\n\\t\\t云云。\\n\\t云云。\\n\\t乃得「渾沌物」。\\n是謂「食物」之術也。\\n\\n今有一術。名之曰「食渾沌」。欲行是術。必先得一言。曰「渾沌語」。乃行是術曰。\\n\\t施「斬渾沌」於「渾沌語」。名之曰「渾沌碎」。\\n\\t夫「渾沌碎」之其餘。取一以施「食物」。乃得矣。\\n是謂「食渾沌」之術也。\\n\\n今有一術。名之曰「食諸渾沌」。欲行是術。必先得一言。曰「渾沌語」。乃行是術曰。\\n\\t施「斬渾沌」於「渾沌語」。名之曰「渾沌碎」。\\n\\t夫「渾沌碎」之其餘。取一以施「食列」。乃得矣。\\n是謂「食諸渾沌」之術也。\\n\\n\\n吾有一言。曰「「 」」名之曰「挪符」。\\n吾有一言。曰「「\\\\n」」名之曰「抬符」。\\n吾有一術。名之曰「包數」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t吾有一言。名之曰「正負」。\\n\\t若「甲」小於零者。\\n\\t\\t乘「甲」以負一。昔之「甲」者。今其是矣。\\n\\t\\t昔之「正負」者。今「「負」」是矣。\\n\\t云云。\\n\\t除「甲」以一。所餘幾何。名之曰「小數」\\n\\t減「小數」於「甲」。名之曰「整數」。\\n\\t吾有二言。名之曰「小」曰「整」。\\n\\t恆為是。若「整數」不大於零者乃止也。\\n\\t\\t除「整數」以十。所餘幾何。名之曰「位」。\\n\\t\\t加「位」以一。夫「位名」之其。加其以「整」。昔之「整」者。今其是矣。\\n\\t\\t減「整數」以「位」。除其以十。昔之「整數」者。今其是矣。\\n\\t云云。\\n\\t恆為是。若「小數」不大於零者乃止也。\\n\\t\\t乘「小數」以十。昔之「小數」者。今其是矣。\\n\\t\\t除「小數」以一。所餘幾何。名之曰「位」。\\n\\t\\t加「位」以一。夫「位名」之其。加其於「小」。昔之「小」者。今其是矣。\\n\\t\\t減「小數」以「位」。昔之「小數」者。今其是矣。\\n\\t云云。\\n\\t加「正負」以「整」。昔之「整」者。今其是矣。\\n\\t夫「小」之長。若其然者。\\n\\t\\t加「整」以「「·」」。加其以「小」。乃得矣。\\n\\t云云。\\n\\t乃得「整」。\\n是謂「包數」之術也。\\n\\n吾有一術。名之曰「暗包渾沌」。欲行是術。必先得一言曰「類」。一元曰「實」。一數曰「挪抬」。乃行是術曰。\\n\\t吾有一言。名之曰「渾沌語」。\\n\\t若「類」等於「「物」」者。\\n\\t\\t加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。\\n\\t\\t夫「實」。加「挪抬」以一。取二以施「包物」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。\\n\\t\\t為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。\\n\\t\\t加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。\\n\\n\\t或若「類」等於「「列」」者。\\n\\t\\t加「渾沌語」以「抬符」昔之「渾沌語」者。今其是矣。\\n\\t\\t夫「實」。加「挪抬」以一。取二以施「包列」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。\\n\\t\\t為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。\\n\\t\\t加「渾沌語」以「「也」」加其以「抬符」。昔之「渾沌語」者。今其是矣。\\n\\n\\t或若「類」等於「「言」」者。\\n\\t\\t加「渾沌語」以「引起」加其以「實」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。\\n\\t或若「類」等於「「爻」」者。\\n\\t\\t吾有一言。曰「「陽」」。名之曰「爻名」\\n\\t\\t夫「實」。若其不然者。昔之「爻名」者。今「「陰」」是矣也。\\n\\t\\t加「渾沌語」以「引起」加其以「爻名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。\\n\\t或若「類」等於「「數」」者。\\n\\t\\t施「包數」於「實」。名之曰「數名」。\\n\\t\\t加「渾沌語」以「引起」加其以「數名」加其以「引迄」。加其以「抬符」昔之「渾沌語」者。今其是矣。\\n\\t云云。\\n\\t乃得「渾沌語」\\n是謂「暗包渾沌」之術也。\\n\\n吾有一術。名之曰「包列」。欲行是術。必先得一列曰「渾沌列」。一數曰「挪抬」。乃行是術曰。\\n\\t吾有一言。名之曰「渾沌語」。\\n\\t凡「渾沌列」中之「實」\\n\\t\\t施「識類」於「實」。名之曰「類」。\\n\\n\\t\\t為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。\\n\\t\\t加「渾沌語」以「類」。\\n\\t\\t昔之「渾沌語」者。今其是矣。\\n\\n\\t\\t施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。\\n\\t云云。\\n\\t乃得「渾沌語」\\n是謂「包列」之術也。\\n\\n吾有一術。名之曰「包物」。欲行是術。必先得一物曰「渾沌物」。一數曰「挪抬」。乃行是術曰。\\n\\n\\t吾有一言。名之曰「渾沌語」。\\n\\n\\t施「列物之端」於「渾沌物」。名之曰「諸端」。\\n\\n\\t凡「諸端」中之「端」\\n\\t\\t施「取物」於「渾沌物」於「端」。名之曰「實」。\\n\\t\\t施「識類」於「實」。名之曰「類」。\\n\\n\\t\\t為是「挪抬」遍。加「渾沌語」以「挪符」。昔之「渾沌語」者。今其是矣也。\\n\\t\\t加「渾沌語」以「「之」」。加其以「引起」。加其以「端」。加其以「引迄」。加其以「類」。\\n\\t\\t昔之「渾沌語」者。今其是矣。\\n\\n\\t\\t施「暗包渾沌」於「類」於「實」於「挪抬」。加其於「渾沌語」。昔之「渾沌語」者。今其是矣。\\n\\t云云。\\n\\t乃得「渾沌語」\\n是謂「包物」之術也。\\n\\n\\n今有一術。名之曰「包渾沌」。欲行是術。必先得一物。曰「渾沌物」。乃行是術曰。\\n\\t施「包物」於「渾沌物」於一。名之曰「餛飩語」。\\n\\t加「抬符」以「餛飩語」。加其於「「物」」。加其以「「也」」。乃得矣。\\n是謂「包渾沌」之術也。\\n\\n\\n今有一術。名之曰「包諸渾沌」。欲行是術。必先得一列。曰「渾沌列」。乃行是術曰。\\n\\t施「包列」於「渾沌列」於一。名之曰「餛飩語」。\\n\\t加「抬符」以「餛飩語」。加其於「「列」」。加其以「「也」」。乃得矣。\\n是謂「包諸渾沌」之術也。\\n\\n\";","export default \"吾有二數。曰一。曰一。名之曰「進制」。曰「退制」。\\n吾有三數。曰零。曰一。曰一。名之曰「總算位」。曰「上位冪」。曰「下位冪」。\\n吾有三數。曰零。曰一。曰一。名之曰「至大指」。曰「巨位冪」。曰「至巨數」。\\n吾有三數。曰零。曰一。曰一。名之曰「至小指」。曰「微位冪」。曰「至微數」。\\n吾有一數。曰一。名之曰「位極差」。\\n吾有二數。曰零。曰一。名之曰「浮點零」。曰「浮點一」。\\n\\n吾有一術。名之曰「試界」。欲行是術。必先得三數。曰「限」。曰「元」。曰「基」。二術。曰「合」。曰「據」。乃行是術曰。\\n\\t吾有一術。名之曰「造表列」。欲行是術。必先得二數。曰「引」。曰「實」。乃行是術曰。\\n\\t\\t吾有一物。名之曰「表列」。其物如是。\\n\\t\\t\\t物之「「引」」者。數曰「引」。\\n\\t\\t\\t物之「「實」」者。數曰「實」。\\n\\t\\t是謂「表列」之物也。\\n\\t\\t乃得「表列」。\\n\\t是謂「造表列」之術也。\\n\\t吾有一術。名之曰「新據」。欲行是術。必先得二數。曰「引」。曰「實」。乃行是術曰。\\n\\t\\t若「引」不小於「限」者。乃得陽也。\\n\\t\\t施「據」於「實」。若其然者。乃得陽也。\\n\\t\\t乃得陰。\\n\\t是謂「新據」之術也。\\n\\n\\t施「新據」於零。於「元」。若其然者。夫零。夫「元」。取二以施「造表列」。乃得矣。云云。\\n\\t施「新據」於一。於「基」。若其然者。夫一。夫「基」。取二以施「造表列」。乃得矣。云云。\\n\\t吾有二數。曰一。曰「基」。名之曰「引」。曰「實」。\\n\\t吾有一列。名之曰「記表列」。\\n\\t恆為是。\\n\\t\\t加「引」於「引」。名之曰「新引」。\\n\\t\\t夫「實」。夫「實」。取二以施「合」。名之曰「新實」。\\n\\t\\t施「新據」於「新引」。於「新實」。若其然者。乃止也。\\n\\t\\t夫「引」。夫「實」。取二以施「造表列」。充「記表列」以其。\\n\\t\\t昔之「引」者。今「新引」是矣。\\n\\t\\t昔之「實」者。今「新實」是矣。\\n\\t云云。\\n\\t夫「記表列」之長。名之曰「甲」。\\n\\t恆為是。\\n\\t\\t若「甲」等於零者。乃止也。\\n\\t\\t夫「記表列」之「甲」。名之曰「表列」。\\n\\t\\t夫「表列」之「「引」」。加其於「引」。名之曰「新引」。\\n\\t\\t夫「表列」之「「實」」。夫「實」。取二以施「合」。名之曰「新實」。\\n\\t\\t施「新據」於「新引」。於「新實」。若其不然者。\\n\\t\\t\\t昔之「引」者。今「新引」是矣。\\n\\t\\t\\t昔之「實」者。今「新實」是矣。\\n\\t\\t云云。\\n\\t\\t減一於「甲」。昔之「甲」者。今其是矣。\\n\\t云云。\\n\\t加一於「引」。夫「基」。夫「實」。取二以施「合」。取二以施「造表列」。乃得矣。\\n是謂「試界」之術也。\\n\\n吾有一術。名之曰「盤古」。乃行是術曰。\\n\\t除一於三。若其等於零者。\\n\\t\\t噫。夫「「告。計算機除不盡而捨餘者。不可行本算經之術。」」。書之。\\n\\t\\t乃歸空無也。\\n\\n\\t有數五分。名之曰「寅」。減「寅」以「寅」。名之曰「卯」。乘「卯」以「卯」。昔之「浮點零」者。今其是矣。\\n\\t加一於「浮點零」。昔之「浮點一」者。今其是矣。\\n\\n\\t吾有一列。名之曰「素數」。充「素數」以二。以三。以五。以七。以十一。以十三。\\n\\t有數零。名之曰「進制素因數」。\\n\\t昔之「進制」者。今「浮點一」是矣。\\n\\t凡「素數」中之「法」。\\n\\t\\t加一於「法」。除其以「法」。減其以一。乘其以「法」。名之曰「餘」。\\n\\t\\t若「餘」等於一者。\\n\\t\\t\\t乘「法」於「進制」。昔之「進制」者。今其是矣。\\n\\t\\t\\t加一於「進制素因數」。昔之「進制素因數」者。今其是矣。\\n\\t\\t云云。\\n\\t\\t若「餘」等於零者。\\n\\t\\t\\t噫。夫「「告。計算機除不盡而不得分釐者。不可行本算經之術。」」。書之。\\n\\t\\t\\t乃歸空無也。\\n\\t云云。\\n\\t若「進制素因數」大於二者。\\n\\t\\t噫。夫「「告。計算機掩絲毫之瑕而求整者。不可行本算經之術。」」。書之。\\n\\t\\t乃歸空無也。\\n\\t若「進制」不等於二者。\\n\\t\\t噫。夫「「告。計算機非二進者。不可行本算經之術。」」。書之。\\n\\t\\t乃歸空無也。\\n\\t除「進制」於一。昔之「退制」者。今其是矣。\\n\\n\\t吾有一術。名之曰「加」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t\\t加「甲」於「乙」。乃得矣。\\n\\t是謂「加」之術也。\\n\\t吾有一術。名之曰「乘」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t\\t乘「甲」於「乙」。乃得矣。\\n\\t是謂「乘」之術也。\\n\\t吾有一術。名之曰「位溢乎」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t\\t乘「甲」以「進制」。名之曰「乙」。\\n\\t\\t加一於「乙」。減其以「乙」。若其等於一者。乃得陰。若非。乃得陽也。\\n\\t是謂「位溢乎」之術也。\\n\\n\\t有數一萬。名之曰「試位限」。\\n\\t施「試界」於「試位限」。於「浮點一」。於「進制」。於「乘」。於「位溢乎」。名之曰「算限表」。\\n\\t夫「算限表」之「「引」」。若其不小於「試位限」者。\\n\\t\\t噫。夫「「告。計算機算位無限者。不可行本算經之術。」」。書之。\\n\\t\\t乃歸空無也。\\n\\t夫「算限表」之「「引」」。加其以一。昔之「總算位」者。今其是矣。\\n\\t夫「算限表」之「「實」」。昔之「上位冪」者。今其是矣。\\n\\t除一以「上位冪」。昔之「下位冪」者。今其是矣。\\n\\t加一以「下位冪」。減其以一。若其不等於「下位冪」者。\\n\\t\\t噫。夫「「告。計算機非二進者。不可行本算經之術。」」。書之。\\n\\t\\t乃歸空無也。\\n\\n\\t吾有一術。名之曰「上溢乎」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t\\t乘「甲」以「進制」。名之曰「乙」。\\n\\t\\t乘「乙」以「進制」。若其大於「乙」者。乃得陰。若非。乃得陽也。\\n\\t是謂「上溢乎」之術也。\\n\\t吾有一術。名之曰「下溢乎」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t\\t乘「甲」以「退制」。名之曰「乙」。\\n\\t\\t若「乙」等於零者。乃得陽也。\\n\\t\\t若「乙」小於「甲」者。乃得陰也。\\n\\t\\t乃得陽。\\n\\t是謂「下溢乎」之術也。\\n\\n\\t有數一億。名之曰「試指限」。\\n\\t施「試界」於「試指限」。於「浮點一」。於「進制」。於「乘」。於「上溢乎」。名之曰「上限表」。\\n\\t夫「上限表」之「「引」」。昔之「至大指」者。今其是矣。\\n\\t夫「上限表」之「「實」」。昔之「巨位冪」者。今其是矣。\\n\\t減「進制」以「下位冪」。乘其以「巨位冪」。昔之「至巨數」者。今其是矣。\\n\\n\\t施「試界」於「試指限」。於「浮點一」。於「退制」。於「乘」。於「下溢乎」。名之曰「下限表」。\\n\\t夫「下限表」之「「引」」。減其於「總算位」。減其以一。昔之「至小指」者。今其是矣。\\n\\t夫「下限表」之「「實」」。昔之「至微數」者。今其是矣。\\n\\t乘「至微數」以「上位冪」。昔之「微位冪」者。今其是矣。\\n\\t減「總算位」於「至小指」。減其於「至大指」。昔之「位極差」者。今其是矣。\\n\\n\\t注曰「「以上驗算制。」」\\n是謂「盤古」之術也。\\n施「盤古」。\\n\\n注曰「「圓周率。同Javascript之Math.PI也。」」\\n今有一數。曰三·一四一五九二六五三五八九七九三二三八四六二六四三三八三二七九五〇二八八四一九七。名之曰「圓周率」。\\n注曰「「倍圓周率。同Javascript之Math.PI * 2也。」」\\n今有一數。曰六·二八三一八五三〇七一七九五八六四七六九二五二八六七六六五五九〇〇五七六八三九四。名之曰「倍圓周率」。\\n注曰「「半圓周率。同Javascript之Math.PI / 2也。」」\\n今有一數。曰一·五七〇七九六三二六七九四八九六六一九二三一三二一六九一六三九七五一四四二〇九九。名之曰「半圓周率」。\\n注曰「「四分圓周率。同Javascript之Math.PI / 4也。」」\\n今有一數。曰〇·七八五三九八一六三三九七四四八三〇九六一五六六〇八四五八一九八七五七二一〇四九三。名之曰「四分圓周率」。\\n注曰「「自然常數。同Javascript之Math.E也。」」\\n今有一數。曰二·七一八二八一八二八四五九〇四五二三五三六〇二八七四七一三五二六六二四九七七五七。名之曰「自然常數」。\\n注曰「「歐拉常數。同Javascript之0.5772156649015329也。」」\\n今有一數。曰〇·五七七二一五六六四九〇一五三二八六〇六〇六五一二〇九〇〇八二四〇二四三一〇四二二。名之曰「歐拉常數」。\\n注曰「「黃金分割數。同Javascript之1.618033988749895也。」」\\n今有一數。曰一·六一八〇三三九八八七四九八九四八四八二〇四五八六八三四三六五六三八一一七七二〇。名之曰「黃金分割數」。\\n注曰「「二之平方根。同Javascript之Math.SQRT2也。」」\\n今有一數。曰一·四一四二一三五六二三七三〇九五〇四八八〇一六八八七二四二〇九六九八〇七八五七〇。名之曰「二之平方根」。\\n注曰「「二之對數。同Javascript之Math.LN2也。」」\\n今有一數。曰〇·六九三一四七一八〇五五九九四五三〇九四一七二三二一二一四五八一七六五六八〇七五五。名之曰「二之對數」。\\n注曰「「十之對數。同Javascript之Math.LN10也。」」\\n今有一數。曰二·三〇二五八五〇九二九九四〇四五六八四〇一七九九一四五四六八四三六四二〇七六〇一。名之曰「十之對數」。\\n\\n注曰「「不可算數乎。同Javascript之Number.isNaN也。」」\\n今有一術。名之曰「不可算數乎」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t若「甲」等於「甲」者。乃得陰。\\n\\t若非。乃得陽也。\\n是謂「不可算數乎」之術也。\\n\\n吾有一術。名之曰「下溢」。欲行是術。必先得一數。曰「符」。乃行是術曰。\\n\\t乘「符」以「微位冪」。乘其以「至微數」。乃得矣。\\n是謂「下溢」之術也。\\n\\n吾有一術。名之曰「上溢」。欲行是術。必先得一數。曰「符」。乃行是術曰。\\n\\t乘「符」以「至巨數」。乘其以「至巨數」。乃得矣。\\n是謂「上溢」之術也。\\n\\n吾有一術。名之曰「除以零」。欲行是術。必先得一數。曰「符」。乃行是術曰。\\n\\t除「符」以「浮點零」。乃得矣。\\n是謂「除以零」之術也。\\n\\n吾有一術。名之曰「不可算」。乃行是術曰。\\n\\t除「浮點零」於「浮點零」。乃得矣。\\n是謂「不可算」之術也。\\n\\n吾有一術。名之曰「求進冪」。欲行是術。必先得一數。曰「位」。乃行是術曰。\\n\\t吾有一術。名之曰「吾之冪」。欲行是術。必先得二數。曰「底」。曰「指」。乃行是術曰。\\n\\t\\t有數「底」。名之曰「甲」。\\n\\t\\t有數「浮點一」。名之曰「冪」。\\n\\t\\t恆為是。\\n\\t\\t\\t若「指」等於零者。乃止也。\\n\\t\\t\\t除「指」以二。所餘幾何。名之曰「餘」。\\n\\t\\t\\t若「餘」大於零者。乘「甲」於「冪」。昔之「冪」者。今其是矣。云云。\\n\\t\\t\\t乘「甲」於「甲」。昔之「甲」者。今其是矣。\\n\\t\\t\\t減「餘」於「指」。除其以二。昔之「指」者。今其是矣。\\n\\t\\t云云。\\n\\t\\t乃得「冪」。\\n\\t是謂「吾之冪」之術也。\\n\\t若「位」小於零者。\\n\\t\\t夫「退制」。減零以「位」。取二以施「吾之冪」。乃得矣。\\n\\t若非。\\n\\t\\t夫「進制」。夫「位」。取二以施「吾之冪」。乃得矣。\\n\\t云云。\\n是謂「求進冪」之術也。\\n\\n吾有三數。名之曰「取位常數甲」。曰「取位常數乙」。曰「取位上溢限」。\\n吾有三數。名之曰「分算常數」。曰「分算上溢限甲」。曰「分算上溢限乙」。\\n\\n吾有一術。名之曰「伏羲」。乃行是術曰。\\n\\t加一於「上位冪」。昔之「取位常數甲」者。今其是矣。\\n\\t除二於「下位冪」。減其於一。昔之「取位常數乙」者。今其是矣。\\n\\t除「上位冪」於「巨位冪」。昔之「取位上溢限」者。今其是矣。\\n\\n\\t加一於「總算位」。名之曰「甲」。\\n\\t除二於「甲」。所餘幾何。減其於「甲」。除其以二。名之曰「半算位」。\\n\\t施「求進冪」於「半算位」。名之曰「半位冪」。\\n\\t加一於「半位冪」。昔之「分算常數」者。今其是矣。\\n\\t除「半位冪」於「巨位冪」。昔之「分算上溢限甲」者。今其是矣。\\n\\t乘「半位冪」於「下位冪」。減其於「進制」。乘其以「巨位冪」。昔之「分算上溢限乙」者。今其是矣。\\n是謂「伏羲」之術也。\\n施「伏羲」。\\n\\n吾有一術。名之曰「取本位冪」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「二進者方可施是術。」」\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t若「乙」小於「取位上溢限」者。\\n\\t\\t乘「乙」以「取位常數甲」。名之曰「丙」。\\n\\t\\t乘「丙」以「取位常數乙」。名之曰「丁」。\\n\\t\\t減「丁」於「丙」。乃得矣。\\n\\t若非。\\n\\t\\t乘「乙」以「下位冪」。乘其以「下位冪」。名之曰「丙」。\\n\\t\\t若「丙」小於「取位上溢限」者。\\n\\t\\t\\t施「取本位冪」於「丙」。乘其以「上位冪」。乘其以「上位冪」。乃得矣。\\n\\t\\t若非。\\n\\t\\t\\t乃得「乙」也。\\n\\t云云。\\n是謂「取本位冪」之術也。\\n\\n吾有一術。名之曰「取內鄰數」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「二進者方可施是術。」」\\n\\t乘「甲」以「取位常數乙」。名之曰「乙」。\\n\\t若「乙」不等於「甲」者。\\n\\t\\t乃得「乙」也。\\n\\t若「甲」等於零者。\\n\\t\\t乃得「甲」也。\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「丙」。\\n\\t若「丙」大於「至巨數」者。\\n\\t\\t乘「符」於「至巨數」。乃得矣。云云。\\n\\t減「至微數」於「丙」。乘其以「符」。乃得矣。\\n是謂「取內鄰數」之術也。\\n\\n吾有一術。名之曰「取外鄰數」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「二進者方可施是術。」」\\n\\t施「正負」於「甲」。名之曰「符」。\\n\\t施「取本位冪」於「甲」。乘其以「下位冪」。乘其以「符」。加其以「甲」。名之曰「乙」。\\n\\t若「乙」不等於「甲」者。\\n\\t\\t乃得「乙」也。\\n\\t若「甲」等於零者。\\n\\t\\t乃得「至微數」也。\\n\\t乘「符」於「甲」。加其以「至微數」。乘其以「符」。乃得矣。\\n是謂「取外鄰數」之術也。\\n\\n吾有一術。名之曰「分算」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「分算者。其位上下二分。借二算布之也。」」\\n\\t吾有一列。名之曰「二算」。\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t若「乙」小於「分算上溢限甲」者。\\n\\t\\t乘「甲」以「分算常數」。名之曰「丙」。\\n\\t\\t減「丙」於「甲」。名之曰「丁」。\\n\\t\\t加「丁」於「丙」。名之曰「上甲」。\\n\\t\\t充「二算」以「上甲」。\\n\\t\\t減「甲」以「上甲」。充「二算」以其。\\n\\t若非。\\n\\t\\t若「乙」小於「分算上溢限乙」者。\\n\\t\\t\\t乘「甲」以「下位冪」。名之曰「丙」。\\n\\t\\t\\t施「分算」於「丙」。名之曰「丁」。\\n\\t\\t\\t凡「丁」中之「戊」。\\n\\t\\t\\t\\t乘「戊」以「上位冪」。充「二算」以其。\\n\\t\\t\\t云云。\\n\\t\\t若非。\\n\\t\\t\\t減「乙」以「分算上溢限乙」。名之曰「丙」。\\n\\t\\t\\t若「丙」小於「分算上溢限乙」者。\\n\\t\\t\\t\\t施「正負」於「甲」。名之曰「符」。\\n\\t\\t\\t\\t乘「符」於「分算上溢限乙」。充「二算」以其。\\n\\t\\t\\t\\t乘「符」於「丙」。充「二算」以其。\\n\\t\\t\\t若非。\\n\\t\\t\\t\\t充「二算」以「甲」。以「甲」。\\n\\t\\t\\t云云。\\n\\t\\t云云。\\n\\t云云。\\n\\t乃得「二算」。\\n是謂「分算」之術也。\\n\\n吾有一術。名之曰「造雙數」。欲行是術。必先得二數。曰「上」。曰「下」。乃行是術曰。\\n\\t注曰「「雙數者。以二算布一數。其位倍之。」」\\n\\t吾有一列。名之曰「雙」。充「雙」以「上」。以「下」。乃得「雙」。\\n是謂「造雙數」之術也。\\n\\n吾有一術。名之曰「雙數取反」。欲行是術。必先得一列。曰「甲」。乃行是術曰。\\n\\t夫「甲」之一。乘其以負一。名之曰「上」。\\n\\t夫「甲」之二。乘其以負一。名之曰「下」。\\n\\t施「造雙數」於「上」。於「下」。乃得矣。\\n是謂「雙數取反」之術也。\\n\\n吾有一術。名之曰「以小加大得雙」。欲行是術。必先得二數。曰「小」。曰「大」。乃行是術曰。\\n\\t注曰「「大小者。二數移位之大小也。或前小而後大。或同。不可反之。」」\\n\\t加「小」於「大」。名之曰「上和」。\\n\\t減「大」於「上和」。名之曰「丙」。\\n\\t減「丙」於「小」。名之曰「下和」。\\n\\t施「造雙數」於「上和」。於「下和」。乃得矣。\\n是謂「以小加大得雙」之術也。\\n\\n吾有一術。名之曰「相加得雙」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t加「甲」於「乙」。名之曰「上和」。\\n\\t減「乙」於「上和」。名之曰「丙」。\\n\\t減「丙」於「上和」。名之曰「丁」。\\n\\t減「丙」於「甲」。名之曰「戊」。\\n\\t減「丁」於「乙」。名之曰「己」。\\n\\t加「戊」於「己」。名之曰「下和」。\\n\\t施「造雙數」於「上和」。於「下和」。乃得矣。\\n是謂「相加得雙」之術也。\\n\\n吾有一術。名之曰「加單於雙」。欲行是術。必先得一數。曰「甲」。一列。曰「乙」。乃行是術曰。\\n\\t夫「乙」之一。名之曰「上乙」。夫「乙」之二。名之曰「下乙」。\\n\\t施「相加得雙」於「甲」。於「上乙」。名之曰「丙」。\\n\\t夫「丙」之二。加其於「下乙」。夫「丙」之一。取二以施「以小加大得雙」。乃得矣。\\n是謂「加單於雙」之術也。\\n\\n吾有一術。名之曰「以單減雙得單」。欲行是術。必先得一數。曰「甲」。一列。曰「乙」。是術曰。\\n\\t夫「乙」之一。名之曰「上乙」。夫「乙」之二。名之曰「下乙」。\\n\\t減「甲」於「上乙」。加其以「下乙」。乃得矣。\\n是謂「以單減雙得單」之術也。\\n\\n吾有一術。名之曰「加雙於雙」。欲行是術。必先得二列。曰「甲」。曰「乙」。乃行是術曰。\\n\\t夫「甲」之一。夫「乙」之一。取二以施「相加得雙」。名之曰「丙」。\\n\\t夫「甲」之二。夫「乙」之二。取二以施「相加得雙」。名之曰「丁」。\\n\\t夫「丙」之一。名之曰「上丙」。\\n\\t夫「丙」之二。名之曰「下丙」。\\n\\t夫「丁」之一。加其於「下丙」。夫「上丙」。取二以施「以小加大得雙」。名之曰「戊」。\\n\\t夫「戊」之一。名之曰「上戊」。\\n\\t夫「戊」之二。名之曰「下戊」。\\n\\t夫「丁」之二。加其於「下戊」。夫「上戊」。取二以施「以小加大得雙」。乃得矣。\\n是謂「加雙於雙」之術也。\\n\\n吾有一術。名之曰「自乘得雙」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t乘「甲」以「甲」。名之曰「上方」。\\n\\t施「分算」於「甲」。名之曰「分甲」。\\n\\t夫「分甲」之一。名之曰「上甲」。\\n\\t夫「分甲」之二。名之曰「下甲」。\\n\\t乘「上甲」於「上甲」。減其以「上方」。名之曰「丙」。\\n\\t乘「上甲」於「下甲」。乘其以二。加其於「丙」。名之曰「丁」。\\n\\t乘「下甲」於「下甲」。加其於「丁」。名之曰「下方」。\\n\\t施「造雙數」於「上方」。於「下方」。乃得矣。\\n是謂「自乘得雙」之術也。\\n\\n吾有一術。名之曰「相乘得雙」。欲行是術。必先得二數。曰「甲」。曰「乙」。乃行是術曰。\\n\\t乘「甲」以「乙」。名之曰「上積」。\\n\\t施「分算」於「甲」。名之曰「分甲」。\\n\\t夫「分甲」之一。名之曰「上甲」。\\n\\t夫「分甲」之二。名之曰「下甲」。\\n\\t施「分算」於「乙」。名之曰「分乙」。\\n\\t夫「分乙」之一。名之曰「上乙」。\\n\\t夫「分乙」之二。名之曰「下乙」。\\n\\t乘「上甲」於「上乙」。減其以「上積」。名之曰「丙」。\\n\\t乘「上甲」於「下乙」。加其於「丙」。名之曰「丁」。\\n\\t乘「下甲」於「上乙」。加其於「丁」。名之曰「戊」。\\n\\t乘「下甲」於「下乙」。加其於「戊」。名之曰「下積」。\\n\\t施「造雙數」於「上積」。於「下積」。乃得矣。\\n是謂「相乘得雙」之術也。\\n\\n吾有一術。名之曰「乘單於雙」。欲行是術。必先得一數。曰「甲」。一列。曰「乙」。是術曰。\\n\\t夫「乙」之一。名之曰「上乙」。\\n\\t夫「乙」之二。名之曰「下乙」。\\n\\t施「相乘得雙」於「甲」於「上乙」。名之曰「丙」。\\n\\t乘「甲」於「下乙」。名之曰「丁」。\\n\\t夫「丙」之二。加其以「丁」。夫「丙」之一。取二以施「以小加大得雙」。乃得矣。\\n是謂「乘單於雙」之術也。\\n\\n吾有一術。名之曰「雙數自乘」。欲行是術。必先得一列。曰「甲」。乃行是術曰。\\n\\t夫「甲」之一。名之曰「上甲」。\\n\\t夫「甲」之二。名之曰「下甲」。\\n\\t施「自乘得雙」於「上甲」。名之曰「乙」。\\n\\t乘「上甲」於「下甲」。乘其以二。名之曰「丙」。\\n\\t夫「乙」之二。加其以「丙」。夫「乙」之一。取二以施「以小加大得雙」。乃得矣。\\n是謂「雙數自乘」之術也。\\n\\n吾有一術。名之曰「乘雙於雙」。欲行是術。必先得二列。曰「甲」。曰「乙」。是術曰。\\n\\t夫「甲」之一。名之曰「上甲」。\\n\\t夫「甲」之二。名之曰「下甲」。\\n\\t夫「乙」之一。名之曰「上乙」。\\n\\t夫「乙」之二。名之曰「下乙」。\\n\\t施「相乘得雙」於「上甲」於「上乙」。名之曰「丙」。\\n\\t乘「上甲」於「下乙」。名之曰「丁」。\\n\\t乘「下甲」於「上乙」。加其於「丁」。名之曰「戊」。\\n\\t夫「丙」之二。加其以「戊」。夫「丙」之一。取二以施「以小加大得雙」。乃得矣。\\n是謂「乘雙於雙」之術也。\\n\\n吾有一術。名之曰「求多項式」。欲行是術。必先得一列。曰「式」。一數。曰「甲」。乃行是術曰。\\n\\t有數零。名之曰「解」。\\n\\t夫「式」之長。名之曰「引」。\\n\\t恆為是。\\n\\t\\t若「引」等於零者。乃得「解」也。\\n\\t\\t乘「解」以「甲」。名之曰「乙」。\\n\\t\\t夫「式」之「引」。加其於「乙」。昔之「解」者。今其是矣。\\n\\t\\t減一於「引」。昔之「引」者。今其是矣。\\n\\t云云。\\n是謂「求多項式」之術也。\\n\\n注曰「「浮點移位。同Javascript之x * Math.pow(2, y), y is integer也。」」\\n今有一術。名之曰「浮點移位」。欲行是術。必先得二數。曰「本」。曰「位」。乃行是術曰。\\n\\t注曰「「位正則進位。負則退位。」」\\n\\t若「位」不大於「至大指」者。若「位」不小於「至小指」者。\\n\\t\\t施「求進冪」於「位」。乘其於「本」。乃得矣。\\n\\t云云。云云。\\n\\n\\t施「不可算數乎」於「本」。若其然者。\\n\\t\\t乃得「本」也。\\n\\t施「不可算數乎」於「位」。若其然者。\\n\\t\\t乃得「位」也。\\n\\t若「位」大於零者。\\n\\t\\t加二於「位極差」。名之曰「限」。\\n\\t\\t若「位」不大於「限」者。\\n\\t\\t\\t夫「本」。減「位」以「至大指」。取二以施「浮點移位」。乘其以「巨位冪」。乃得矣。云云。\\n\\t\\t若「位」不大於「至巨數」者。\\n\\t\\t\\t夫「本」。減「限」以「至大指」。取二以施「浮點移位」。乘其以「巨位冪」。乃得矣。云云。\\n\\t\\t若「本」不等於零者。\\n\\t\\t\\t施「正負」於「本」。取一以施「上溢」。乃得矣。\\n\\t\\t若非。\\n\\t\\t\\t施「不可算」。乃得矣。\\n\\t\\t云云。\\n\\t若非。\\n\\t\\t減負二以「位極差」。名之曰「限」。\\n\\t\\t若「位」不小於「限」者。\\n\\t\\t\\t夫「本」。減「位」以「至小指」。取二以施「浮點移位」。乘其以「微位冪」。乃得矣。云云。\\n\\t\\t乘負一於「至巨數」。若「位」不小於其者。\\n\\t\\t\\t夫「本」。減「限」以「至小指」。取二以施「浮點移位」。乘其以「微位冪」。乃得矣。云云。\\n\\t\\t施「絕對」於「本」。若其不大於「至巨數」者。\\n\\t\\t\\t乘「本」以「浮點零」。乃得矣。\\n\\t\\t若非。\\n\\t\\t\\t施「不可算」。乃得矣。\\n\\t\\t云云。\\n\\t云云。\\n是謂「浮點移位」之術也。\\n\\n注曰「「析浮點數。同Javascript之N/A也。」」\\n今有一術。名之曰「析浮點數」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t注曰「「是術得一物。物有三數。曰符。曰位。曰本。符者。正負也。位者。進退位也。本者。本數也。」」\\n\\t注曰「「設計算機二進。若施是術於負六。乃得符負一。位二。本一又五分。」」\\n\\t吾有一術。名之曰「造析」。欲行是術。必先得三數。曰「符」。曰「位」。曰「本」。乃行是術曰。\\n\\t\\t吾有一物。名之曰「析」。其物如是。\\n\\t\\t\\t物之「「符」」者。數曰「符」。\\n\\t\\t\\t物之「「位」」者。數曰「位」。\\n\\t\\t\\t物之「「本」」者。數曰「本」。\\n\\t\\t是謂「析」之物也。\\n\\t\\t乃得「析」。\\n\\t是謂「造析」之術也。\\n\\n\\t吾有一術。名之曰「乘」。欲行是術。必先得二數。曰「丙」。曰「丁」。乃行是術曰。\\n\\t\\t乘「丙」於「丁」。乃得矣。\\n\\t是謂「乘」之術也。\\n\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t若「甲」等於零者。\\n\\t\\t夫「符」。施「除以零」於負一。夫「乙」。取三以施「造析」。乃得矣。云云。\\n\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t夫「符」。夫「甲」。夫「乙」。取三以施「造析」。乃得矣。云云。\\n\\t若「乙」大於「至巨數」者。\\n\\t\\t夫「符」。夫「乙」。夫「乙」。取三以施「造析」。乃得矣。云云。\\n\\n\\t若「乙」不小於一者。\\n\\t\\t吾有一術。名之曰「據」。欲行是術。必先得一數。曰「丙」。乃行是術曰。\\n\\t\\t\\t乘「丙」以「進制」。若其大於「乙」者。乃得陽。若非。乃得陰也。\\n\\t\\t是謂「據」之術也。\\n\\t\\t夫「至大指」。夫「浮點一」。夫「進制」。夫「乘」。夫「據」。取五以施「試界」。名之曰「位表」。\\n\\t\\t夫「位表」之「「引」」。名之曰「位」。\\n\\t\\t夫「位表」之「「實」」。除其於「乙」。名之曰「本」。\\n\\t\\t夫「符」。夫「位」。夫「本」。取三以施「造析」。乃得矣。\\n\\t若非。\\n\\t\\t吾有一術。名之曰「據」。欲行是術。必先得一數。曰「丙」。乃行是術曰。\\n\\t\\t\\t若「丙」不大於「乙」者。乃得陽。若非。乃得陰也。\\n\\t\\t是謂「據」之術也。\\n\\t\\t減「至小指」於「總算位」。夫「浮點一」。夫「退制」。夫「乘」。夫「據」。取五以施「試界」。名之曰「位表」。\\n\\t\\t夫「位表」之「「引」」。減其於零。名之曰「位」。\\n\\t\\t夫「位表」之「「實」」。除其於「乙」。名之曰「本」。\\n\\t\\t夫「符」。夫「位」。夫「本」。取三以施「造析」。乃得矣。\\n\\t云云。\\n是謂「析浮點數」之術也。\\n\\n除「上位冪」以四。名之曰「整除大數限」。\\n\\n注曰「「取底除。同Javascript之{ 商: Math.floor(x / y), 餘: x - y * quo }也。」」\\n今有一術。名之曰「取底除」。欲行是術。必先得二數曰「實」。曰「法」。是術曰。\\n\\t施「正負」於「法」。名之曰「法符」。乘「法」以「法符」。名之曰「法值」。乘「實」以「法符」。名之曰「乙」。\\n\\t施「正負」於「乙」。名之曰「乙符」。乘「乙」以「乙符」。名之曰「實值」。\\n\\t除「法值」於「實值」。所餘幾何。名之曰「餘」。\\n\\t減「餘」於「實值」。除其以「法值」。取一以施「取整」。名之曰「商」。\\n\\t若「乙符」小於零者。若「餘」不等於零者。\\n\\t\\t減「商」於負一。昔之「商」者。今其是矣。\\n\\t\\t減「餘」於「法值」。昔之「餘」者。今其是矣。\\n\\t云云。云云。\\n\\t吾有一物。名之曰「商餘」。其物如是。\\n\\t\\t物之「「商」」者。數曰「商」。\\n\\t\\t物之「「餘」」者。數曰「餘」。\\n\\t是謂「商餘」之物也。\\n\\t乃得「商餘」。\\n是謂「取底除」之術也。\\n\\n注曰「「取整除。同Javascript之{ 商: Math.round(x / y), 餘: x - y * quo }也。」」\\n今有一術。名之曰「取整除」。欲行是術。必先得二數曰「實」。曰「法」。是術曰。\\n\\t施「正負」於「法」。名之曰「法符」。乘「法」以「法符」。名之曰「法值」。\\n\\t施「正負」於「實」。名之曰「實符」。乘「實」以「實符」。名之曰「實值」。\\n\\t乘「法符」於「實符」名之曰「符」。\\n\\t除「法值」於「實值」。所餘幾何。名之曰「餘」。\\n\\t減「餘」於「實值」。除其以「法值」。取一以施「取整」。名之曰「商」。\\n\\t除「法值」以二。若「餘」不小於其者。\\n\\t\\t加「商」以一。昔之「商」者。今其是矣。\\n\\t\\t減「餘」以「法值」。昔之「餘」者。今其是矣。\\n\\t云云。\\n\\t乘「商」以「符」。昔之「商」者。今其是矣。\\n\\t乘「餘」以「符」。昔之「餘」者。今其是矣。\\n\\t吾有一物。名之曰「商餘」。其物如是。\\n\\t\\t物之「「商」」者。數曰「商」。\\n\\t\\t物之「「餘」」者。數曰「餘」。\\n\\t是謂「商餘」之物也。\\n\\t乃得「商餘」。\\n是謂「取整除」之術也。\\n\\n吾有一列。名之曰「半圓周率密率」。\\n\\t施「浮點移位」於八八四二七九七一九〇〇三五五五。於負四十九。充「半圓周率密率」以其。\\n\\t施「浮點移位」於四九六七七五七六〇〇〇二一五一一。於負一百零六。充「半圓周率密率」以其。\\n\\n吾有一術。名之曰「分四象」。欲行是術。必先得二數曰「甲」。曰「上限」。是術曰。\\n\\t注曰「「甲須為有限非零數。」」\\n\\t注曰「「術尚不精。當以極密率除之。」」\\n\\t夫「甲」。夫「半圓周率密率」之一。取二以施「取整除」。名之曰「乙」。\\n\\t夫「乙」之「「商」」。名之曰「商」。夫「乙」之「「餘」」。名之曰「餘」。\\n\\t注曰「「半圓周率弧度即一象。」」\\n\\t施「絕對」於「商」。若其不小於「整除大數限」者。\\n\\t\\t注曰「「商甚大。或算位不足而謬之。」」\\n\\t\\t有數四。名之曰「移位」。\\n\\t\\t夫「甲」。減零以「移位」。取二以施「浮點移位」。夫「上限」。取二以施「分四象」。\\n\\t\\t夫其之「「角」」。夫「移位」。取二以施「浮點移位」。夫「上限」。取二以施「分四象」。乃得矣。\\n\\t云云。\\n\\t施「取底除」於「商」。於四。夫其之「「餘」」。名之曰「象」。\\n\\t夫「半圓周率密率」之二。乘其以「商」。減其於「餘」。昔之「餘」者。今其是矣。\\n\\t施「絕對」於「餘」。若其大於「上限」者。\\n\\t\\t施「分四象」於「餘」。於「上限」。名之曰「解」。\\n\\t\\t夫「解」之「「象」」。加其於「象」。夫四。取二以施「取底除」。\\n\\t\\t夫其之「「餘」」。昔之「解」之「「象」」者。今其是矣。\\n\\t\\t乃得「解」。\\n\\t若非。\\n\\t\\t吾有一物。名之曰「解」。其物如是。\\n\\t\\t\\t物之「「角」」者。數曰「餘」。\\n\\t\\t\\t物之「「象」」者。數曰「象」。\\n\\t\\t是謂「解」之物也。\\n\\t\\t乃得「解」。\\n\\t云云。\\n是謂「分四象」之術也。\\n\\n有數七分九釐。名之曰「正餘弦角限」。注曰「「略大於四十五度。」」\\n\\n吾有一列。名之曰「正弦多項式」。\\n\\t除負一以六。充「正弦多項式」以其。\\n\\t除一以一二〇。充「正弦多項式」以其。\\n\\t除負一以五〇四〇。充「正弦多項式」以其。\\n\\t除一以三六二八八〇。充「正弦多項式」以其。\\n\\t除負一以三九九一六八〇〇。充「正弦多項式」以其。\\n\\t除一以六二二七〇二〇八〇〇。充「正弦多項式」以其。\\n\\t除負一以一三〇七六七四三六八〇〇〇。充「正弦多項式」以其。\\n\\t除一以三五五六八七四二八〇九六〇〇〇。充「正弦多項式」以其。\\n\\n吾有一列。名之曰「餘弦多項式」。\\n\\t除負一以二。充「餘弦多項式」以其。\\n\\t除一以二四。充「餘弦多項式」以其。\\n\\t除負一以七二〇。充「餘弦多項式」以其。\\n\\t除一以四〇三二〇。充「餘弦多項式」以其。\\n\\t除負一以三六二八八〇〇。充「餘弦多項式」以其。\\n\\t除一以四七九〇〇一六〇〇。充「餘弦多項式」以其。\\n\\t除負一以八七一七八二九一二〇〇。充「餘弦多項式」以其。\\n\\t除一以二〇九二二七八九八八八〇〇〇。充「餘弦多項式」以其。\\n\\n注曰「「正弦。同Javascript之Math.sin也。」」\\n今有一術。名之曰「正弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「數小甚矣。乃得其身。否則以泰勒展開求之。復以週期性得其餘。」」\\n\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t若「乙」小於「下位冪」者。\\n\\t\\t乃得「甲」也。\\n\\t若「乙」小於「正餘弦角限」者。\\n\\t\\t乘「甲」於「甲」。名之曰「二次冪」。\\n\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「甲」。加其於「甲」。乃得矣。云云。\\n\\t若「乙」不大於「至巨數」者。\\n\\t\\t施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。\\n\\t\\t夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。\\n\\t\\t乘「丁」於「丁」。名之曰「二次冪」。\\n\\t\\t若「象」等於零者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。乃得矣。云云。\\n\\t\\t若「象」等於一者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乃得矣。云云。\\n\\t\\t若「象」等於二者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。\\n\\t\\t\\t乘其以負一。乃得矣。云云。\\n\\t\\t若「象」等於三者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乃得矣。云云。\\n\\t云云。\\n\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t乃得「甲」也。\\n\\t施「不可算」。乃得矣。\\n是謂「正弦」之術也。\\n\\n注曰「「餘弦。同Javascript之Math.cos也。」」\\n今有一術。名之曰「餘弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「餘弦者。蓋正弦之變化所得。」」\\n\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t若「乙」小於「下位冪」者。\\n\\t\\t乃得一也。\\n\\t若「乙」小於「正餘弦角限」者。\\n\\t\\t乘「甲」於「甲」。名之曰「二次冪」。\\n\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。乃得矣。云云。\\n\\t若「乙」不大於「至巨數」者。\\n\\t\\t施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。\\n\\t\\t夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。\\n\\t\\t乘「丁」於「丁」。名之曰「二次冪」。\\n\\t\\t若「象」等於零者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乃得矣。云云。\\n\\t\\t若「象」等於一者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。\\n\\t\\t\\t乘其以負一。乃得矣。云云。\\n\\t\\t若「象」等於二者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乃得矣。云云。\\n\\t\\t若「象」等於三者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。乃得矣。云云。\\n\\t云云。\\n\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t乃得「甲」也。\\n\\t施「不可算」。乃得矣。\\n是謂「餘弦」之術也。\\n\\n吾有一列。名之曰「反正弦多項式」。\\n\\t充「反正弦多項式」以〇·一六六六六六六六六六六六六六六四六。\\n\\t充「反正弦多項式」以〇·〇七五〇〇〇〇〇〇〇〇〇二三一八五三。\\n\\t充「反正弦多項式」以〇·〇四四六四二八五七〇九九五一八七七六。\\n\\t充「反正弦多項式」以〇·〇三〇三八一九四七六一二五八八一八八。\\n\\t充「反正弦多項式」以〇·〇二二三七二〇三九七二四〇六七九九六。\\n\\t充「反正弦多項式」以〇·〇一七三五五四〇八四二九六九九一六八。\\n\\t充「反正弦多項式」以〇·〇一三九二七九一六二七八〇七六一四〇。\\n\\t充「反正弦多項式」以〇·〇一一八八八五三〇五一〇五三八八〇九。\\n\\t充「反正弦多項式」以〇·〇〇七七四〇一二四四一八〇六六九〇三三。\\n\\t充「反正弦多項式」以〇·〇一六二二三四二二六二三一八二五六二。\\n\\t充「反正弦多項式」以負〇·〇一一〇六六五二一五七八〇七三九七〇。\\n\\t充「反正弦多項式」以〇·〇二八四〇〇七四九二〇一四五一九六二。\\n\\n注曰「「反正弦。同Javascript之Math.asin也。」」\\n今有一術。名之曰「反正弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「小於五分者。以多項式求之。其餘以三角恆等式變化可得。」」\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t有爻陽。名之曰「非常」。\\n\\t若「乙」大於零者。若「乙」不大於一者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。云云。\\n\\t若「非常」者。\\n\\t\\t若「甲」等於零者。乃得「甲」也。\\n\\t\\t施「不可算數乎」於「甲」。若其然者。乃得「甲」也。\\n\\t\\t施「不可算」。乃得矣。\\n\\t云云。\\n\\n\\t若「乙」大於五分者。\\n\\t\\t減「乙」於一。除其以二。名之曰「丙」。\\n\\t\\t施「平方根」於「丙」。乘其以二。名之曰「丁」。\\n\\t\\t施「求多項式」於「反正弦多項式」。於「丙」。乘其以「丙」。乘其以「丁」。加其以「丁」。名之曰「戊」。\\n\\t\\t夫「半圓周率密率」之二。減其以「戊」。名之曰「己」。\\n\\t\\t夫「半圓周率密率」之一。加其於「己」。乘其以「符」。乃得矣。\\n\\t若非。\\n\\t\\t乘「乙」於「乙」。名之曰「丙」。\\n\\t\\t施「求多項式」於「反正弦多項式」。於「丙」。乘其以「丙」。乘其以「甲」。加其於「甲」。乃得矣。\\n\\t云云。\\n是謂「反正弦」之術也。\\n\\n注曰「「反餘弦。同Javascript之Math.acos也。」」\\n今有一術。名之曰「反餘弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「反餘弦者。蓋反正弦之變化所得。」」\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t有爻陽。名之曰「非常」。\\n\\t若「乙」不大於一者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。\\n\\t若「非常」者。\\n\\t\\t施「不可算數乎」於「甲」。若其然者。乃得「甲」也。\\n\\t\\t施「不可算」。乃得矣。\\n\\t云云。\\n\\n\\t若「乙」大於五分者。\\n\\t\\t減「乙」於一。除其以二。名之曰「丙」。\\n\\t\\t施「平方根」於「丙」。乘其以二。名之曰「丁」。\\n\\t\\t施「求多項式」於「反正弦多項式」。於「丙」。乘其以「丙」。乘其以「丁」。加其以「丁」。名之曰「戊」。\\n\\t\\t若「甲」大於零者。\\n\\t\\t\\t乃得「戊」。\\n\\t\\t若非。\\n\\t\\t\\t夫「半圓周率密率」之二。乘其以二。減其以「戊」。名之曰「己」。\\n\\t\\t\\t夫「半圓周率密率」之一。乘其以二。加其於「己」。乃得矣。\\n\\t\\t云云。\\n\\t若非。\\n\\t\\t乘「乙」於「乙」。名之曰「丙」。\\n\\t\\t施「求多項式」於「反正弦多項式」。於「丙」。乘其以「丙」。乘其以「甲」。加其於「甲」。名之曰「戊」。\\n\\t\\t夫「半圓周率密率」之二。減其以「戊」。名之曰「己」。\\n\\t\\t夫「半圓周率密率」之一。加其於「己」。乃得矣。\\n\\t云云。\\n是謂「反餘弦」之術也。\\n\\n注曰「「正切。同Javascript之Math.tan也。」」\\n今有一術。名之曰「正切」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「數小甚矣。乃得其身。其餘或以三角恆等式。或以週期性可得。」」\\n\\n\\t施「絕對」於「甲」。名之曰「乙」。\\n\\t若「乙」小於「下位冪」者。\\n\\t\\t乃得「甲」也。\\n\\t若「乙」小於「正餘弦角限」者。\\n\\t\\t乘「甲」於「甲」。名之曰「二次冪」。\\n\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「甲」。加其於「甲」。名之曰「勾」。\\n\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。名之曰「股」。\\n\\t\\t除「勾」以「股」。乃得矣。云云。\\n\\t若「乙」不大於「至巨數」者。\\n\\t\\t施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。\\n\\t\\t夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。\\n\\t\\t乘「丁」於「丁」。名之曰「二次冪」。\\n\\t\\t若「象」等於零者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。名之曰「勾」。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。名之曰「股」。\\n\\t\\t\\t除「勾」以「股」。乃得矣。云云。\\n\\t\\t若「象」等於一者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。名之曰「勾」。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。\\n\\t\\t\\t乘其以負一。名之曰「股」。\\n\\t\\t\\t除「勾」以「股」。乃得矣。云云。\\n\\t\\t若「象」等於二者。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。\\n\\t\\t\\t乘其以負一。名之曰「勾」。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。名之曰「股」。\\n\\t\\t\\t除「勾」以「股」。乃得矣。云云。\\n\\t\\t若「象」等於三者。\\n\\t\\t\\t施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。名之曰「勾」。\\n\\t\\t\\t施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。乘其以「丁」。加其於「丁」。名之曰「股」。\\n\\t\\t\\t除「勾」以「股」。乃得矣。云云。\\n\\t云云。\\n\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t乃得「甲」也。\\n\\t施「不可算」。乃得矣。\\n是謂「正切」之術也。\\n\\n吾有一列。名之曰「反正切多項式」。\\n\\t充「反正切多項式」以負〇·三三三三三三三三三三三三三三三二六。\\n\\t充「反正切多項式」以〇·一九九九九九九九九九九九九二二六八。\\n\\t充「反正切多項式」以負〇·一四二八五七一四二八四二一〇九五七。\\n\\t充「反正切多項式」以〇·一一一一一一一〇九九六五六八一〇三。\\n\\t充「反正切多項式」以負〇·〇九〇九〇九〇四五七三六一九二八〇九。\\n\\t充「反正切多項式」以〇·〇七六九二二〇二二一一〇八五〇六九六。\\n\\t充「反正切多項式」以負〇·〇六六六五〇九六二七三七〇九三七五五。\\n\\t充「反正切多項式」以〇·〇五八六六八一九一二四六一七二三一三。\\n\\t充「反正切多項式」以負〇·〇五一五九〇五五四五〇八四〇七四八七。\\n\\t充「反正切多項式」以〇·〇四二八八一四六一二三五七三四五六〇。\\n\\t充「反正切多項式」以負〇·〇二九〇三〇一七〇一六〇九七五七五一。\\n\\t充「反正切多項式」以〇·〇一一二〇八四九一一九三〇八七七九二。\\n\\n注曰「「反正切。同Javascript之Math.atan也。」」\\n今有一術。名之曰「反正切」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「小於五分者。以多項式求之。其餘以三角恆等式變化可得。」」\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t有爻陽。名之曰「非常」。\\n\\t若「乙」大於零者。若「乙」不大於「至巨數」者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。云云。\\n\\t若「非常」者。\\n\\t\\t若「乙」等於零者。乃得「甲」也。\\n\\t\\t若「乙」大於「至巨數」者。乘「符」於「半圓周率」。乃得矣。云云。\\n\\t\\t乃得「甲」。\\n\\t云云。\\n\\n\\t若「乙」小於五分者。\\n\\t\\t乘「乙」於「乙」。名之曰「丙」。\\n\\t\\t施「求多項式」於「反正切多項式」。於「丙」。乘其以「丙」。乘其以「甲」。加其於「甲」。乃得矣。\\n\\t或若「乙」大於二者。\\n\\t\\t除「乙」於一。名之曰「丁」。\\n\\t\\t乘「丁」於「丁」。名之曰「丙」。\\n\\t\\t施「求多項式」於「反正切多項式」。於「丙」。乘其以「丙」。乘其以「丁」。加其於「丁」。名之曰「戊」。\\n\\t\\t夫「半圓周率密率」之二。減其以「戊」。名之曰「己」。\\n\\t\\t夫「半圓周率密率」之一。加其於「己」。乘其以「符」。乃得矣。\\n\\t若非。\\n\\t\\t減「乙」以一。名之曰「庚」。加「乙」於一。除其於「庚」。名之曰「丁」。\\n\\t\\t乘「丁」於「丁」。名之曰「丙」。\\n\\t\\t施「求多項式」於「反正切多項式」。於「丙」。乘其以「丙」。乘其以「丁」。加其於「丁」。名之曰「戊」。\\n\\t\\t夫「半圓周率密率」之二。除其以二。加其於「戊」。名之曰「己」。\\n\\t\\t夫「半圓周率密率」之一。除其以二。加其於「己」。乘其以「符」。乃得矣。\\n\\t云云。\\n是謂「反正切」之術也。\\n\\n\\n注曰「「勾股求角。同Javascript之Math.atan2也。」」\\n今有一術。名之曰「勾股求角」。欲行是術。必先得二數曰「甲」。曰「乙」。乃行是術曰。\\n\\t注曰「「反正切之分類討論也」」\\n\\t施「絕對」於「甲」。若其大於「至巨數」者。\\n\\t\\t施「絕對」於「乙」。若其大於「至巨數」者。\\n\\t\\t\\t施「正負」於「甲」。施「正負」於「乙」。取二以施「勾股求角」。乃得矣。\\n\\t\\t云云。\\n\\t云云。\\n\\n\\t若「乙」等於零者。\\n\\t\\t若「甲」大於零者。乃得「半圓周率」也。\\n\\t\\t若「甲」小於零者。減零以「半圓周率」乃得其也。\\n\\t\\t乃得零也。\\n\\n\\t除「甲」以「乙」。取一以施「反正切」。名之曰「丙」。\\n\\t若「乙」大於零者。乃得「丙」也。\\n\\t若「甲」不小於零者。加「丙」以「圓周率」。乃得矣。云云。\\n\\n\\t減「丙」以「圓周率」。乃得矣。\\n\\n是謂「勾股求角」之術也。\\n\\n\\n除五〇六二九七三以二〇九七一五二。名之曰「勾股求弦常數上」。\\n有數負〇·〇〇〇〇〇〇〇九五〇〇六〇五五三四一八二三三一一二七五七九〇三〇一九二一四三〇三二八一二四六二。\\n\\t名之曰「勾股求弦常數下」。\\n注曰「「加二之平方根於一也。」」\\n\\n注曰「「勾股求弦。同Javascript之Math.hypot也。」」\\n今有一術。名之曰「勾股求弦」。欲行是術。必先得二數曰「勾」。曰「股」。乃行是術曰。\\n\\t施「絕對」於「勾」。名之曰「甲」。\\n\\t施「絕對」於「股」。名之曰「乙」。\\n\\t若「甲」等於零者。乃得「乙」也。\\n\\t若「乙」等於零者。乃得「甲」也。\\n\\t若「甲」大於「至巨數」者。乃得「甲」也。\\n\\t若「乙」大於「至巨數」者。乃得「乙」也。\\n\\t施「不可算數乎」於「甲」。若其然者。乃得「甲」也。\\n\\t施「不可算數乎」於「乙」。若其然者。乃得「乙」也。\\n\\t若「乙」大於「甲」者。\\n\\t\\t有數「甲」。名之曰「借」。\\n\\t\\t昔之「甲」者。今「乙」是矣。\\n\\t\\t昔之「乙」者。今「借」是矣。\\n\\t云云。\\n\\n\\t減「乙」於「甲」。名之曰「丙」。\\n\\t若「丙」等於「甲」者。\\n\\t\\t乃得「甲」。\\n\\t或若「丙」大於「乙」者。\\n\\t\\t除「乙」於「甲」。名之曰「丁」。\\n\\t\\t乘「丁」於「丁」。加其於一。取一以施「平方根」。加其於「丁」。\\n\\t\\t除其於「乙」。加其於「甲」。乃得矣。\\n\\t若非。\\n\\t\\t除「乙」於「丙」。名之曰「戊」。\\n\\t\\t加「戊」於二。乘其以「戊」。名之曰「己」。\\n\\t\\t加「己」於二。取一以施「平方根」。加其於「二之平方根」。除其於「己」。名之曰「庚」。\\n\\t\\t加「庚」於「勾股求弦常數下」。加其於「戊」。加其於「勾股求弦常數上」。\\n\\t\\t除其於「乙」。加其於「甲」。乃得矣。\\n\\t云云。\\n是謂「勾股求弦」之術也。\\n\\n除一百四十五萬三千六百三十五以二百零九萬七千一百五十二。名之曰「二之對數上」。\\n有數負〇·〇〇〇〇〇〇〇〇一九〇四六五四二九九九五七七六七八七八五四一八二三四三一九二四四九九八六五六四〇。\\n\\t名之曰「二之對數下」。\\n\\n吾有一列。名之曰「對數多項式甲」。\\n\\t除一以三。充「對數多項式甲」以其。\\n\\t除一以五。充「對數多項式甲」以其。\\n\\t除一以七。充「對數多項式甲」以其。\\n\\t除一以九。充「對數多項式甲」以其。\\n\\t除一以十一。充「對數多項式甲」以其。\\n\\t除一以十三。充「對數多項式甲」以其。\\n\\t除一以十五。充「對數多項式甲」以其。\\n\\t除一以十七。充「對數多項式甲」以其。\\n\\t除一以十九。充「對數多項式甲」以其。\\n注曰「「 x^2 * f(x^2) = atanh(x)/x - 1 」」\\n\\n注曰「「對數。同Javascript之Math.log也。」」\\n今有一術。名之曰「對數」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「自然對數。」」\\n\\t有爻陽。名之曰「非常」。\\n\\t若「甲」大於零者。若「甲」不大於「至巨數」者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。云云。\\n\\t若「非常」者。\\n\\t\\t若「甲」等於零者。\\n\\t\\t\\t施「除以零」於負一。乃得矣。云云。\\n\\t\\t若「甲」小於零者。\\n\\t\\t\\t施「不可算」。乃得矣。云云。\\n\\t\\t乃得「甲」。\\n\\t云云。\\n\\n\\t注曰「「以對數屬性佐泰勒展開」」\\n\\t施「析浮點數」於「甲」。名之曰「析甲」。\\n\\t夫「析甲」之「「位」」。名之曰「位」。\\n\\t夫「析甲」之「「本」」。名之曰「本」。\\n\\t若「本」大於「二之平方根」者。\\n\\t\\t加一於「位」。昔之「位」者。今其是矣。\\n\\t\\t除二於「本」。昔之「本」者。今其是矣。\\n\\t云云。\\n\\t乘「二之對數」於「位」。名之曰「乙」。\\n\\t減「本」以一。名之曰「分子」。加「本」以一。除其於「分子」。名之曰「丙」。\\n\\t乘「丙」以「丙」。名之曰「二次冪」。\\n\\t施「求多項式」於「對數多項式甲」。於「二次冪」。乘其以「二次冪」。乘其以「丙」。加其於「丙」。\\n\\t乘其以二。加其以「乙」。乃得矣。\\n\\n是謂「對數」之術也。\\n\\n加二於「至大指」。乘其以「二之對數」。名之曰「指數上溢限」。\\n減「至小指」以「總算位」。減其以一。乘其以「二之對數」。名之曰「指數下溢限」。\\n\\n吾有一列。名之曰「指數多項式甲」。\\n\\t除一以三。充「指數多項式甲」以其。\\n\\t除負一以四十五。充「指數多項式甲」以其。\\n\\t除二以九百四十五。充「指數多項式甲」以其。\\n\\t除負一以四千七百二十五。充「指數多項式甲」以其。\\n\\t除二以九萬三千五百五十五。充「指數多項式甲」以其。\\n\\t除負一千三百八十二以六億三千八百五十一萬二千八百七十五。充「指數多項式甲」以其。\\n注曰「「 x^2 * f(x^2) = x/tanh(x) - 1 」」\\n\\n注曰「「指數。同Javascript之Math.exp也。」」\\n今有一術。名之曰「指數」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t注曰「「自然指數。」」\\n\\t有爻陽。名之曰「非常」。\\n\\t若「甲」小於「指數上溢限」者。若「甲」大於「指數下溢限」者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。云云。\\n\\t若「非常」者。\\n\\t\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t\\t乃得「甲」也。\\n\\t\\t若「甲」大於零者。\\n\\t\\t\\t若「甲」大於「至巨數」者。\\n\\t\\t\\t\\t乃得「甲」。\\n\\t\\t\\t若非。\\n\\t\\t\\t\\t施「上溢」於一。乃得矣。\\n\\t\\t\\t云云。\\n\\t\\t若非。\\n\\t\\t\\t乘負一於「至巨數」。若「甲」小於其者。\\n\\t\\t\\t\\t乃得「浮點零」。\\n\\t\\t\\t若非。\\n\\t\\t\\t\\t施「下溢」於一。乃得矣。\\n\\t\\t\\t云云。\\n\\t\\t云云。\\n\\t云云。\\n\\n\\t除「甲」以「二之對數」。取一以施「取整」。名之曰「移位數」。\\n\\t乘「二之對數上」於「移位數」。減其於「甲」。名之曰「乙」。\\n\\t乘「二之對數下」於「移位數」。減其於「乙」。名之曰「丙」。\\n\\t注曰「「除二之對數於甲。其餘者丙。以密率求之。」」\\n\\t除二於「丙」。名之曰「丁」。\\n\\t乘「丁」於「丁」。名之曰「戊」。\\n\\t施「求多項式」於「指數多項式甲」。於「戊」。乘其以「戊」。減其於「丁」。名之曰「己」。\\n\\t減「己」於一。除其於「丙」。加其於一。名之曰「庚」。\\n\\t施「浮點移位」於「庚」。於「移位數」。乃得矣。\\n是謂「指數」之術也。\\n\\n吾有一列。名之曰「對數多項式乙上」。充「對數多項式乙上」。\\n\\t以〇·三三三三一七二四二二九四七八五六五三九一一〇五。\\n\\t以〇·二〇四三一三三七三七九六七九〇〇七〇九三五三六。\\n吾有一列。名之曰「對數多項式乙下」。充「對數多項式乙下」。\\n\\t以〇·〇〇〇〇一六〇九一〇三八五四七六七九四三一。\\n\\t以負〇·〇〇四三一三三七三七九六七九〇一〇六七。\\n\\t以〇·一四二八五七一四二八五七一七六四六。\\n\\t以〇·一一一一一一一一一〇九九二五〇七五。\\n\\t以〇·〇九〇九〇九〇九二九八八二一八〇一八。\\n\\t以〇·〇七六九二二八七三三〇三六九五五四四。\\n\\t以〇·〇六六六七八三二一八五七九三二五一五。\\n\\t以〇·〇五八四三七二六四一三一四六七八六七。\\n\\t以〇·〇五九四四三八八四三七八七五一四八四。\\n注曰「「 x^2 * (f0(x^2) + f1(x^2)) = atanh(x)/x - 1 」」\\n\\n吾有一術。名之曰「正數之冪」。欲行是術。必先得二數。曰「底」。曰「指」。是術曰。\\n\\t注曰「「底為有限正數。指為有限數。」」\\n\\n\\t注曰「「以下求底之對數。」」\\n\\t施「析浮點數」於「底」。名之曰「析底」。\\n\\t夫「析底」之「「位」」。名之曰「位」。\\n\\t夫「析底」之「「本」」。名之曰「本」。\\n\\t若「本」大於「二之平方根」者。\\n\\t\\t加一於「位」。昔之「位」者。今其是矣。\\n\\t\\t除二於「本」。昔之「本」者。今其是矣。\\n\\t云云。\\n\\t減「本」以一。名之曰「丙」。\\n\\t加「本」以一。名之曰「丁」。\\n\\t除「丁」於「丙」。名之曰「戊」。\\n\\t夫「戊」。夫「戊」。夫「本」。取二以施「相乘得雙」。取二以施「加單於雙」。名之曰「己」。\\n\\t夫「丙」。夫「己」。取二以施「以單減雙得單」。乘其以負一。除其以「丁」。\\n\\t\\t夫「戊」。取二以施「以小加大得雙」。名之曰「庚」。\\n\\t施「雙數自乘」於「庚」。名之曰「辛」。\\n\\t夫「對數多項式乙下」。夫「辛」之一。取二以施「求多項式」。\\n\\t\\t夫「對數多項式乙上」之二。夫「辛」。取二以施「乘單於雙」。取二以施「加單於雙」。名之曰「壬」。\\n\\t夫「對數多項式乙上」之一。夫「壬」。取二以施「加單於雙」。夫「辛」。取二以施「乘雙於雙」。\\n\\t\\t夫「庚」。取二以施「乘雙於雙」。夫「庚」。取二以施「加雙於雙」。名之曰「癸」。\\n\\t夫「癸」之一。乘其以二。乘「位」於「二之對數上」。取二以施「相加得雙」。名之曰「子」。\\n\\t夫「癸」之二。乘其以二。名之曰「丑」。\\n\\t夫「子」之二。加其以「丑」。名之曰「寅」。\\n\\t乘「位」於「二之對數下」。加其以「寅」。夫「子」之一。取二以施「以小加大得雙」。名之曰「底之對數」。\\n\\n\\t注曰「「以下求冪之對數。」」\\n\\t夫「底之對數」之一。乘其以「指」。名之曰「卯」。\\n\\t若「卯」大於「指數上溢限」者。施「上溢」於一。乃得矣。\\n\\t或若「卯」小於「指數下溢限」者。施「下溢」於一。乃得矣。云云。\\n\\n\\t夫「指」。夫「底之對數」。取二以施「乘單於雙」。名之曰「冪之對數」。\\n\\t夫「冪之對數」之一。除其以「二之對數」。取一以施「取整」。名之曰「移位數」。\\n\\t乘「移位數」以「二之對數下」。乘「移位數」以「二之對數上」。取二以施「以小加大得雙」。\\n\\t\\t取一以施「雙數取反」。夫「冪之對數」。取二以施「加雙於雙」。名之曰「辰」。\\n\\t夫「辰」之一。取一以施「指數」。夫「移位數」。取二以施「浮點移位」。乃得矣。\\n是謂「正數之冪」之術也。\\n\\n注曰「「冪。同Javascript之Math.pow也。」」\\n今有一術。名之曰「冪」。欲行是術。必先得二數。曰「底」。曰「指」。乃行是術曰。\\n\\t若「指」等於零者。乃得一。\\n\\t或若「指」等於一者。乃得「底」。\\n\\t或若「指」等於二者。乘「底」於「底」。乃得矣。\\n\\t或若「指」等於負一者。除「底」於一。乃得矣。\\n\\t或若「指」等於五分者。施「平方根」於「底」。乃得矣。\\n\\t或若「指」等於三者。乘「底」於「底」。乘其於「底」。乃得矣。\\n\\t或若「指」等於負二者。除「底」於一。除其以「底」。乃得矣。\\n\\t或若「指」等於負五分者。施「平方根」於「底」。除其於一。乃得矣。\\n\\t云云。\\n\\n\\t若「底」等於一者。乃得一也。\\n\\n\\t施「不可算數乎」於「底」。若其然者。乃得「底」也。\\n\\t施「不可算數乎」於「指」。若其然者。乃得「指」也。\\n\\n\\t施「絕對」於「底」。名之曰「甲」。\\n\\t施「絕對」於「指」。名之曰「乙」。\\n\\t若「乙」大於「至巨數」者。\\n\\t\\t若「甲」等於一者。\\n\\t\\t\\t乃得一。\\n\\t\\t或若「甲」小於一者。\\n\\t\\t\\t若「指」大於零者。乃得「浮點零」。\\n\\t\\t\\t若非。乃得「乙」也。\\n\\t\\t若非。\\n\\t\\t\\t若「指」大於零者。乃得「乙」。\\n\\t\\t\\t若非。乃得「浮點零」也。\\n\\t\\t云云。\\n\\t云云。\\n\\n\\t吾有三爻。名之曰「指為偶數」。曰「指為奇數」。曰「指非整數」。\\n\\t除二於「乙」。所餘幾何。名之曰「丙」。\\n\\t若「丙」等於零者。昔之「指為偶數」者。今陽是矣。\\n\\t或若「丙」等於一者。昔之「指為奇數」者。今陽是矣。\\n\\t若非。昔之「指非整數」者。今陽是矣。\\n\\t云云。\\n\\n\\t若「底」等於零者。\\n\\t\\t若「指」小於零者。\\n\\t\\t\\t若「指為奇數」者。除「底」於一。乃得矣。\\n\\t\\t\\t若非。除「甲」於一。乃得矣。云云。\\n\\t\\t若非。\\n\\t\\t\\t若「指為奇數」者。乃得「底」。\\n\\t\\t\\t若非。乃得「甲」也。\\n\\t\\t云云。\\n\\t或若「甲」大於「至巨數」者。\\n\\t\\t若「指」小於零者。\\n\\t\\t\\t若「指為奇數」者。施「正負」於「底」。乘其於「浮點零」。乃得矣。\\n\\t\\t\\t若非。乃得「浮點零」也。\\n\\t\\t若非。\\n\\t\\t\\t若「指為奇數」者。乃得「底」。\\n\\t\\t\\t若非。乃得「甲」也。\\n\\t\\t云云。\\n\\t或若「底」小於零者。\\n\\t\\t若「指非整數」者。\\n\\t\\t\\t施「不可算」。乃得矣。\\n\\t\\t或若「指為奇數」者。\\n\\t\\t\\t施「正數之冪」於「甲」於「指」。乘其以負一。乃得矣。\\n\\t\\t云云。\\n\\t云云。\\n\\n\\t施「正數之冪」於「甲」於「指」。乃得矣。\\n是謂「冪」之術也。\\n\\n有數四分一釐七毫三絲一忽九微。名之曰「平方根常數甲」。\\n注曰「「 (2^0.5 - 1) * sqrt((2^0.25 + 2^-0.25) / 2) 」」\\n減一於「二之平方根」。乘其以二。名之曰「平方根常數乙」。\\n乘「上位冪」於「微位冪」。乘其以「進制」。乘其以「進制」。名之曰「平方根下溢界」。\\n\\n注曰「「平方根。同Javascript之Math.sqrt也。」」\\n今有一術。名之曰「平方根」。欲行是術。必先得一數曰「甲」。乃行是術曰。\\n\\t有爻陽。名之曰「非常」。\\n\\t若「甲」不小於「平方根下溢界」者。若「甲」小於「巨位冪」者。\\n\\t\\t昔之「非常」者。今陰是矣。\\n\\t云云。云云。\\n\\t若「非常」者。\\n\\t\\t若「甲」等於零者。\\n\\t\\t\\t乃得「浮點零」也。\\n\\t\\t施「不可算數乎」於「甲」。若其然者。\\n\\t\\t\\t乃得「甲」也。\\n\\t\\t若「甲」大於「至巨數」者。\\n\\t\\t\\t乃得「甲」也。\\n\\t\\t若「甲」小於零者。\\n\\t\\t\\t施「不可算」。乃得矣。云云。\\n\\t\\t若「甲」不大於「平方根下溢界」者。\\n\\t\\t\\t乘「甲」以「上位冪」。乘其以「上位冪」。乘其以「進制」。乘其以「進制」。取一以施「平方根」。\\n\\t\\t\\t乘其以「下位冪」。乘其以「退制」。乃得矣。\\n\\t\\t云云。\\n\\t\\t若「甲」不小於「巨位冪」者。\\n\\t\\t\\t乘「甲」以「退制」。乘其以「退制」。取一以施「平方根」。\\n\\t\\t\\t乘其以「進制」。乃得矣。\\n\\t\\t云云。\\n\\t云云。\\n\\n\\t施「析浮點數」於「甲」。名之曰「析甲」。\\n\\t夫「析甲」之「「位」」。除其以二。名之曰「半位」。\\n\\t施「取底」於「半位」。名之曰「整半位」。\\n\\t夫「析甲」之「「本」」。加其以「二之平方根」。乘其以「平方根常數甲」。名之曰「丁」。\\n\\t減「半位」以「整半位」。乘其以「平方根常數乙」。加其以一。乘其以「丁」。名之曰「戊」。\\n\\t施「求進冪」於「整半位」。名之曰「己」。\\n\\t乘「己」於「戊」。名之曰「乙」。\\n\\t注曰「「以上求疏根」」\\n\\n\\t批曰「「蓋用牛頓法耳」」\\n\\t為是三遍。\\n\\t\\t除「甲」以「乙」。加其以「乙」。除其以二。名之曰「丙」。\\n\\t\\t昔之「乙」者。今「丙」是矣。\\n\\t云云。\\n\\n\\t注曰「「以下校末位。」」\\n\\t乘「己」以「下位冪」。名之曰「庚」。\\n\\t減「庚」於「乙」。名之曰「下數」。\\n\\t施「相乘得雙」於「乙」。於「下數」。名之曰「下積」。\\n\\t夫「下積」之一。若其大於「甲」者。\\n\\t\\t乃得「下數」也。\\n\\t夫「下積」之一。若其等於「甲」者。夫「下積」之二。若其不小於零者。\\n\\t\\t乃得「下數」。\\n\\t云云。云云。\\n\\t注曰「「若甲等於中數乘下數者。其平方根不足下半間數。捨餘得下數也。」」\\n\\n\\t加「庚」於「乙」。名之曰「上數」。\\n\\t施「相乘得雙」於「乙」。於「上數」。名之曰「上積」。\\n\\t夫「上積」之一。若其小於「甲」者。\\n\\t\\t乃得「上數」也。\\n\\t夫「上積」之一。若其等於「甲」者。夫「上積」之二。若其小於零者。\\n\\t\\t乃得「上數」。\\n\\t云云。云云。\\n\\t注曰「「若甲等於中數乘上數者。其平方根不足上半間數。捨餘得中數也。」」\\n\\n\\t乃得「乙」。\\n是謂「平方根」之術也。\\n\\n注曰「「絕對。同Javascript之Math.abs也。」」\\n今有一術。名之曰「絕對」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。乃得矣。\\n是謂「絕對」之術也。\\n\\n注曰「「取頂。同Javascript之Math.ceil也。」」\\n今有一術。名之曰「取頂」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t乘負一於「甲」。取一以施「取底」。乘其以負一。乃得矣。\\n是謂「取頂」之術也。\\n\\n注曰「「取底。同Javascript之Math.floor也。」」\\n今有一術。名之曰「取底」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t注曰「「JavaScript者。除負以正。所餘負也。Python者。除負以正。所餘正也。」」\\n\\t除「乙」以一。所餘幾何。名之曰「丙」。\\n\\t若「丙」大於零者。\\n\\t\\t減「丙」於「乙」。乘其以「符」。名之曰「丁」。\\n\\t\\t若「符」小於零者。\\n\\t\\t\\t減一於「丁」。乃得矣。\\n\\t\\t若非。\\n\\t\\t\\t乃得「丁」也。\\n\\t若非。\\n\\t\\t乃得「甲」也。\\n是謂「取底」之術也。\\n\\n注曰「「取整。同Javascript之Math.round, but rounded away from zero when the fractional part is exactly 0.5也。」」\\n今有一術。名之曰「取整」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t除「乙」以一。所餘幾何。名之曰「丙」。\\n\\t若「丙」等於「丙」者。\\n\\t\\t若「丙」小於五分者。\\n\\t\\t\\t減「丙」於「乙」。乘其以「符」。乃得矣。\\n\\t\\t若非。\\n\\t\\t\\t減「丙」於「乙」。加其以一。乘其以「符」。乃得矣。\\n\\t\\t云云。\\n\\t若非。\\n\\t\\t乃得「甲」也。\\n是謂「取整」之術也。\\n\\n注曰「「捨餘。同Javascript之Math.trunc也。」」\\n今有一術。名之曰「捨餘」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t施「正負」於「甲」。名之曰「符」。乘「符」於「甲」。名之曰「乙」。\\n\\t除「乙」以一。所餘幾何。名之曰「丙」。\\n\\t若「丙」等於「丙」者。\\n\\t\\t減「丙」於「乙」。乘其以「符」。乃得矣。\\n\\t若非。\\n\\t\\t乃得「甲」也。\\n是謂「捨餘」之術也。\\n\\n注曰「「正負。同Javascript之Math.sign也。」」\\n今有一術。名之曰「正負」。欲行是術。必先得一數。曰「甲」。乃行是術曰。\\n\\t若「甲」大於零者。乃得一也。\\n\\t若「甲」小於零者。乃得負一也。\\n\\t乃得「甲」。\\n是謂「正負」之術也。\\n\";","export default \"注曰「「求和。同Javascript之reduce((a,b)=>a+b)也。」」\\n今有一術。名之曰「求和」。欲行是術。必先得一列。曰「列」。乃行是術曰。\\n吾有一數。曰零。名之曰「和」。凡「列」中之「數」。加「和」以「數」。\\n昔之「和」者,今其是也。乃得「和」。是謂「求和」之術也。\\n\\n今有一術。名之曰「算術平均」。欲行是術。必先得一列。曰「列」。乃行是術曰。\\n施「求和」於「列」。名之曰「和」。夫「列」之長。名之曰「長」。除「和」以「長」。\\n名之曰「算術平均數」。乃得「算術平均數」。是謂「算術平均」之術也。\\n\\n今有一術。名之曰「方差」。欲行是術。必先得一列。曰「列」。乃行是術曰。\\n施「算術平均」於「列」。名之曰「算術平均數」。夫「列」之長。名之曰「長」。\\n吾有一數。曰零。名之曰「平方和」。凡「列」中之「數」。減「數」以「算術平均數」。\\n名之曰「偏差」。乘「偏差」以「偏差」。名之曰「偏差之平方」。\\n加「偏差之平方」以「平方和」。名之曰「平方和」。云云。除「平方和」以「長」。\\n名之曰「方差之數」。乃得「方差之數」。是謂「方差」之術也。\\n\";","import {\n  ASCNode,\n  isASCNodeOperator,\n  Token,\n  IdenType,\n  TypeSignature,\n  TypeScope\n} from \"./types\";\nimport { defaultAssert, isRoman } from \"./utils\";\n\nfunction printType(t: IdenType, n = 0, d = 0): string {\n  if (d > 100) {\n    return \"...\";\n  }\n  if (t.type == \"any\") {\n    let abc = \"abcdefghijklmnopqrstuvwxyz\";\n    if (n < 26) {\n      return \"'\" + abc[n];\n    } else {\n      return \"'\" + abc[Math.floor(n / 26)] + abc[n % 26];\n    }\n  }\n  if (t.type == \"arr\") {\n    return \"(\" + printType(t.element, n, d + 1) + \") arr\";\n  }\n  if (t.type == \"fun\") {\n    return (\n      \"(\" +\n      printType(t.in, n, d + 1) +\n      \") -> (\" +\n      printType(t.out, n + 1, d + 1) +\n      \")\"\n    );\n  }\n  if (t.type == \"obj\") {\n    let s = \"{ \";\n    let m = 0;\n    for (let k in t.fields) {\n      s += k + \" : (\" + printType(t.fields[k], n + m, d + 1) + \"), \";\n      m++;\n    }\n    if (s.length > 2) {\n      s = s.slice(0, -2);\n    }\n    s += \" }\";\n    return s;\n  }\n  return t.type;\n}\n\nfunction printSignature(signature: TypeSignature) {\n  let s = \"\";\n  signature = signature.filter(x => Object.keys(x[1]).length);\n  signature.sort((x, y) => x[0][0] - y[0][0]);\n  for (let i = 0; i < signature.length; i++) {\n    for (let j = signature.length - 1; j >= 0; j--) {\n      if (signature[j][0][1] <= signature[i][0][0]) {\n        signature[j][0][1] = 1 / 0;\n        s += \"  \".repeat(signature[j][0][2]) + \"}\\n\";\n      }\n    }\n    s +=\n      \"  \".repeat(signature[i][0][2]) +\n      `[${signature[i][0][0]}-${signature[i][0][1]}] {\\n`;\n    for (let k in signature[i][1]) {\n      s +=\n        \"  \".repeat(signature[i][0][2] + 1) +\n        k +\n        \" : \" +\n        printType(signature[i][1][k]) +\n        \"\\n\";\n    }\n  }\n  for (let j = signature.length - 1; j >= 0; j--) {\n    if (signature[j][0][1] < 1 / 0) {\n      s += \"  \".repeat(signature[j][0][2]) + \"}\\n\";\n    }\n  }\n  return s;\n}\n\nfunction typecheck(asc: ASCNode[], assert = defaultAssert()) {\n  let imported: string[] = [];\n  let strayvar: IdenType[] = [];\n  let scope: TypeScope[] = [{}];\n  let scopestarts: ASCNode[] = [{ pos: 0, op: \"global\" }];\n  let signature: TypeSignature = [];\n  let funstack: string[] = [];\n  let funretcnt: number[] = [];\n  let prevobj = \"\";\n  let took = 0;\n\n  function checkscopei(i: number, name: string) {\n    if (scope[i][name]) {\n      return scope[i][name];\n    }\n    if (!scope[i - 1]) {\n      return;\n    }\n    for (let j = funstack.length - 1; j >= 0; j--) {\n      if (scope[i - 1][funstack[j]]) {\n        let ptr = scope[i - 1][funstack[j]];\n        while (ptr.type == \"fun\") {\n          if (ptr.in.name == name) {\n            return ptr.in;\n          }\n          ptr = ptr.out;\n        }\n      }\n    }\n  }\n\n  function checkscopeall(name: string) {\n    for (let i = scope.length - 1; i >= 0; i--) {\n      let b = checkscopei(i, name);\n      if (b) {\n        return b;\n      }\n    }\n    if (imported.includes(name)) {\n      return inittype(\"any\"); //for now\n    }\n    if (isRoman(name)) {\n      //backdoor for native code\n      return inittype(\"any\");\n    }\n\n    return undefined;\n  }\n\n  function checkscopethis(name: string, pos: number) {\n    assert(\n      \"Scope stack depleted, possibly due to extraneous end-block statement.\",\n      pos,\n      scope.length\n    );\n    return checkscopei(scope.length - 1, name);\n  }\n\n  function inittype(type: IdenType[\"type\"]): IdenType {\n    if (type == \"any\") {\n      return { type: \"any\" };\n    }\n    if (type == \"nil\") {\n      return { type: \"nil\" };\n    }\n    let x: IdenType = { type: type };\n    if (type == \"fun\") {\n      x.in = { type: \"any\" };\n      x.out = { type: \"any\" };\n    } else if (type == \"obj\") {\n      x.fields = {};\n    } else if (type == \"arr\") {\n      x.element = { type: \"any\" };\n    }\n    return x;\n  }\n\n  function gettype(tok: Token): IdenType {\n    if (tok[0] == \"lit\") {\n      return inittype(\"str\");\n    } else if (tok[0] == \"bool\") {\n      return inittype(\"bol\");\n    } else if (tok[0] == \"num\") {\n      return inittype(\"num\");\n    } else if (tok[0] == \"iden\") {\n      return checkscopeall(tok[1]);\n    } else if (tok[0] == \"ans\") {\n      var s = strayvar[strayvar.length - 1];\n      // strayvar = [];\n      return s;\n    }\n    assert(`[Type] Expecting value, found '${tok[0]}'`, tok[2], false);\n  }\n\n  function objfield(t: IdenType, x: string) {\n    if (t.isarg) {\n      t.fields[x] = inittype(\"any\");\n    }\n    return t.fields[x];\n  }\n\n  function scopepush(node: ASCNode) {\n    scope.push({});\n    scopestarts.push(node);\n  }\n\n  function scopepop(node: ASCNode, ...acceptScopeStartOps) {\n    let ss = scopestarts.pop();\n    let s = scope.pop();\n    assert(\n      `[Type] Unexpected '${node.op}' in '${ss.op}' block`,\n      node.pos,\n      acceptScopeStartOps.indexOf(ss.op) >= 0\n    );\n    signature.push([[ss.pos, node.pos, scope.length], s]);\n  }\n\n  function logscope() {\n    console.dir(scope, { depth: null, maxArrayLength: null });\n  }\n\n  function typeEqual(a: IdenType, b: IdenType) {\n    if (a.type == \"any\") {\n      return b;\n    }\n    if (b.type == \"any\") {\n      return a;\n    }\n    if (a.type != b.type) {\n      return false;\n    }\n    if (a.type == b.type) {\n      if (a.type == \"arr\") {\n        if (typeEqual(a.element, b.element)) {\n          return a;\n        }\n        if (b.element) {\n          return b;\n        }\n        if (a.element) {\n          return a;\n        }\n      }\n      if (a.type == \"obj\") {\n        var x;\n        var y;\n        if (Object.keys(a.fields).length > Object.keys(b.fields).length) {\n          [x, y] = [b, a];\n        } else {\n          [x, y] = [a, b];\n        }\n        for (var k in x.fields) {\n          if (!typeEqual(x.fields[k], y.fields[k])) {\n            return false;\n          }\n        }\n        return y;\n      }\n      return a;\n    }\n    return false;\n  }\n\n  function typeassert(who: string, want: IdenType[], got: Token, pos: number) {\n    let t = gettype(got);\n    assert(`[Type] Undeclared variable '${got[1]}'`, pos, t);\n\n    let ok = false;\n    let ut = [];\n    for (let i = 0; i < want.length; i++) {\n      ut.push(\"(\" + printType(want[i]) + \")\");\n      if (typeEqual(want[i], t)) {\n        ok = true;\n        break;\n      }\n    }\n    assert(\n      `[Type] ${who} expecting ${ut.join(\"|\")}, found '${got[1]}' : ${printType(\n        t\n      )}`,\n      pos,\n      ok\n    );\n  }\n\n  for (let i = 0; i < asc.length; i++) {\n    var a = asc[i];\n    // console.log(',,,,,,,',a)\n\n    if (a.op == \"var\") {\n      // console.log(a)\n      for (let j = 0; j < a.count; j++) {\n        if (j >= a.names.length) {\n          strayvar.push(inittype(a.type));\n          continue;\n        }\n\n        assert(\n          `[Type] Variable '${a.names[j]}' redeclared in the same scope`,\n          a.pos,\n          !checkscopethis(a.names[j], a.pos)\n        );\n\n        scope[scope.length - 1][a.names[j]] = inittype(a.type);\n        if (a.type == \"fun\") {\n          funstack.push(a.names[j]);\n          funretcnt.push(0);\n        } else if (a.type == \"obj\") {\n          prevobj = a.names[j];\n        }\n      }\n    } else if (a.op == \"print\") {\n      //pass\n    } else if (a.op == \"fun\") {\n      let ptr = scope[scope.length - 1][funstack[funstack.length - 1]];\n      for (let j = 0; j < a.arity; j++) {\n        ptr.in = inittype(a.args[j].type);\n        if (a.args[j].type == \"obj\") {\n          ptr.in.isarg = true;\n        }\n        ptr.in.name = a.args[j].name;\n        if (j != a.arity - 1) {\n          ptr.out = inittype(\"fun\");\n          ptr = ptr.out;\n        }\n      }\n    } else if (a.op == \"funbody\") {\n      if (asc[i - 1].op != \"fun\") {\n        let ptr = scope[scope.length - 1][funstack[funstack.length - 1]];\n        ptr.in = inittype(\"nil\");\n      }\n      scopepush(a);\n    } else if (a.op == \"funend\") {\n      var f = funstack.pop();\n      var n = funretcnt.pop();\n      scopepop(a, \"funbody\");\n\n      if (n == 0) {\n        var ptr = scope[scope.length - 1][f];\n        while (ptr.out.type == \"fun\") {\n          ptr = ptr.out;\n        }\n        ptr.out = inittype(\"nil\");\n      }\n    } else if (a.op == \"objend\") {\n      //pass\n    } else if (a.op == \"objbody\") {\n      //pass\n    } else if (a.op == \"prop\") {\n      scope[scope.length - 1][prevobj].fields[a.name.slice(1, -1)] = inittype(\n        a.type\n      );\n    } else if (a.op == \"end\") {\n      scopepop(a, \"if\", \"else\", \"for\", \"whiletrue\", \"whilen\");\n    } else if (a.op == \"if\") {\n      if (a.elseif) {\n        scopepop(a, \"if\");\n      }\n      scopepush(a);\n    } else if (a.op == \"else\") {\n      scopepop(a, \"if\");\n      scopepush(a);\n    } else if (a.op == \"return\") {\n      funretcnt[funretcnt.length - 1]++;\n      let ptr;\n      for (let j = 1; j < scope.length; j++) {\n        ptr = scope[scope.length - 1 - j][funstack[funstack.length - 1]];\n        if (ptr) {\n          break;\n        }\n      }\n      while (ptr.out.type == \"fun\") {\n        ptr = ptr.out;\n      }\n      if (a.value == undefined) {\n        ptr.out = inittype(\"nil\");\n      } else {\n        let ty = gettype(a.value);\n        // console.log(strayvar)\n        // console.log(funstack[funstack.length-1],ty,ptr)\n        if (ptr.out.type == \"any\" || ptr.out.type == \"nil\") {\n          ptr.out = Object.assign({}, ty);\n          delete ptr.out.name;\n        } else {\n          // console.log(ptr.out.type,ty.type)\n          typeassert(`Function return`, [ptr.out], a.value, a.pos);\n\n          ptr.out = typeEqual(ptr.out, gettype(a.value));\n        }\n      }\n    } else if (isASCNodeOperator(a)) {\n      let op = a.op.slice(2);\n\n      let otype;\n      if (op == \"+\") {\n        typeassert(\n          `${op} operator`,\n          [inittype(\"num\"), inittype(\"str\")],\n          a.lhs,\n          a.pos\n        );\n        typeassert(\n          `${op} operator`,\n          [inittype(\"num\"), inittype(\"str\")],\n          a.rhs,\n          a.pos\n        );\n        otype = Object.assign({}, typeEqual(gettype(a.lhs), gettype(a.rhs)));\n      } else if ([\"-\", \"*\", \"/\", \"%\"].includes(op)) {\n        typeassert(`${op} operator`, [inittype(\"num\")], a.lhs, a.pos);\n        typeassert(`${op} operator`, [inittype(\"num\")], a.rhs, a.pos);\n        otype = inittype(\"num\");\n      } else if ([\"||\", \"&&\"].includes(op)) {\n        typeassert(`${op} operator`, [inittype(\"bol\")], a.lhs, a.pos);\n        typeassert(`${op} operator`, [inittype(\"bol\")], a.rhs, a.pos);\n        otype = inittype(\"bol\");\n      }\n      strayvar.push(otype);\n      // console.log(strayvar)\n    } else if (a.op == \"name\") {\n      for (let j = a.names.length - 1; j >= 0; j--) {\n        scope[scope.length - 1][a.names[j]] = strayvar.pop();\n      }\n    } else if (a.op == \"call\") {\n      let ty = gettype(a.fun);\n\n      if (ty == undefined) {\n        // damn hoisting\n        strayvar.push(inittype(\"any\"));\n      } else {\n        typeassert(`Call function`, [inittype(\"fun\")], a.fun, a.pos);\n\n        let args = [];\n        if (a.args) {\n          args = a.args.slice();\n        }\n        if (a.pop) {\n          for (let j = 0; j < took; j++) {\n            args.unshift(strayvar.pop());\n          }\n        }\n\n        let ptr = ty;\n\n        for (let j = 0; j < args.length; j++) {\n          if (ptr.type == \"any\") {\n            ptr = inittype(\"fun\");\n          }\n          let ta = ptr.in;\n          if (a.pop) {\n            assert(\n              `Function argument expecting ${printType(ta)}, found ${printType(\n                args[j]\n              )}`,\n              a.pos,\n              typeEqual(args[j], ta)\n            );\n          } else {\n            typeassert(`Function argument`, [ta], args[j], a.pos);\n          }\n          ptr = ptr.out;\n        }\n\n        if (args.length == 0 && ptr.type == \"fun\") {\n          ptr = ptr.out;\n        }\n\n        strayvar.push(Object.assign({}, ptr));\n      }\n    } else if (a.op == \"subscript\") {\n      // typeassert(`Subscript operator LHS`,[inittype('arr'),inittype('obj')],a.container,a.pos)\n\n      if (a.value[0] == \"ctnr\" && a.value[1] == \"rest\") {\n        typeassert(\n          `Subscript operator LHS`,\n          [inittype(\"arr\"), inittype(\"str\")],\n          a.container,\n          a.pos\n        );\n\n        let ty = gettype(a.container);\n        strayvar.push(Object.assign({}, ty));\n      } else {\n        typeassert(\n          `Subscript operator RHS`,\n          [inittype(\"num\"), inittype(\"str\")],\n          a.value,\n          a.pos\n        );\n\n        if (gettype(a.value).type == \"str\") {\n          typeassert(\n            `Subscript operator LHS`,\n            [inittype(\"obj\")],\n            a.container,\n            a.pos\n          );\n          let ty = gettype(a.container);\n          if (ty.type == \"any\") {\n            ty.type = \"obj\";\n            ty.fields = {};\n            ty.fields[a.value[1].slice(1, -1)] = inittype(\"any\");\n            ty.isarg = true;\n          }\n          assert(\n            `[Type] Property ${a.value[1]} does not exist in obj ${printType(\n              ty\n            )}`,\n            a.pos,\n            objfield(ty, a.value[1].slice(1, -1))\n          );\n\n          strayvar.push(Object.assign({}, ty.fields[a.value[1].slice(1, -1)]));\n        } else {\n          typeassert(\n            `Subscript operator LHS`,\n            [inittype(\"arr\"), inittype(\"str\")],\n            a.container,\n            a.pos\n          );\n          let ty = gettype(a.container);\n\n          if (ty.type == \"str\") {\n            strayvar.push(inittype(\"str\"));\n          } else {\n            if (ty.type == \"any\") {\n              // ty = inittype('arr')\n              ty.type = \"arr\";\n              ty.element = { type: \"any\" };\n              // console.log(gettype(a.container))\n              // console.log(ty)\n              // process.exit()\n              // strayvar.push(inittype('any'))\n            }\n            strayvar.push(Object.assign({}, ty.element));\n          }\n        }\n      }\n    } else if (a.op == \"cat\") {\n      typeassert(`Concat`, [inittype(\"arr\")], a.containers[0], a.pos);\n      let typ = gettype(a.containers[0]);\n      let olt = typ;\n      for (let j = 1; j < a.containers.length; j++) {\n        typ = typeEqual(typ, gettype(a.containers[j]));\n        if (!typ) {\n          typeassert(`Concat`, [olt], a.containers[j], a.pos);\n        }\n        olt = typ;\n      }\n      strayvar.push(Object.assign({}, typ));\n    } else if (a.op == \"push\") {\n      typeassert(`Push LHS`, [inittype(\"arr\")], a.container, a.pos);\n      let typy = gettype(a.container);\n      let typ = typy.element;\n      if ((typy.type = \"any\")) {\n        typ = inittype(\"any\");\n      }\n      let olt = typ;\n      for (let j = 0; j < a.values.length; j++) {\n        // console.log(a.values[j],gettype(a.values[j]))\n        typ = typeEqual(typ, gettype(a.values[j]));\n        if (!typ) {\n          typeassert(`Push RHS`, [olt], a.values[j], a.pos);\n        }\n        olt = typ;\n      }\n\n      gettype(a.container).element = Object.assign({}, typ);\n    } else if (a.op == \"for\") {\n      scopepush(a);\n      typeassert(`For-each LHS`, [inittype(\"arr\")], a.container, a.pos);\n      scope[scope.length - 1][a.iterator] =\n        gettype(a.container).element || inittype(\"any\");\n    } else if (a.op == \"whiletrue\") {\n      scopepush(a);\n    } else if (a.op == \"whilen\") {\n      scopepush(a);\n    } else if (a.op == \"break\") {\n      //pass\n    } else if (a.op == \"continue\") {\n      //pass\n    } else if (a.op == \"not\") {\n      strayvar.push(inittype(\"bol\"));\n    } else if (a.op == \"reassign\") {\n      let tl = gettype(a.lhs);\n\n      let tlv = tl;\n\n      if (a.lhssubs) {\n        let tls = gettype(a.lhssubs);\n        typeassert(\n          `Reassignment LHS subscript`,\n          [inittype(\"str\"), inittype(\"num\")],\n          a.lhssubs,\n          a.pos\n        );\n\n        if (tls.type == \"str\") {\n          typeassert(\n            `Reassignment LHS container`,\n            [inittype(\"obj\")],\n            a.lhs,\n            a.pos\n          );\n          if (tl.type == \"any\") {\n            tlv = inittype(\"any\");\n          } else {\n            tlv = objfield(tl, a.lhssubs[1].slice(1, -1));\n          }\n        } else {\n          typeassert(\n            `Reassignment LHS container`,\n            [inittype(\"arr\")],\n            a.lhs,\n            a.pos\n          );\n          if (tl.type == \"any\") {\n            tlv = inittype(\"any\");\n          } else {\n            tlv = tl.element;\n          }\n        }\n      }\n      if (a.del) {\n      } else {\n        let tr = gettype(a.rhs);\n        let trv = tr;\n        if (a.rhssubs) {\n          let trs = gettype(a.rhssubs);\n\n          typeassert(\n            `Reassignment RHS subscript`,\n            [inittype(\"str\"), inittype(\"num\")],\n            a.rhssubs,\n            a.pos\n          );\n          if (trs.type == \"str\") {\n            typeassert(\n              `Reassignment RHS container`,\n              [inittype(\"obj\")],\n              a.rhs,\n              a.pos\n            );\n            if (tr.type == \"any\") {\n              trv = inittype(\"any\");\n            } else {\n              trv = objfield(tr, a.rhssubs[1].slice(1, -1));\n            }\n          } else {\n            typeassert(\n              `Reassignment RHS container`,\n              [inittype(\"arr\")],\n              a.rhs,\n              a.pos\n            );\n            if (tr.type == \"any\") {\n              trv = inittype(\"any\");\n            } else {\n              trv = tr.element;\n            }\n          }\n        }\n        assert(`[Type] Reassignment LHS is not declared`, a.pos, tlv);\n        assert(`[Type] Reassignment RHS is not declared`, a.pos, trv);\n        // console.log(a,tlv,trv,tl,tr)\n        let typ = typeEqual(tlv, trv);\n        // console.log(a.lhs,a.rhs,gettype(a.rhs),tl,tr,tlv,trv)\n        assert(\n          `[Type] Reassignment type mismatch: LHS:${printType(\n            tlv\n          )} RHS:${printType(trv)}`,\n          a.pos,\n          typ\n        );\n      }\n    } else if (a.op == \"length\") {\n      typeassert(\n        `Length operator`,\n        [inittype(\"arr\"), inittype(\"str\")],\n        a.container,\n        a.pos\n      );\n      strayvar.push(inittype(\"num\"));\n    } else if (a.op == \"temp\") {\n      strayvar.push(gettype(a.iden));\n    } else if (a.op == \"discard\") {\n      strayvar = [];\n    } else if (a.op == \"take\") {\n      took = a.count;\n    } else if (a.op == \"import\") {\n      imported = imported.concat(a.iden);\n    } else if (a.op == \"try\") {\n      scopepush(a);\n    } else if (a.op == \"catch\") {\n      scopepop(a, \"try\");\n      scopepush(a);\n    } else if (a.op == \"catcherr\") {\n      scopepop(a, \"catch\", \"catcherr\");\n      scopepush(a);\n      if (a.name != undefined) {\n        var x = inittype(\"any\");\n        x.fields = {\n          名: inittype(\"str\"),\n          文: inittype(\"str\"),\n          蹤: inittype(\"str\")\n        };\n        scope[scope.length - 1][a.name] = x;\n      }\n    } else if (a.op == \"tryend\") {\n      scopepop(a, \"catch\", \"catcherr\");\n    } else if (a.op == \"throw\") {\n    } else if (a.op == \"comment\") {\n      //pass\n    } else {\n    }\n  }\n  if (a) {\n    scopepop({ pos: a.pos, op: \"EOF\" }, \"global\");\n  }\n  // console.log(scope.length)\n  // console.dir(signature,{maxArrayLength:null,depth:null})\n\n  // console.log(printSignature(signature))\n  // process.exit()\n  return signature;\n}\n\nexport { typecheck, printType, printSignature };\n","export type TargetLanguages = \"js\" | \"py\" | \"rb\";\nexport type RomanizeSystem = \"none\" | \"pinyin\" | \"unicode\" | \"baxter\";\nexport type LogCallback = (...args: any[]) => void;\nexport type CacheObject = Record<string, string>;\nexport type StandardLibraryObject = Record<string, string> &\n  Record<TargetLanguages, Record<string, string>>;\n\nexport interface CompileOnlyOptions {\n  lang: TargetLanguages;\n  romanizeIdentifiers: RomanizeSystem;\n  resetVarCnt: boolean;\n  logCallback: LogCallback;\n  errorCallback: LogCallback;\n  lib: StandardLibraryObject;\n  strict: Boolean;\n}\n\nexport interface ImportOptions {\n  entryFilepath?: string;\n  importPaths: string | string[];\n  importCache: CacheObject;\n  importContext: Record<string, string | { entry: string; src?: string }>;\n  allowHttp: boolean;\n  trustedHosts: string[];\n  requestTimeout: number;\n}\n\nexport type CompileOptions = CompileOnlyOptions & ImportOptions;\n\nexport interface MarcoOptions {\n  lib: CompileOnlyOptions[\"lib\"];\n  lang: TargetLanguages;\n  importOptions: ImportOptions;\n}\n\nexport interface TranspilerOptions {\n  imports: string[];\n}\n\nexport interface ExecuteOptions {\n  lang: TargetLanguages;\n  outputHanzi: boolean;\n  scoped: boolean;\n  output: LogCallback;\n}\n\nexport type MacroDefinition = [string, string];\n\nexport interface ImportedModule {\n  moduleName: string;\n  src: string;\n  entry?: string;\n}\n\nexport type TokenType =\n  | \"ans\"\n  | \"assgn\"\n  | \"bool\"\n  | \"call\"\n  | \"cmp\"\n  | \"comment\"\n  | \"ctnr\"\n  | \"ctrl\"\n  | \"data\"\n  | \"decl\"\n  | \"discard\"\n  | \"expr\"\n  | \"iden\"\n  | \"import\"\n  | \"lit\"\n  | \"lop\"\n  | \"macro\"\n  | \"mod\"\n  | \"name\"\n  | \"not\"\n  | \"num\"\n  | \"op\"\n  | \"opord\"\n  | \"print\"\n  | \"rassgn\"\n  | \"take\"\n  | \"try\"\n  | \"type\"\n  | \"throw\";\n\nexport type Token = [TokenType, string | undefined, number] | [\"ans\"];\n\nexport interface ASCNodeCommon {\n  pos: number;\n}\n\nexport interface ASCNodeOperator {\n  op: \"op+\" | \"op-\" | \"op/\" | \"op%\";\n  lhs?: Token;\n  rhs?: Token;\n}\n\nexport interface ASCNodeReturn {\n  op: \"return\";\n  value?: Token;\n}\n\nexport interface ASCNodeIf {\n  op: \"if\";\n  test: Token[];\n  elseif?: boolean;\n  not?: boolean;\n}\n\nexport interface ASCNodeFunction {\n  op: \"fun\";\n  arity: number;\n  args: { name: string; type: string }[];\n  elseif?: boolean;\n  not?: boolean;\n}\n\nexport interface ASCNodeWithValue {\n  op: \"not\" | \"whilen\" | \"comment\";\n  value: Token;\n}\n\nexport interface ASCNodeName {\n  op: \"name\";\n  names: string[];\n}\n\nexport interface ASCNodeReassign {\n  op: \"reassign\";\n  lhs: Token;\n  rhs?: Token;\n  lhssubs?: Token;\n  rhssubs?: Token;\n  del?: boolean;\n}\n\nexport interface ASCNodeCat {\n  op: \"cat\";\n  containers: Token[];\n}\n\nexport interface ASCNodeFor {\n  op: \"for\";\n  container: Token;\n  iterator: string;\n}\n\nexport interface ASCNodeCall {\n  op: \"call\";\n  fun: Token;\n  args?: Token[];\n  pop?: boolean;\n}\n\nexport interface ASCNodeLength {\n  op: \"length\";\n  container: Token;\n}\n\nexport interface ASCNodeTake {\n  op: \"take\";\n  count: number;\n}\n\nexport interface ASCNodeTemp {\n  op: \"temp\";\n  iden: Token;\n}\n\nexport interface ASCNodeImport {\n  op: \"import\";\n  file: string;\n  iden: string[];\n}\n\nexport interface ASCNodePush {\n  op: \"push\";\n  container: Token;\n  values: Token[];\n}\n\nexport interface ASCNodeWithError {\n  op: \"catcherr\" | \"throw\";\n  error?: Token;\n  message?: Token;\n  name?: string;\n}\n\nexport interface ASCNodeSubscript {\n  op: \"subscript\";\n  container: Token;\n  value: Token;\n}\n\nexport interface ASCNodeVariable {\n  op: \"var\";\n  count: number;\n  type: string;\n  values: (Token | [])[];\n  public: boolean;\n  names?: string[];\n}\n\nexport interface ASCNodePropertry {\n  op: \"prop\";\n  type: string;\n  name: string;\n  value: Token;\n}\n\nexport interface ASCNodeGlobal {\n  op: \"global\";\n}\n\nexport interface ASCNodeEOF {\n  op: \"EOF\";\n}\n\nexport interface ASCNodeSimple {\n  op:\n    | \"break\"\n    | \"end\"\n    | \"print\"\n    | \"else\"\n    | \"continue\"\n    | \"objbody\"\n    | \"funbody\"\n    | \"whiletrue\"\n    | \"try\"\n    | \"tryend\"\n    | \"catch\"\n    | \"discard\"\n    | \"funend\"\n    | \"objend\";\n}\n\nexport type ASCNode = ASCNodeCommon &\n  (\n    | ASCNodeOperator\n    | ASCNodeSimple\n    | ASCNodeReturn\n    | ASCNodeIf\n    | ASCNodeFunction\n    | ASCNodeWithValue\n    | ASCNodeName\n    | ASCNodeReassign\n    | ASCNodeImport\n    | ASCNodeTake\n    | ASCNodeWithError\n    | ASCNodeTemp\n    | ASCNodeCat\n    | ASCNodeFor\n    | ASCNodeLength\n    | ASCNodePush\n    | ASCNodeCall\n    | ASCNodeSubscript\n    | ASCNodeVariable\n    | ASCNodePropertry\n    | ASCNodeGlobal\n    | ASCNodeEOF\n  );\n\nexport function isASCNodeOperator(\n  node: ASCNode\n): node is ASCNodeCommon & ASCNodeOperator {\n  return node.op.startsWith(\"op\");\n}\n\nexport interface IdenType {\n  type: \"any\" | \"nil\" | \"fun\" | \"obj\" | \"arr\" | \"str\" | \"bol\" | \"num\" | string;\n  name?: string;\n  isarg?: boolean;\n  in?: IdenType;\n  out?: IdenType;\n  element?: IdenType;\n  fields?: {};\n}\n\nexport type TypeScope = Record<string, IdenType>;\n\nexport type TypeSignature = [[number, number, number], TypeScope][];\n","import JS from \"./js\";\nimport PY from \"./py\";\nimport RB from \"./rb\";\nimport { TargetLanguages } from \"../types\";\nimport { BaseTranspiler } from \"./base\";\n\nconst transpilers: Record<TargetLanguages, typeof BaseTranspiler> = {\n  js: JS,\n  py: PY,\n  rb: RB\n};\n\nexport default transpilers;\n","import { BaseTranspiler, ModuleWrapperOptions } from \"./base\";\nimport { TranspilerOptions, ASCNodeOperator } from \"../types\";\n\nexport default class JSCompiler extends BaseTranspiler {\n  protected moduleWrapper({\n    src,\n    scopeName,\n    markerStart,\n    markerEnd\n  }: ModuleWrapperOptions) {\n    return `${markerStart} var ${scopeName} = new function(){ ${src} };${markerEnd}`;\n  }\n\n  transpile(options: Partial<TranspilerOptions> = {}) {\n    const imports = options.imports || [];\n    let js = \"\"; //'\"use strict\";'; (strict mode currently broken)\n    let prevfun = \"\";\n    let prevfunpublic = false;\n    let prevobj = \"\";\n    let prevobjpublic = false;\n    let previsfun = false;\n    let curlvl = 0;\n    let strayvar = [];\n    let took = 0;\n    const errcurlvls = [];\n\n    function getval(x) {\n      if (x === undefined) {\n        return \"\";\n      }\n      if (x[0] == \"ans\") {\n        const ans = strayvar[strayvar.length - 1];\n        strayvar = [];\n        return ans;\n      }\n      return x[1];\n    }\n\n    for (const a of this.asc) {\n      if (a.op == \"var\") {\n        for (let j = 0; j < a.count; j++) {\n          if (a.values[j] === undefined) {\n            a.values[j] = [];\n          }\n          let name = a.names[j];\n          let value = a.values[j][1];\n          if (name === undefined) {\n            name = this.nextTmpVar();\n            strayvar.push(name);\n          }\n          if (value === undefined) {\n            if (a.type == \"arr\") {\n              value = \"[]\";\n            } else if (a.type == \"num\") {\n              value = \"0\";\n            } else if (a.type == \"str\") {\n              value = `\"\"`;\n            } else if (a.type == \"bol\") {\n              value = \"false\";\n            } else if (a.type == \"fun\") {\n              value = \"_=>{}\";\n              prevfun = name;\n              prevfunpublic = a.public;\n            } else if (a.type == \"obj\") {\n              value = \"{}\";\n              prevobj = name;\n              prevobjpublic = a.public;\n            } else if (a.type == \"any\") {\n              value = \"void 0\";\n            }\n          }\n          js += `var ${name}=${a.public ? `this.${name}=` : \"\"}${value};`;\n        }\n      } else if (a.op == \"print\") {\n        js += `console.log(${strayvar.join(\",\")});`;\n        strayvar = [];\n      } else if (a.op == \"fun\") {\n        js += `${prevfun}=${prevfunpublic ? `this.${prevfun}=` : \"\"}${\n          a.args.length == 0\n            ? \"()=>\"\n            : a.args.map(arg => `${arg.name}=>`).join(\"\")\n        }{`;\n        curlvl++;\n      } else if (a.op == \"funbody\") {\n        if (!previsfun) {\n          js += `${prevfun}=${prevfunpublic ? `this.${prevfun}=` : \"\"}()=>{`;\n          curlvl++;\n        }\n      } else if (a.op == \"funend\") {\n        js += \"};\";\n        curlvl--;\n      } else if (a.op == \"objend\") {\n        js += \"};\";\n        curlvl--;\n      } else if (a.op == \"objbody\") {\n        js += `${prevobjpublic ? `${prevobj} = this.` : \"\"}${prevobj}={`;\n        curlvl++;\n      } else if (a.op == \"prop\") {\n        js += `${a.name}:${a.value[1]},`;\n      } else if (a.op == \"end\") {\n        js += \"};\";\n        curlvl--;\n      } else if (a.op == \"if\") {\n        if (a.elseif) {\n          js += \"}else \";\n          curlvl--;\n        }\n        js += \"if (\";\n        if (a.not) {\n          js += \"!(\";\n        }\n        let j = 0;\n        while (j < a.test.length) {\n          if (a.test[j][0] == \"cmp\") {\n            js += a.test[j][1];\n          } else if (a.test[j][0] == \"ctnr\") {\n            if (a.test[j][1] == \"subs\") {\n              if (a.test[j + 1][1] == \"rest\") {\n                js += \".slice(1)\";\n              } else {\n                if (a.test[j + 1][0] == \"lit\") {\n                  js += \"[\" + a.test[j + 1][1] + \"]\";\n                } else {\n                  js += \"[\" + a.test[j + 1][1] + \"-1]\";\n                }\n              }\n              j++;\n            } else if (a.test[j][1] == \"len\") {\n              js += \".length\";\n            }\n          } else {\n            js += getval(a.test[j]);\n          }\n          j++;\n        }\n        if (a.not) {\n          js += \")\";\n        }\n        js += \"){\";\n        curlvl++;\n      } else if (a.op == \"else\") {\n        js += \"}else{\";\n      } else if (a.op == \"return\") {\n        js += `return ${getval(a.value)};`;\n      } else if (a.op.startsWith(\"op\")) {\n        const _a = a as ASCNodeOperator;\n        const lhs = getval(_a.lhs);\n        const rhs = getval(_a.rhs);\n        const vname = this.nextTmpVar();\n        js += `const ${vname}=${lhs}${a.op.slice(2)}${rhs};`;\n        strayvar.push(vname);\n      } else if (a.op == \"name\") {\n        for (let j = 0; j < a.names.length; j++) {\n          js += `var ${a.names[j]}=${\n            strayvar[strayvar.length - a.names.length + j]\n          };`;\n        }\n        strayvar = strayvar.slice(0, strayvar.length - a.names.length);\n      } else if (a.op == \"call\") {\n        if (a.pop) {\n          let jj = \"\";\n          for (let j = 0; j < took; j++) {\n            jj += `(${strayvar[strayvar.length - took + j]})`;\n          }\n          strayvar = strayvar.slice(0, strayvar.length - took);\n          took = 0;\n          const vname = this.nextTmpVar();\n          if (!jj.length) {\n            jj = \"()\";\n          }\n          js += `const ${vname}=${getval(a.fun)}` + jj + \";\";\n          strayvar.push(vname);\n        } else {\n          const vname = this.nextTmpVar();\n          js += `const ${vname}=${getval(a.fun)}(${a.args\n            .map(x => getval(x))\n            .join(\")(\")});`;\n          strayvar.push(vname);\n        }\n      } else if (a.op == \"subscript\") {\n        const idx = getval(a.value);\n        if (idx == \"rest\") {\n          const vname = this.nextTmpVar();\n          js += `const ${vname}=${getval(a.container)}.slice(1);`;\n          strayvar.push(vname);\n        } else {\n          const vname = this.nextTmpVar();\n          js += `const ${vname}=${getval(a.container)}[${idx}${\n            a.value[0] == \"lit\" ? \"\" : \"-1\"\n          }];`;\n          strayvar.push(vname);\n        }\n      } else if (a.op == \"cat\") {\n        const vname = this.nextTmpVar();\n        js += `const ${vname}=${getval(a.containers[0])}.concat(${a.containers\n          .slice(1)\n          .map(x => x[1])\n          .join(\").concat(\")});`;\n        strayvar.push(vname);\n      } else if (a.op == \"push\") {\n        js += `${getval(a.container)}.push(${a.values\n          .map(x => getval(x))\n          .join(\",\")});`;\n      } else if (a.op == \"for\") {\n        js += `for(let ${a.iterator} of ${getval(a.container)}){`;\n        curlvl++;\n      } else if (a.op == \"whiletrue\") {\n        js += \"while(true){\";\n        curlvl++;\n      } else if (a.op == \"whilen\") {\n        const v = this.randVar();\n        js += `for(let ${v}=0;${v}<${getval(a.value)};${v}++){`;\n        curlvl++;\n      } else if (a.op == \"break\") {\n        js += \"break;\";\n      } else if (a.op == \"continue\") {\n        js += \"continue;\";\n      } else if (a.op == \"not\") {\n        const v = getval(a.value);\n        const vname = this.nextTmpVar();\n        js += `const ${vname}=!${v};`;\n        strayvar.push(vname);\n      } else if (a.op == \"reassign\") {\n        if (a.del == true) {\n          const lhs = getval(a.lhs);\n          js += `delete ${lhs}[${a.lhssubs[1]}${\n            a.lhssubs[0] == \"lit\" ? \"\" : \"-1\"\n          }];`;\n        } else {\n          let rhs = getval(a.rhs);\n          let lhs = getval(a.lhs);\n          if (a.lhssubs) {\n            lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == \"lit\" ? \"\" : \"-1\"}]`;\n          }\n          if (a.rhssubs) {\n            rhs += `[${a.rhssubs[1]}${a.rhssubs[0] == \"lit\" ? \"\" : \"-1\"}]`;\n          }\n          js += `${lhs}=${rhs};`;\n        }\n      } else if (a.op == \"length\") {\n        const vname = this.nextTmpVar();\n        js += `const ${vname}=${getval(a.container)}.length;`;\n        strayvar.push(vname);\n      } else if (a.op == \"temp\") {\n        const vname = this.nextTmpVar();\n        js += `const ${vname}=${a.iden[1]};`;\n        strayvar.push(vname);\n      } else if (a.op == \"discard\") {\n        strayvar = [];\n      } else if (a.op == \"take\") {\n        took = a.count;\n      } else if (a.op == \"import\") {\n        const f = a.file.replace(/\"/g, \"\");\n        for (const id of a.iden) {\n          js += `var ${id}=${f}.${id};`;\n        }\n        imports.push(f);\n      } else if (a.op == \"try\") {\n        js += `try{`;\n        curlvl++;\n      } else if (a.op == \"catch\") {\n        const r = this.randVar();\n        errcurlvls.push([curlvl, r]);\n        js += `}catch(${r}){`;\n        js += `${r}['名']=({'SyntaxError':'文法','RangeError':'逾界','TypeError':'異類','ReferenceError':'虛指'}[${r}.name])||${r}.name;`;\n        js += `${r}['文']=${r}.message; ${r}['蹤']=${r}.stack;`;\n        strayvar = [];\n      } else if (a.op == \"catcherr\") {\n        const ec = errcurlvls[errcurlvls.length - 1];\n        if (a.error === undefined) {\n          if (curlvl != ec[0]) {\n            js += `}else{`;\n          }\n        } else {\n          if (curlvl != ec[0]) {\n            js += `}else `;\n            curlvl--;\n          }\n          js += `if (${ec[1]}.name===${a.error[1]}||${ec[1]}['名']===${a.error[1]}){`;\n          curlvl++;\n        }\n        if (a.name != undefined) {\n          js += `const ${a.name}=${ec[1]};`;\n        }\n      } else if (a.op == \"tryend\") {\n        const ec = errcurlvls.pop();\n        if (curlvl != ec[0]) {\n          js += `}`;\n          curlvl--;\n        }\n        js += `}`;\n        curlvl--;\n        strayvar = [];\n      } else if (a.op == \"throw\") {\n        const r = this.randVar();\n        js += `{const ${r} = new Error(); ${r}.name=${\n          a.error[1]\n        }; ${r}.message=${a.message ? getval(a.message) : '\"\"'}; throw ${r};}`;\n      } else if (a.op == \"comment\") {\n        js += `/*${getval(a.value)}*/`;\n      } else {\n        console.log(a.op);\n      }\n      previsfun = a.op == \"fun\";\n    }\n    return { result: js, imports };\n  }\n}\n","import { BaseTranspiler, ModuleWrapperOptions } from \"./base\";\nimport { TranspilerOptions, ASCNodeOperator } from \"../types\";\n\nexport default class PythonTranspiler extends BaseTranspiler {\n  protected moduleWrapper({\n    src,\n    markerStart,\n    markerEnd\n  }: ModuleWrapperOptions) {\n    return `#${markerStart}\\n${src}\\n#${markerEnd}\\n`;\n  }\n\n  transpile(options: Partial<TranspilerOptions> = {}) {\n    var imports = options.imports || [];\n    var lop = {\n      \"||\": \" or \",\n      \"&&\": \" and \"\n    };\n\n    var py = this.lib;\n    var prevfun = \"\";\n    var prevobj = \"\";\n    var prevobjpublic = false;\n    var curlvl = 0;\n    var strayvar = [];\n    var funcurlvls = [];\n    var funcurnames = [];\n    var took = 0;\n    var globals = [];\n    var locals = [];\n    var funargs = [];\n\n    const getval = x => {\n      if (x === undefined) {\n        return \"\";\n      }\n      if (x[0] == \"ans\") {\n        var ans = strayvar[strayvar.length - 1];\n        strayvar = [];\n        return ans;\n      }\n      if (x[1] === undefined) {\n        return undefined;\n      }\n      if (x[1].toString() == \"true\") {\n        return \"True\";\n      }\n      if (x[1].toString() == \"false\") {\n        return \"False\";\n      }\n      return x[1];\n    };\n\n    for (var i = 0; i < this.asc.length; i++) {\n      var a = this.asc[i];\n      if (a.op == \"var\") {\n        for (var j = 0; j < a.count; j++) {\n          if (a.values[j] === undefined) {\n            a.values[j] = [];\n          }\n          var name = a.names[j];\n          var value = getval(a.values[j]);\n          if (name === undefined) {\n            name = this.nextTmpVar();\n            strayvar.push(name);\n          }\n          if (value === undefined) {\n            if (a.type == \"arr\") {\n              value = \"Ctnr()\";\n            } else if (a.type == \"num\") {\n              value = \"0\";\n            } else if (a.type == \"str\") {\n              value = `\"\"`;\n            } else if (a.type == \"bol\") {\n              value = \"False\";\n            } else if (a.type == \"fun\") {\n              value = \"lambda _:0\";\n              prevfun = name;\n            } else if (a.type == \"obj\") {\n              value = \"{}\";\n              prevobj = name;\n              prevobjpublic = a.public;\n            }\n          }\n          py += \"\\t\".repeat(curlvl);\n          py += `${name}=${value}\\n`;\n          if (name[0] != \"_\") {\n            if (curlvl == 0) {\n              globals.push(name);\n            } else {\n              if (!locals.length) {\n                locals.push([]);\n              }\n              locals[locals.length - 1].push(name);\n            }\n          }\n        }\n      } else if (a.op == \"print\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `print(`;\n        for (var j = 0; j < strayvar.length; j++) {\n          py += `${strayvar[j]}`;\n          if (j != strayvar.length - 1) {\n            py += \",\";\n          }\n        }\n        py += \");\\n\";\n        strayvar = [];\n      } else if (a.op == \"fun\") {\n        funcurlvls.push(curlvl);\n        py += \"\\t\".repeat(curlvl);\n        py += `def ${prevfun} (`;\n        for (var j = 0; j < a.arity; j++) {\n          curlvl++;\n          py += `${a.args[j].name}):\\n`;\n          funargs.push(a.args[j].name);\n\n          if (j != a.arity - 1) {\n            py += \"\\t\".repeat(curlvl);\n            var r = this.randVar();\n            py += `def ${r}(`;\n            funcurnames.push(r);\n          }\n        }\n        for (var j = 0; j < a.arity - 1; j++) {\n          py += \"\\t\".repeat(curlvl);\n          py += \"nonlocal \" + a.args[j].name + \";\\n\";\n        }\n      } else if (a.op == \"funbody\") {\n        if (this.asc[i - 1].op != \"fun\") {\n          funcurlvls.push(curlvl);\n          py += \"\\t\".repeat(curlvl);\n          py += `def ` + prevfun + \"():\\n\";\n          curlvl++;\n        }\n        // py += \"):\\n\";\n        for (var j = 0; j < globals.length; j++) {\n          if (funargs.includes(globals[j])) {\n            continue;\n          }\n          py += \"\\t\".repeat(curlvl);\n          py += \"global \" + globals[j] + \";\\n\";\n        }\n        if (locals.length) {\n          for (var j = 0; j < locals[locals.length - 1].length; j++) {\n            py += \"\\t\".repeat(curlvl);\n            py += \"nonlocal \" + locals[locals.length - 1][j] + \";\\n\";\n          }\n        }\n        locals.push([]);\n        funargs = [];\n      } else if (a.op == \"funend\") {\n        var cl = funcurlvls.pop();\n        var n = curlvl - cl - 1;\n        for (var j = 0; j < n; j++) {\n          curlvl--;\n          py += \"\\t\".repeat(curlvl);\n          py += `return ${funcurnames.pop()};\\n`;\n        }\n        locals.pop();\n        py += \"\\n\";\n        curlvl--;\n      } else if (a.op == \"objend\") {\n        py += \"};\\n\";\n      } else if (a.op == \"objbody\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `${prevobjpublic ? `${prevobj} = this.` : \"\"}${prevobj}={`;\n      } else if (a.op == \"prop\") {\n        py += `${a.name}:${a.value[1]},`;\n      } else if (a.op == \"end\") {\n        py += \"\\n\";\n        curlvl--;\n      } else if (a.op == \"if\") {\n        py += \"\\n\";\n        py += \"\\t\".repeat(curlvl);\n        py += \"if \";\n        var j = 0;\n        while (j < a.test.length) {\n          if (a.test[j][0] == \"cmp\") {\n            py += a.test[j][1];\n          } else if (a.test[j][0] == \"ctnr\") {\n            if (a.test[j][1] == \"subs\") {\n              if (a.test[j + 1][1] == \"rest\") {\n                py += \".slice(1)\";\n              } else {\n                if (a.test[j + 1][0] == \"lit\") {\n                  py += \"[\" + a.test[j + 1][1] + \"]\";\n                } else {\n                  py += \"[\" + a.test[j + 1][1] + \"-1]\";\n                }\n              }\n              j++;\n            } else if (a.test[j][1] == \"len\") {\n              py += \".length\";\n            }\n          } else {\n            py += getval(a.test[j]);\n          }\n          j++;\n        }\n        py += \":\\n\";\n        curlvl++;\n      } else if (a.op == \"else\") {\n        py += \"\\n\";\n        py += \"\\t\".repeat(curlvl - 1);\n        py += \"else:\\n\";\n      } else if (a.op == \"return\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `return ${getval(a.value)}\\n`;\n      } else if (a.op.startsWith(\"op\")) {\n        let _a = a as ASCNodeOperator;\n        py += \"\\t\".repeat(curlvl);\n        var lhs = getval(_a.lhs);\n        var rhs = getval(_a.rhs);\n        var vname = this.nextTmpVar();\n        py += `${vname}=${lhs}${\n          lop[a.op.slice(2)] ? lop[a.op.slice(2)] : a.op.slice(2)\n        }${rhs};\\n`;\n        strayvar.push(vname);\n      } else if (a.op == \"name\") {\n        for (var j = 0; j < a.names.length; j++) {\n          py += \"\\n\";\n          py += \"\\t\".repeat(curlvl);\n          py += `${a.names[j]}=${\n            strayvar[strayvar.length - a.names.length + j]\n          };\\n`;\n        }\n        strayvar = strayvar.slice(0, strayvar.length - a.names.length);\n      } else if (a.op == \"call\") {\n        py += \"\\t\".repeat(curlvl);\n        if (a.pop) {\n          var jj = \"\";\n          for (var j = 0; j < took; j++) {\n            jj += `(${strayvar[strayvar.length - took + j]})`;\n          }\n          strayvar = strayvar.slice(0, strayvar.length - took);\n          took = 0;\n          var vname = this.nextTmpVar();\n          if (!jj.length) {\n            jj = \"()\";\n          }\n          py += `${vname}=${getval(a.fun)}` + jj + \";\\n\";\n          strayvar.push(vname);\n        } else {\n          var vname = this.nextTmpVar();\n          py += `${vname}=${getval(a.fun)}(${a.args\n            .map(x => getval(x))\n            .join(\")(\")});\\n`;\n          strayvar.push(vname);\n        }\n      } else if (a.op == \"subscript\") {\n        var idx = getval(a.value);\n        var vname = this.nextTmpVar();\n        py += \"\\t\".repeat(curlvl);\n        if (idx == \"rest\") {\n          py += `${vname}=${getval(a.container)}.slice(1);\\n`;\n        } else {\n          py += `${vname}=${getval(a.container)}[${idx}${\n            a.value[0] == \"lit\" ? \"\" : \"-1\"\n          }];\\n`;\n        }\n        strayvar.push(vname);\n      } else if (a.op == \"cat\") {\n        var vname = this.nextTmpVar();\n        py += \"\\t\".repeat(curlvl);\n        py +=\n          `${vname}=${getval(a.containers[0])}.concat(` +\n          a.containers\n            .slice(1)\n            .map(x => x[1])\n            .join(\").concat(\") +\n          \");\\n\";\n        strayvar.push(vname);\n      } else if (a.op == \"push\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `${getval(a.container)}.push(${a.values\n          .map(x => getval(x))\n          .join(\",\")})\\n`;\n      } else if (a.op == \"for\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `for ${a.iterator} in ${getval(a.container)}:\\n`;\n        curlvl++;\n      } else if (a.op == \"whiletrue\") {\n        py += \"\\t\".repeat(curlvl);\n        py += \"while (True):\\n\";\n        curlvl++;\n      } else if (a.op == \"whilen\") {\n        py += \"\\t\".repeat(curlvl);\n        let v = this.randVar();\n        py += `for ${v} in range(${getval(a.value)}):\\n`;\n        curlvl++;\n      } else if (a.op == \"break\") {\n        py += \"\\t\".repeat(curlvl);\n        py += \"break\\n\";\n      } else if (a.op == \"not\") {\n        py += \"\\t\".repeat(curlvl);\n        var v = getval(a.value);\n        var vname = this.nextTmpVar();\n        py += `${vname}=not ${v};`;\n        strayvar.push(vname);\n      } else if (a.op == \"reassign\") {\n        py += \"\\n\";\n\n        py += \"\\t\".repeat(curlvl);\n        if (a.del == true) {\n          var lhs = getval(a.lhs);\n          py += `del ${lhs}[${a.lhssubs[1]}${\n            a.lhssubs[0] == \"lit\" ? \"\" : \"-1\"\n          }];\\n`;\n        } else {\n          var rhs = getval(a.rhs);\n          var lhs = getval(a.lhs);\n          if (a.lhssubs) {\n            lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == \"lit\" ? \"\" : \"-1\"}]`;\n          }\n          if (a.rhssubs) {\n            rhs += `[${a.rhssubs[1]}${a.rhssubs[0] == \"lit\" ? \"\" : \"-1\"}]`;\n          }\n          py += `${lhs}=${rhs};\\n`;\n        }\n      } else if (a.op == \"temp\") {\n        py += \"\\t\".repeat(curlvl);\n        var vname = this.nextTmpVar();\n        py += `${vname}=${a.iden[1]};\\n`;\n        strayvar.push(vname);\n      } else if (a.op == \"discard\") {\n        strayvar = [];\n      } else if (a.op == \"take\") {\n        took = a.count;\n      } else if (a.op == \"import\") {\n        var f = a.file.replace(/\"/g, \"\");\n        for (var j = 0; j < a.iden.length; j++) {\n          py += `${a.iden[j]}=${a.iden[j]};`;\n        }\n        imports.push(f);\n      } else if (a.op == \"length\") {\n        py += \"\\t\".repeat(curlvl);\n        var vname = this.nextTmpVar();\n        var val = getval(a.container);\n        py += `${vname}=${val}.length if type(${val}) != str else len(${val});`;\n        strayvar.push(vname);\n      } else if (a.op == \"comment\") {\n        py += \"\\t\".repeat(curlvl);\n        py += `\"\"\" ${getval(a.value)} \"\"\"\\n`;\n      } else {\n        console.log(a.op);\n      }\n      // py+=\"\\n\"\n    }\n    return { result: py, imports };\n  }\n\n  lib = `# -*- coding: utf-8 -*-\nclass Ctnr:\n  def __init__(self):self.dict = dict();self.length = 0;self.it = -1;\n  def push(self,*args):\n    for arg in args:\n      self.dict[str(self.length)]=arg; self.length+=1\n  def __getitem__(self,i):\n    try: return self.dict[str(i)]\n    except: return None\n  def __setitem__(self,i,x):\n    self.dict[str(i)]=x\n    inti = None\n    try:\n      inti = int(i)\n      if (abs(inti - float(i))>0.0001): inti=None\n    except: pass\n    if (inti != None):\n      self.length=inti+1\n      for j in range(0,self.length):\n        try:  self.dict[str(j)]\n        except: self.dict[str(j)]=None\n  def slice(self,i):\n    ret = Ctnr();\n    for i in range(i,self.length): ret.push(self[i])\n    return ret\n  def concat(self,other):\n    ret = Ctnr();\n    for i in range(0,self.length): ret.push(self[i])\n    for i in range(0,other.length): ret.push(other[i])\n    return ret\n  def __str__(self):\n    if (len(self.dict.keys())==self.length):\n      ret = \"[\"\n      for k in range(0,self.length):\n        v = self[k]\n        if (isinstance(v,Ctnr)): ret += v.__str__()\n        else: ret += str(v)\n        ret+=\",\"\n      ret += \"]\"\n      return ret;\n    else:\n      ret = \"{\"\n      for k in self.dict.keys():\n        ret += str(k)+\":\"\n        v = self.dict[k]\n        if (isinstance(v,Ctnr)): ret += v.__str__()\n        else: ret += str(v)\n        ret+=\",\"\n      ret += \"}\"\n      return ret;\n  def __repr__(self):\n    return self.__str__()\n  def __iter__(self):\n    self.it = -1;\n    return self\n  def __next__(self):\n    self.it += 1\n    if (self.it >= self.length): raise StopIteration()\n    return self[self.it]\nglobals()['Ctnr']=Ctnr;\nclass JSON:\n  @staticmethod\n  def stringify(x):\n    return x;\n#####\n`;\n}\n","import { BaseTranspiler, ModuleWrapperOptions } from \"./base\";\nimport { TranspilerOptions, ASCNodeOperator } from \"../types\";\n\nexport default class RubyCompiler extends BaseTranspiler {\n  protected moduleWrapper({\n    src,\n    markerStart,\n    markerEnd\n  }: ModuleWrapperOptions) {\n    return `#${markerStart}\\n${src}\\n#${markerEnd}\\n`;\n  }\n\n  rename(name) {\n    return name && `${name.toLowerCase()}`;\n  }\n\n  lowerAllPinYinAndMakeItGlobal(asc) {\n    for (let i = 0; i < asc.length; i++) {\n      const item = asc[i];\n      switch (item.op) {\n        case \"var\":\n        case \"name\":\n          item.names = item.names.map(e => this.rename(e));\n          break;\n        case \"call\":\n          if (item.fun[0] == \"iden\") {\n            item.fun[1] = this.rename(item.fun[1]);\n          }\n          item.args = item.args.map(arg => {\n            if (arg[0] == \"iden\") arg[1] = this.rename(arg[1]);\n            return arg;\n          });\n          break;\n        case \"fun\":\n          item.args = item.args.map(arg => {\n            arg.name = this.rename(arg.name);\n            return arg;\n          });\n          break;\n        case \"return\":\n          if (item.value[0] == \"iden\")\n            item.value[1] = this.rename(item.value[1]);\n          break;\n        case \"cat\":\n          item.containers = item.containers.map(e => this.rename(e));\n          break;\n        case \"for\":\n          if (item.container[0] == \"iden\") {\n            item.container[1] = this.rename(item.container[1]);\n          }\n          item.iterator = this.rename(item.iterator);\n          break;\n        case \"push\":\n        case \"length\":\n          if (item.container[0] == \"iden\") {\n            item.container[1] = this.rename(item.container[1]);\n          }\n          break;\n        case \"subscript\":\n          if (item.container[0] == \"iden\") {\n            item.container[1] = this.rename(item.container[1]);\n          }\n          if (item.value[0] == \"iden\") this.rename(item.value[1]);\n          break;\n        case \"if\":\n          item.test = item.test.map(condition => {\n            if (condition[0] == \"iden\")\n              condition[1] = this.rename(condition[1]);\n            return condition;\n          });\n        default:\n          break;\n      }\n      if (item.values) {\n        item.values.forEach(value => {\n          if (value[0] == \"iden\") value[1] = this.rename(value[1]);\n        });\n      }\n      [\"rhs\", \"lhs\", \"lhssubs\", \"value\"].forEach(key => {\n        if (item[key] && item[key][0] == \"iden\")\n          item[key][1] = this.rename(item[key][1]);\n      });\n    }\n    return asc;\n  }\n\n  transpile(options: Partial<TranspilerOptions> = {}) {\n    let imports = options.imports || [];\n    let asc = this.asc;\n    let lop = {\n      \"||\": \" or \",\n      \"&&\": \" and \"\n    };\n    let rb = this.lib;\n    var prevfun = \"\";\n    var prevobj = \"\";\n    var prevobjpublic = false;\n    let curlvl = 0;\n    let strayvar = [];\n    let lambdaList = [];\n    let methodIndex = 0;\n    let took = 0;\n    asc = this.lowerAllPinYinAndMakeItGlobal(asc);\n    const getval = x => {\n      if (!x) return \"\";\n      if (x[0] == \"ans\") {\n        var ans = strayvar[strayvar.length - 1];\n        strayvar = [];\n        return ans;\n      }\n      if (x[0] == \"iden\") return this.rename(x[1]);\n      if (x[1] === undefined) return \"nil\";\n      return x[1];\n    };\n    for (let i = 0; i < asc.length; i++) {\n      let a = asc[i];\n      if (a.op == \"var\") {\n        for (let j = 0; j < a.count; j++) {\n          if (a.values[j] === undefined) {\n            a.values[j] = [];\n          }\n          let name = a.names[j];\n          if (a.type == \"fun\") {\n            prevfun = name;\n            continue;\n          }\n          let value = getval(a.values[j]);\n          if (name === undefined) {\n            name = this.nextTmpVar();\n            strayvar.push(name);\n          }\n          if ([undefined, \"nil\"].includes(value)) {\n            if (a.type == \"arr\") {\n              value = \"Ctnr.new\";\n            } else if (a.type == \"num\") {\n              value = \"0\";\n            } else if (a.type == \"str\") {\n              value = `\"\"`;\n            } else if (a.type == \"bol\") {\n              value = \"false\";\n            }\n          }\n          rb += \"\\t\".repeat(curlvl);\n          rb += `${name}=${value}\\n`;\n        }\n      } else if (a.op == \"print\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += `p([`;\n        rb += strayvar.join(\", \");\n        rb += \"].join)\\n\";\n        strayvar = [];\n      } else if (a.op == \"fun\") {\n        rb += \"\\t\".repeat(curlvl);\n        let argsStr = a.args.map(arg => arg.name).join(\",\");\n        if (methodIndex == 0) {\n          rb += `def ${prevfun}(${argsStr})`;\n        } else {\n          lambdaList.push(prevfun);\n          rb += `${prevfun} = proc {|${argsStr}|`;\n        }\n        methodIndex++;\n      } else if (a.op == \"funbody\") {\n        rb += \"\\t\".repeat(curlvl);\n        if (asc[i - 1].op != \"fun\") {\n          if (methodIndex == 0) {\n            rb += `def ${prevfun}()`;\n          } else {\n            lambdaList.push(prevfun);\n            rb += `${prevfun} = proc {|_|`;\n          }\n          methodIndex++;\n        }\n        rb += \"\\n\";\n        curlvl++;\n      } else if (a.op == \"funend\") {\n        curlvl--;\n        methodIndex--;\n        if (methodIndex == 0) {\n          rb += `${\"\\t\".repeat(curlvl)}end\\n`;\n        } else {\n          rb += `${\"\\t\".repeat(curlvl)}}`;\n        }\n        rb += \"\\n\";\n      } else if (a.op == \"end\") {\n        curlvl--;\n        rb += `${\"\\t\".repeat(curlvl)}end \\n`;\n      } else if (a.op == \"if\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += \"if \";\n        let j = 0;\n        while (j < a.test.length) {\n          if (a.test[j][0] == \"cmp\") {\n            rb += a.test[j][1];\n          } else if (a.test[j][0] == \"ctnr\") {\n            if (a.test[j][1] == \"subs\") {\n              if (a.test[j + 1][1] == \"rest\") {\n                rb += \".slice(1)\";\n              } else {\n                if (a.test[j + 1][0] == \"lit\") {\n                  rb += \"[\" + a.test[j + 1][1] + \"]\";\n                } else {\n                  rb += \"[\" + a.test[j + 1][1] + \"-1]\";\n                }\n              }\n              j++;\n            } else if (a.test[j][1] == \"len\") {\n              rb += \".length\";\n            }\n          } else {\n            rb += a.test[j][1];\n          }\n          j++;\n        }\n        rb += \"\\n\";\n        curlvl++;\n      } else if (a.op == \"else\") {\n        rb += \"\\t\".repeat(curlvl - 1);\n        rb += \"else\\n\";\n      } else if (a.op == \"return\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += `return ${getval(a.value)}\\n`;\n      } else if (a.op.startsWith(\"op\")) {\n        rb += \"\\t\".repeat(curlvl);\n        let _a = a as ASCNodeOperator;\n        var lhs = getval(_a.lhs);\n        var rhs = getval(_a.rhs);\n        var vname = this.nextTmpVar();\n        rb += `${vname}=${lhs}${a.op.slice(2)}${rhs};`;\n        strayvar.push(vname);\n      } else if (a.op == \"name\") {\n        for (var j = 0; j < a.names.length; j++) {\n          rb += \"\\n\";\n          rb += \"\\t\".repeat(curlvl);\n          rb += `${a.names[j]}=${\n            strayvar[strayvar.length - a.names.length + j]\n          };`;\n        }\n        strayvar = strayvar.slice(0, strayvar.length - a.names.length);\n      } else if (a.op == \"call\") {\n        rb += \"\\t\".repeat(curlvl);\n        if (a.pop) {\n          var jj = \"\";\n          for (var j = 0; j < took; j++) {\n            jj += `(${strayvar[strayvar.length - took + j]})`;\n          }\n          strayvar = strayvar.slice(0, strayvar.length - took);\n          took = 0;\n          var vname = this.nextTmpVar();\n          if (!jj.length) {\n            jj = \"()\";\n          }\n          rb += `${vname}=${getval(a.fun)}` + jj + \";\";\n          strayvar.push(vname);\n        } else {\n          var vname = this.nextTmpVar();\n          rb += `${vname}=${getval(a.fun)}(${a.args\n            .map(x => getval(x))\n            .join(\")(\")});`;\n          strayvar.push(vname);\n        }\n      } else if (a.op == \"subscript\") {\n        var idx = getval(a.value);\n        var vname = this.nextTmpVar();\n        if (idx == \"rest\") {\n          rb += `${vname}=${getval(a.container)}.slice(1);`;\n        } else {\n          rb += `${vname}=${getval(a.container)}[${idx}${\n            a.value[0] == \"lit\" ? \"\" : \"-1\"\n          }];`;\n        }\n        strayvar.push(vname);\n      } else if (a.op == \"cat\") {\n        var vname = this.nextTmpVar();\n        rb +=\n          `${vname}=${getval(a.containers[0])}.concat(` +\n          a.containers\n            .slice(1)\n            .map(x => x[1])\n            .join(\").concat(\") +\n          \");\";\n        strayvar.push(vname);\n      } else if (a.op == \"push\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += `${getval(a.container)}.push(${a.values\n          .map(x => getval(x))\n          .join(\",\")})\\n`;\n      } else if (a.op == \"for\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += `${getval(a.container)}.each do |${a.iterator.toLowerCase()}|\\n`;\n        curlvl++;\n      } else if (a.op == \"whiletrue\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += \"while true do\\n\";\n        curlvl++;\n      } else if (a.op == \"whilen\") {\n        rb += \"\\t\".repeat(curlvl);\n        let v = this.randVar();\n        rb += `${getval(a.value)}.times do |${v}|\\n`;\n        curlvl++;\n      } else if (a.op == \"break\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += \"break\\n\";\n      } else if (a.op == \"not\") {\n        rb += \"\\t\".repeat(curlvl);\n        var v = getval(a.value);\n        var vname = this.nextTmpVar();\n        rb += `${vname}=!${v};`;\n        strayvar.push(vname);\n      } else if (a.op == \"reassign\") {\n        rb += \"\\t\".repeat(curlvl);\n        let rhs = getval(a.rhs);\n        let lhs = getval(a.lhs);\n        if (a.lhssubs) {\n          lhs += `[${a.lhssubs[1]}${a.lhssubs[0] == \"lit\" ? \"\" : \"-1\"}]`;\n        }\n        rb += `${lhs}=${rhs}\\n`;\n      } else if (a.op == \"temp\") {\n        var vname = this.nextTmpVar();\n        rb += `${vname}=${a.iden[1]};`;\n        strayvar.push(vname);\n      } else if (a.op == \"discard\") {\n        strayvar = [];\n      } else if (a.op == \"take\") {\n        took = a.count;\n      } else if (a.op == \"import\") {\n        var f = a.file.replace(/\"/g, \"\");\n        for (var j = 0; j < a.iden.length; j++) {\n          rb += `${a.iden[j]}=${f}.${a.iden[j]};`;\n        }\n        imports.push(f);\n      } else if (a.op == \"length\") {\n        var vname = this.nextTmpVar();\n        rb += `${vname}=${getval(a.container)}.length;`;\n        strayvar.push(vname);\n      } else if (a.op == \"comment\") {\n        rb += \"\\t\".repeat(curlvl);\n        rb += `# ${getval(a.value)}\\n`;\n        rb += \"\\t\".repeat(curlvl);\n      } else {\n      }\n    }\n    return { result: rb, imports };\n  }\n\n  lib = `# encoding: UTF-8\nrequire 'forwardable'\nclass Ctnr\n  extend Forwardable\n  attr_accessor :dict, :length, :it\n  def initialize()\n    @dict = {}\n    @length = 0\n    @it = -1\n  end\n  def push(*args)\n    args.each do |arg|\n      @dict[@length.to_s] = arg\n      @length += 1\n    end\n  end\n  def [](i)\n    @dict[i.to_s]\n  end\n  def []=(i,x)\n    @dict[i.to_s] = x\n  end\n  def slice(i)\n    result = Ctnr.new;\n    i.times {|index| result.push(self[index])}\n    return result\n  end\n  def concat(other)\n    other.length.times {|i| push(other[i]) }\n    self\n  end\n  def values\n    @dict.values\n  end\n  def to_s\n    \"[#{@dict.values.join(\", \")}]\"\n  end\n  def_delegators :values, :each\nend\nmodule Math\n  def self.random(*args)\n    rand(*args)\n  end\n  def self.floor(number)\n    number.floor\n  end\nend\n#####\n`;\n}\n","import { TargetLanguages, LogCallback, ExecuteOptions } from \"./types\";\nimport { num2hanzi, bool2hanzi } from \"./parser\";\n\nexport function isLangSupportedForEval(lang: TargetLanguages) {\n  if (lang !== \"js\")\n    throw new Error(\n      `Executing for target language \"${lang}\" is not supported in current environment`\n    );\n  return true;\n}\n\nfunction hanzinizeOuput(value: string) {\n  if (typeof value == \"number\") {\n    return num2hanzi(value);\n  } else if (typeof value == \"boolean\") {\n    return bool2hanzi(value);\n  } else if (Array.isArray(value)) {\n    return value.map(i => hanzinizeOuput(i)).join(\"。\");\n  } else {\n    return value;\n  }\n}\n\nexport function outputHanziWrapper(log: LogCallback, outputHanzi: boolean) {\n  return function output(...args) {\n    log(...args.map(i => (outputHanzi ? hanzinizeOuput(i) : i)));\n  };\n}\n\nexport function evalCompiled(\n  compiledCode: string,\n  options: Partial<ExecuteOptions> = {}\n) {\n  const {\n    outputHanzi = true,\n    scoped = false,\n    lang = \"js\",\n    output = console.log\n  } = options;\n\n  isLangSupportedForEval(lang);\n\n  let code = compiledCode;\n\n  (() => {\n    const _console_log = console.log;\n    console.log = outputHanziWrapper(output, outputHanzi);\n    try {\n      if (!scoped && \"window\" in this) {\n        window.eval(code);\n      } else {\n        eval(code);\n      }\n    } catch (e) {\n      throw e;\n    } finally {\n      console.log = _console_log;\n    }\n  })();\n}\n"],"sourceRoot":""}
back to top