8bitworkshop/gen/server/server.js.map

8 lines
2.3 MiB

{
"version": 3,
"sources": ["../../node_modules/depd/index.js", "../../node_modules/bytes/index.js", "../../node_modules/content-type/index.js", "../../node_modules/setprototypeof/index.js", "../../node_modules/statuses/index.js", "../../node_modules/inherits/inherits_browser.js", "../../node_modules/inherits/inherits.js", "../../node_modules/toidentifier/index.js", "../../node_modules/http-errors/index.js", "../../node_modules/body-parser/node_modules/ms/index.js", "../../node_modules/body-parser/node_modules/debug/src/debug.js", "../../node_modules/body-parser/node_modules/debug/src/browser.js", "../../node_modules/body-parser/node_modules/debug/src/node.js", "../../node_modules/body-parser/node_modules/debug/src/index.js", "../../node_modules/destroy/index.js", "../../node_modules/safer-buffer/safer.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/bom-handling.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/internal.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf16.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf7.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-data.js", "../../node_modules/raw-body/node_modules/iconv-lite/encodings/index.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/streams.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/extend-node.js", "../../node_modules/raw-body/node_modules/iconv-lite/lib/index.js", "../../node_modules/unpipe/index.js", "../../node_modules/raw-body/index.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/bom-handling.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf7.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js", "../../node_modules/body-parser/node_modules/iconv-lite/encodings/index.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/streams.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js", "../../node_modules/body-parser/node_modules/iconv-lite/lib/index.js", "../../node_modules/ee-first/index.js", "../../node_modules/on-finished/index.js", "../../node_modules/body-parser/lib/read.js", "../../node_modules/media-typer/index.js", "../../node_modules/mime-db/index.js", "../../node_modules/mime-types/index.js", "../../node_modules/type-is/index.js", "../../node_modules/body-parser/lib/types/json.js", "../../node_modules/body-parser/lib/types/raw.js", "../../node_modules/body-parser/lib/types/text.js", "../../node_modules/has-symbols/shams.js", "../../node_modules/has-symbols/index.js", "../../node_modules/has-proto/index.js", "../../node_modules/function-bind/implementation.js", "../../node_modules/function-bind/index.js", "../../node_modules/hasown/index.js", "../../node_modules/get-intrinsic/index.js", "../../node_modules/has-property-descriptors/index.js", "../../node_modules/gopd/index.js", "../../node_modules/define-data-property/index.js", "../../node_modules/set-function-length/index.js", "../../node_modules/call-bind/index.js", "../../node_modules/call-bind/callBound.js", "../../node_modules/object-inspect/util.inspect.js", "../../node_modules/object-inspect/index.js", "../../node_modules/side-channel/index.js", "../../node_modules/qs/lib/formats.js", "../../node_modules/qs/lib/utils.js", "../../node_modules/qs/lib/stringify.js", "../../node_modules/qs/lib/parse.js", "../../node_modules/qs/lib/index.js", "../../node_modules/body-parser/lib/types/urlencoded.js", "../../node_modules/body-parser/index.js", "../../node_modules/merge-descriptors/index.js", "../../node_modules/finalhandler/node_modules/ms/index.js", "../../node_modules/finalhandler/node_modules/debug/src/debug.js", "../../node_modules/finalhandler/node_modules/debug/src/browser.js", "../../node_modules/finalhandler/node_modules/debug/src/node.js", "../../node_modules/finalhandler/node_modules/debug/src/index.js", "../../node_modules/encodeurl/index.js", "../../node_modules/escape-html/index.js", "../../node_modules/parseurl/index.js", "../../node_modules/finalhandler/index.js", "../../node_modules/express/node_modules/ms/index.js", "../../node_modules/express/node_modules/debug/src/debug.js", "../../node_modules/express/node_modules/debug/src/browser.js", "../../node_modules/express/node_modules/debug/src/node.js", "../../node_modules/express/node_modules/debug/src/index.js", "../../node_modules/array-flatten/array-flatten.js", "../../node_modules/path-to-regexp/index.js", "../../node_modules/express/lib/router/layer.js", "../../node_modules/methods/index.js", "../../node_modules/express/lib/router/route.js", "../../node_modules/utils-merge/index.js", "../../node_modules/express/lib/router/index.js", "../../node_modules/express/lib/middleware/init.js", "../../node_modules/express/lib/middleware/query.js", "../../node_modules/express/lib/view.js", "../../node_modules/safe-buffer/index.js", "../../node_modules/content-disposition/index.js", "../../node_modules/send/node_modules/debug/node_modules/ms/index.js", "../../node_modules/send/node_modules/debug/src/debug.js", "../../node_modules/send/node_modules/debug/src/browser.js", "../../node_modules/send/node_modules/debug/src/node.js", "../../node_modules/send/node_modules/debug/src/index.js", "../../node_modules/etag/index.js", "../../node_modules/fresh/index.js", "../../node_modules/mime/mime.js", "../../node_modules/send/node_modules/ms/index.js", "../../node_modules/range-parser/index.js", "../../node_modules/send/index.js", "../../node_modules/forwarded/index.js", "../../node_modules/ipaddr.js/lib/ipaddr.js", "../../node_modules/proxy-addr/index.js", "../../node_modules/express/lib/utils.js", "../../node_modules/express/lib/application.js", "../../node_modules/negotiator/lib/charset.js", "../../node_modules/negotiator/lib/encoding.js", "../../node_modules/negotiator/lib/language.js", "../../node_modules/negotiator/lib/mediaType.js", "../../node_modules/negotiator/index.js", "../../node_modules/accepts/index.js", "../../node_modules/express/lib/request.js", "../../node_modules/cookie-signature/index.js", "../../node_modules/cookie/index.js", "../../node_modules/vary/index.js", "../../node_modules/express/lib/response.js", "../../node_modules/serve-static/index.js", "../../node_modules/express/lib/express.js", "../../node_modules/express/index.js", "../../node_modules/object-assign/index.js", "../../node_modules/cors/lib/index.js", "../../node_modules/process-nextick-args/index.js", "../../node_modules/isarray/index.js", "../../node_modules/readable-stream/lib/internal/streams/stream.js", "../../node_modules/readable-stream/node_modules/safe-buffer/index.js", "../../node_modules/core-util-is/lib/util.js", "../../node_modules/readable-stream/lib/internal/streams/BufferList.js", "../../node_modules/readable-stream/lib/internal/streams/destroy.js", "../../node_modules/util-deprecate/node.js", "../../node_modules/readable-stream/lib/_stream_writable.js", "../../node_modules/readable-stream/lib/_stream_duplex.js", "../../node_modules/readable-stream/lib/_stream_readable.js", "../../node_modules/readable-stream/lib/_stream_transform.js", "../../node_modules/readable-stream/lib/_stream_passthrough.js", "../../node_modules/readable-stream/readable.js", "../../node_modules/jszip/lib/support.js", "../../node_modules/jszip/lib/base64.js", "../../node_modules/jszip/lib/nodejsUtils.js", "../../node_modules/immediate/lib/index.js", "../../node_modules/lie/lib/index.js", "../../node_modules/jszip/lib/external.js", "../../node_modules/setimmediate/setImmediate.js", "../../node_modules/jszip/lib/utils.js", "../../node_modules/jszip/lib/stream/GenericWorker.js", "../../node_modules/jszip/lib/utf8.js", "../../node_modules/jszip/lib/stream/ConvertWorker.js", "../../node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js", "../../node_modules/jszip/lib/stream/StreamHelper.js", "../../node_modules/jszip/lib/defaults.js", "../../node_modules/jszip/lib/stream/DataWorker.js", "../../node_modules/jszip/lib/crc32.js", "../../node_modules/jszip/lib/stream/Crc32Probe.js", "../../node_modules/jszip/lib/stream/DataLengthProbe.js", "../../node_modules/jszip/lib/compressedObject.js", "../../node_modules/jszip/lib/zipObject.js", "../../node_modules/pako/lib/utils/common.js", "../../node_modules/pako/lib/zlib/trees.js", "../../node_modules/pako/lib/zlib/adler32.js", "../../node_modules/pako/lib/zlib/crc32.js", "../../node_modules/pako/lib/zlib/messages.js", "../../node_modules/pako/lib/zlib/deflate.js", "../../node_modules/pako/lib/utils/strings.js", "../../node_modules/pako/lib/zlib/zstream.js", "../../node_modules/pako/lib/deflate.js", "../../node_modules/pako/lib/zlib/inffast.js", "../../node_modules/pako/lib/zlib/inftrees.js", "../../node_modules/pako/lib/zlib/inflate.js", "../../node_modules/pako/lib/zlib/constants.js", "../../node_modules/pako/lib/zlib/gzheader.js", "../../node_modules/pako/lib/inflate.js", "../../node_modules/pako/index.js", "../../node_modules/jszip/lib/flate.js", "../../node_modules/jszip/lib/compressions.js", "../../node_modules/jszip/lib/signature.js", "../../node_modules/jszip/lib/generate/ZipFileWorker.js", "../../node_modules/jszip/lib/generate/index.js", "../../node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js", "../../node_modules/jszip/lib/object.js", "../../node_modules/jszip/lib/reader/DataReader.js", "../../node_modules/jszip/lib/reader/ArrayReader.js", "../../node_modules/jszip/lib/reader/StringReader.js", "../../node_modules/jszip/lib/reader/Uint8ArrayReader.js", "../../node_modules/jszip/lib/reader/NodeBufferReader.js", "../../node_modules/jszip/lib/reader/readerFor.js", "../../node_modules/jszip/lib/zipEntry.js", "../../node_modules/jszip/lib/zipEntries.js", "../../node_modules/jszip/lib/load.js", "../../node_modules/jszip/lib/index.js", "../../src/worker/server/server.ts", "../../src/worker/server/buildenv.ts", "../../src/common/workertypes.ts", "../../src/common/util.ts", "../../src/common/basic/compiler.ts", "../../src/worker/tools/misc.ts", "../../src/worker/tools/cc65.ts", "../../src/worker/tools/dasm.ts", "../../src/worker/tools/sdcc.ts", "../../src/worker/assembler.ts", "../../src/common/hdl/hdltypes.ts", "../../src/common/hdl/vxmlparser.ts", "../../src/worker/tools/verilog.ts", "../../src/worker/tools/m6809.ts", "../../src/worker/tools/m6502.ts", "../../src/worker/tools/z80.ts", "../../src/worker/tools/x86.ts", "../../src/worker/tools/arm.ts", "../../src/common/tokenizer.ts", "../../src/common/ecs/binpack.ts", "../../src/common/ecs/ecs.ts", "../../src/common/ecs/decoder.ts", "../../src/common/ecs/compiler.ts", "../../src/worker/tools/ecs.ts", "../../src/worker/tools/remote.ts", "../../src/worker/tools/acme.ts", "../../src/common/wasi/wasishim.ts", "../../src/worker/tools/cc7800.ts", "../../src/worker/workermain.ts", "../../src/worker/server/clang.ts"],
"sourcesContent": ["/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n var vals = str.split(/[ ,]+/)\n var ns = String(namespace).toLowerCase()\n\n for (var i = 0; i < vals.length; i++) {\n var val = vals[i]\n\n // namespace contained\n if (val && (val === '*' || val.toLowerCase() === ns)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n var value = descriptor.value\n\n descriptor.get = function getter () { return value }\n\n if (descriptor.writable) {\n descriptor.set = function setter (val) { return (value = val) }\n }\n\n delete descriptor.value\n delete descriptor.writable\n\n Object.defineProperty(obj, prop, descriptor)\n\n return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n var str = ''\n\n for (var i = 0; i < arity; i++) {\n str += ', arg' + i\n }\n\n return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n var str = this.name + ': ' + this.namespace\n\n if (this.message) {\n str += ' deprecated ' + this.message\n }\n\n for (var i = 0; i < stack.length; i++) {\n str += '\\n at ' + stack[i].toString()\n }\n\n return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n if (!namespace) {\n throw new TypeError('argument namespace is required')\n }\n\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n var file = site[0]\n\n function deprecate (message) {\n // call to self as log\n log.call(deprecate, message)\n }\n\n deprecate._file = file\n deprecate._ignored = isignored(namespace)\n deprecate._namespace = namespace\n deprecate._traced = istraced(namespace)\n deprecate._warned = Object.create(null)\n\n deprecate.function = wrapfunction\n deprecate.property = wrapproperty\n\n return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n if (process.noDeprecation) {\n // --no-deprecation support\n return true\n }\n\n var str = process.env.NO_DEPRECATION || ''\n\n // namespace ignored\n return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n if (process.traceDeprecation) {\n // --trace-deprecation support\n return true\n }\n\n var str = process.env.TRACE_DEPRECATION || ''\n\n // namespace traced\n return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n var haslisteners = eehaslisteners(process, 'deprecation')\n\n // abort early if no destination\n if (!haslisteners && this._ignored) {\n return\n }\n\n var caller\n var callFile\n var callSite\n var depSite\n var i = 0\n var seen = false\n var stack = getStack()\n var file = this._file\n\n if (site) {\n // provided site\n depSite = site\n callSite = callSiteLocation(stack[1])\n callSite.name = depSite.name\n file = callSite[0]\n } else {\n // get call site\n i = 2\n depSite = callSiteLocation(stack[i])\n callSite = depSite\n }\n\n // get caller of deprecated thing in relation to file\n for (; i < stack.length; i++) {\n caller = callSiteLocation(stack[i])\n callFile = caller[0]\n\n if (callFile === file) {\n seen = true\n } else if (callFile === this._file) {\n file = this._file\n } else if (seen) {\n break\n }\n }\n\n var key = caller\n ? depSite.join(':') + '__' + caller.join(':')\n : undefined\n\n if (key !== undefined && key in this._warned) {\n // already warned\n return\n }\n\n this._warned[key] = true\n\n // generate automatic message from call site\n var msg = message\n if (!msg) {\n msg = callSite === depSite || !callSite.name\n ? defaultMessage(depSite)\n : defaultMessage(callSite)\n }\n\n // emit deprecation if listeners exist\n if (haslisteners) {\n var err = DeprecationError(this._namespace, msg, stack.slice(i))\n process.emit('deprecation', err)\n return\n }\n\n // format and write message\n var format = process.stderr.isTTY\n ? formatColor\n : formatPlain\n var output = format.call(this, msg, caller, stack.slice(i))\n process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n var file = callSite.getFileName() || '<anonymous>'\n var line = callSite.getLineNumber()\n var colm = callSite.getColumnNumber()\n\n if (callSite.isEval()) {\n file = callSite.getEvalOrigin() + ', ' + file\n }\n\n var site = [file, line, colm]\n\n site.callSite = callSite\n site.name = callSite.getFunctionName()\n\n return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n var callSite = site.callSite\n var funcName = site.name\n\n // make useful anonymous name\n if (!funcName) {\n funcName = '<anonymous@' + formatLocation(site) + '>'\n }\n\n var context = callSite.getThis()\n var typeName = context && callSite.getTypeName()\n\n // ignore useless type name\n if (typeName === 'Object') {\n typeName = undefined\n }\n\n // make useful type name\n if (typeName === 'Function') {\n typeName = context.name || typeName\n }\n\n return typeName && callSite.getMethodName()\n ? typeName + '.' + funcName\n : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n var timestamp = new Date().toUTCString()\n\n var formatted = timestamp +\n ' ' + this._namespace +\n ' deprecated ' + msg\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n at ' + stack[i].toString()\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' at ' + formatLocation(caller)\n }\n\n return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n // add stack trace\n if (this._traced) {\n for (var i = 0; i < stack.length; i++) {\n formatted += '\\n \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n }\n\n return formatted\n }\n\n if (caller) {\n formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n }\n\n return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n return relative(basePath, callSite[0]) +\n ':' + callSite[1] +\n ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n var limit = Error.stackTraceLimit\n var obj = {}\n var prep = Error.prepareStackTrace\n\n Error.prepareStackTrace = prepareObjectStackTrace\n Error.stackTraceLimit = Math.max(10, limit)\n\n // capture the stack\n Error.captureStackTrace(obj)\n\n // slice this function off the top\n var stack = obj.stack.slice(1)\n\n Error.prepareStackTrace = prep\n Error.stackTraceLimit = limit\n\n return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n if (typeof fn !== 'function') {\n throw new TypeError('argument fn must be a function')\n }\n\n var args = createArgumentsString(fn.length)\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n site.name = fn.name\n\n // eslint-disable-next-line no-new-func\n var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n '\"use strict\"\\n' +\n 'return function (' + args + ') {' +\n 'log.call(deprecate, message, site)\\n' +\n 'return fn.apply(this, arguments)\\n' +\n '}')(fn, log, this, message, site)\n\n return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n throw new TypeError('argument obj must be object')\n }\n\n var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n if (!descriptor) {\n throw new TypeError('must call property on owner object')\n }\n\n if (!descriptor.configurable) {\n throw new TypeError('property must be configurable')\n }\n\n var deprecate = this\n var stack = getStack()\n var site = callSiteLocation(stack[1])\n\n // set site name\n site.name = prop\n\n // convert data descriptor\n if ('value' in descriptor) {\n descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n }\n\n var get = descriptor.get\n var set = descriptor.set\n\n // wrap getter\n if (typeof get === 'function') {\n descriptor.get = function getter () {\n log.call(deprecate, message, site)\n return get.apply(this, arguments)\n }\n }\n\n // wrap setter\n if (typeof set === 'function') {\n descriptor.set = function setter () {\n log.call(deprecate, message, site)\n return set.apply(this, arguments)\n }\n }\n\n Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n var error = new Error()\n var stackString\n\n Object.defineProperty(error, 'constructor', {\n value: DeprecationError\n })\n\n Object.defineProperty(error, 'message', {\n configurable: true,\n enumerable: false,\n value: message,\n writable: true\n })\n\n Object.defineProperty(error, 'name', {\n enumerable: false,\n configurable: true,\n value: 'DeprecationError',\n writable: true\n })\n\n Object.defineProperty(error, 'namespace', {\n configurable: true,\n enumerable: false,\n value: namespace,\n writable: true\n })\n\n Object.defineProperty(error, 'stack', {\n configurable: true,\n enumerable: false,\n get: function () {\n if (stackString !== undefined) {\n return stackString\n }\n\n // prepare stack trace\n return (stackString = createStackString.call(this, stack))\n },\n set: function setter (val) {\n stackString = val\n }\n })\n\n return error\n}\n", "/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: Math.pow(1024, 4),\n pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.pb) {\n unit = 'PB';\n } else if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.split('.').map(function (s, i) {\n return i === 0\n ? s.replace(formatThousandsRegExp, thousandsSeparator)\n : s\n }).join('.');\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n if (isNaN(floatValue)) {\n return null;\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n var string = type\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n var header = typeof string === 'object'\n ? getcontenttype(string)\n : string\n\n if (typeof header !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = header.indexOf(';')\n var type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (!TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid media type')\n }\n\n var obj = new ContentType(type.toLowerCase())\n\n // parse parameters\n if (index !== -1) {\n var key\n var match\n var value\n\n PARAM_REGEXP.lastIndex = index\n\n while ((match = PARAM_REGEXP.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value.charCodeAt(0) === 0x22 /* \" */) {\n // remove quotes\n value = value.slice(1, -1)\n\n // remove escapes\n if (value.indexOf('\\\\') !== -1) {\n value = value.replace(QESC_REGEXP, '$1')\n }\n }\n\n obj.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n }\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n var header\n\n if (typeof obj.getHeader === 'function') {\n // res-like\n header = obj.getHeader('content-type')\n } else if (typeof obj.headers === 'object') {\n // req-like\n header = obj.headers && obj.headers['content-type']\n }\n\n if (typeof header !== 'string') {\n throw new TypeError('content-type header is missing from object')\n }\n\n return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n // no need to quote tokens\n if (TOKEN_REGEXP.test(str)) {\n return str\n }\n\n if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n this.parameters = Object.create(null)\n this.type = type\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n obj.__proto__ = proto\n return obj\n}\n\nfunction mixinProperties (obj, proto) {\n for (var prop in proto) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n obj[prop] = proto[prop]\n }\n }\n return obj\n}\n", "/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n var map = {}\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // populate map\n map[message.toLowerCase()] = status\n })\n\n return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n return Object.keys(codes).map(function mapCode (code) {\n return Number(code)\n })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n var msg = message.toLowerCase()\n\n if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n throw new Error('invalid status message: \"' + message + '\"')\n }\n\n return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n throw new Error('invalid status code: ' + code)\n }\n\n return status.message[code]\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n return getStatusMessage(code)\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n return getStatusMessage(n)\n }\n\n return getStatusCode(code)\n}\n", "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", "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", "/*!\n * toidentifier\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n return str\n .split(' ')\n .map(function (token) {\n return token.slice(0, 1).toUpperCase() + token.slice(1)\n })\n .join('')\n .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n // so much arity going on ~_~\n var err\n var msg\n var status = 500\n var props = {}\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i]\n var type = typeof arg\n if (type === 'object' && arg instanceof Error) {\n err = arg\n status = err.status || err.statusCode || status\n } else if (type === 'number' && i === 0) {\n status = arg\n } else if (type === 'string') {\n msg = arg\n } else if (type === 'object') {\n props = arg\n } else {\n throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n }\n }\n\n if (typeof status === 'number' && (status < 400 || status >= 600)) {\n deprecate('non-error status code; use only 4xx or 5xx status codes')\n }\n\n if (typeof status !== 'number' ||\n (!statuses.message[status] && (status < 400 || status >= 600))) {\n status = 500\n }\n\n // constructor\n var HttpError = createError[status] || createError[codeClass(status)]\n\n if (!err) {\n // create error\n err = HttpError\n ? new HttpError(msg)\n : new Error(msg || statuses.message[status])\n Error.captureStackTrace(err, createError)\n }\n\n if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n // add properties to generic error\n err.expose = status < 500\n err.status = err.statusCode = status\n }\n\n for (var key in props) {\n if (key !== 'status' && key !== 'statusCode') {\n err[key] = props[key]\n }\n }\n\n return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n function HttpError () {\n throw new TypeError('cannot construct abstract class')\n }\n\n inherits(HttpError, Error)\n\n return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ClientError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ClientError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ClientError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ClientError, HttpError)\n nameFunc(ClientError, className)\n\n ClientError.prototype.status = code\n ClientError.prototype.statusCode = code\n ClientError.prototype.expose = true\n\n return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n return function isHttpError (val) {\n if (!val || typeof val !== 'object') {\n return false\n }\n\n if (val instanceof HttpError) {\n return true\n }\n\n return val instanceof Error &&\n typeof val.expose === 'boolean' &&\n typeof val.statusCode === 'number' && val.status === val.statusCode\n }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n var className = toClassName(name)\n\n function ServerError (message) {\n // create the error object\n var msg = message != null ? message : statuses.message[code]\n var err = new Error(msg)\n\n // capture a stack trace to the construction point\n Error.captureStackTrace(err, ServerError)\n\n // adjust the [[Prototype]]\n setPrototypeOf(err, ServerError.prototype)\n\n // redefine the error message\n Object.defineProperty(err, 'message', {\n enumerable: true,\n configurable: true,\n value: msg,\n writable: true\n })\n\n // redefine the error name\n Object.defineProperty(err, 'name', {\n enumerable: false,\n configurable: true,\n value: className,\n writable: true\n })\n\n return err\n }\n\n inherits(ServerError, HttpError)\n nameFunc(ServerError, className)\n\n ServerError.prototype.status = code\n ServerError.prototype.statusCode = code\n ServerError.prototype.expose = false\n\n return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n if (desc && desc.configurable) {\n desc.value = name\n Object.defineProperty(func, 'name', desc)\n }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n codes.forEach(function forEachCode (code) {\n var CodeError\n var name = toIdentifier(statuses.message[code])\n\n switch (codeClass(code)) {\n case 400:\n CodeError = createClientErrorConstructor(HttpError, name, code)\n break\n case 500:\n CodeError = createServerErrorConstructor(HttpError, name, code)\n break\n }\n\n if (CodeError) {\n // export the constructor\n exports[code] = CodeError\n exports[name] = CodeError\n }\n })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n return name.substr(-5) !== 'Error'\n ? name + 'Error'\n : name\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n if (isFsReadStream(stream)) {\n destroyReadStream(stream)\n } else if (isZlibStream(stream)) {\n destroyZlibStream(stream)\n } else if (hasDestroy(stream)) {\n stream.destroy()\n }\n\n if (isEventEmitter(stream) && suppress) {\n stream.removeAllListeners('error')\n stream.addListener('error', noop)\n }\n\n return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n stream.destroy()\n\n if (typeof stream.close === 'function') {\n // node.js core bug work-around\n stream.on('open', onOpenClose)\n }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n if (stream._hadError === true) {\n var prop = stream._binding === null\n ? '_binding'\n : '_handle'\n\n stream[prop] = {\n close: function () { this[prop] = null }\n }\n }\n\n stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n if (typeof stream.destroy === 'function') {\n // node.js core bug work-around\n // istanbul ignore if: node.js 0.8\n if (stream._binding) {\n // node.js < 0.10.0\n stream.destroy()\n if (stream._processing) {\n stream._needDrain = true\n stream.once('drain', onDrainClearBinding)\n } else {\n stream._binding.clear()\n }\n } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n // node.js >= 12, ^11.1.0, ^10.15.1\n stream.destroy()\n } else if (stream._destroy && typeof stream.close === 'function') {\n // node.js 7, 8\n stream.destroyed = true\n stream.close()\n } else {\n // fallback\n // istanbul ignore next\n stream.destroy()\n }\n } else if (typeof stream.close === 'function') {\n // node.js < 8 fallback\n closeZlibStream(stream)\n }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n return stream instanceof Stream &&\n typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n return stream instanceof Zlib.Gzip ||\n stream instanceof Zlib.Gunzip ||\n stream instanceof Zlib.Deflate ||\n stream instanceof Zlib.DeflateRaw ||\n stream instanceof Zlib.Inflate ||\n stream instanceof Zlib.InflateRaw ||\n stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n if (typeof this.fd === 'number') {\n // actually close down the fd\n this.close()\n }\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBytes = [];\n this.initialBytesLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBytes.push(buf);\n this.initialBytesLen += buf.length;\n \n if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n this.initialBytes.length = this.initialBytesLen = 0;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var res = this.decoder.write(buf),\n trail = this.decoder.end();\n\n return trail ? (res + trail) : res;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n var enc = defaultEncoding || 'utf-16le';\n\n if (buf.length >= 2) {\n // Check BOM.\n if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n enc = 'utf-16be';\n else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n enc = 'utf-16le';\n else {\n // No BOM found. Try to deduce encoding from initial content.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n for (var i = 0; i < _len; i += 2) {\n if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n }\n\n if (asciiCharsBE > asciiCharsLE)\n enc = 'utf-16be';\n else if (asciiCharsBE < asciiCharsLE)\n enc = 'utf-16le';\n }\n }\n\n return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString();\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString();\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 decode tables.\n var thirdByteNodeIdx = this.decodeTables.length;\n var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n var fourthByteNodeIdx = this.decodeTables.length;\n var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n var secondByteNode = this.decodeTables[secondByteNodeIdx];\n for (var j = 0x30; j <= 0x39; j++)\n secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n }\n for (var i = 0x81; i <= 0xFE; i++)\n thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n for (var i = 0x30; i <= 0x39; i++)\n fourthByteNode[i] = GB18030_CODE\n } \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0)\n this._setEncodeChar(uCode, mbCode);\n else if (uCode <= NODE_START)\n this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n else if (uCode <= SEQ_START)\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBuf = Buffer.alloc(0);\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n uCode;\n\n if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n \n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n uCode = this.defaultCharUnicode.charCodeAt(0);\n }\n else if (uCode === GB18030_CODE) {\n var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode > 0xFFFF) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 + uCode % 0x400;\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBuf.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var buf = this.prevBuf.slice(1);\n\n // Parse remaining as usual.\n this.prevBuf = Buffer.alloc(0);\n this.nodeIdx = 0;\n if (buf.length > 0)\n ret += this.write(buf);\n }\n\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + Math.floor((r-l+1)/2);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'\u20AC': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [0xa2cc],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n \n // Additional Public API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n\n\n // Not published yet.\n iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n var original = undefined; // Place to keep original methods.\n\n // Node authors rewrote Buffer internals to make it compatible with\n // Uint8Array and we cannot patch key functions since then.\n // Note: this does use older Buffer API on a purpose\n iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n iconv.extendNodeEncodings = function extendNodeEncodings() {\n if (original) return;\n original = {};\n\n if (!iconv.supportsNodeEncodingsExtension) {\n console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n return;\n }\n\n var nodeNativeEncodings = {\n 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n };\n\n Buffer.isNativeEncoding = function(enc) {\n return enc && nodeNativeEncodings[enc.toLowerCase()];\n }\n\n // -- SlowBuffer -----------------------------------------------------------\n var SlowBuffer = require('buffer').SlowBuffer;\n\n original.SlowBufferToString = SlowBuffer.prototype.toString;\n SlowBuffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.SlowBufferWrite = SlowBuffer.prototype.write;\n SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n }\n\n // -- Buffer ---------------------------------------------------------------\n\n original.BufferIsEncoding = Buffer.isEncoding;\n Buffer.isEncoding = function(encoding) {\n return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n }\n\n original.BufferByteLength = Buffer.byteLength;\n Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferByteLength.call(this, str, encoding);\n\n // Slow, I know, but we don't have a better way yet.\n return iconv.encode(str, encoding).length;\n }\n\n original.BufferToString = Buffer.prototype.toString;\n Buffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.BufferWrite = Buffer.prototype.write;\n Buffer.prototype.write = function(string, offset, length, encoding) {\n var _offset = offset, _length = length, _encoding = encoding;\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n\n // TODO: Set _charsWritten.\n }\n\n\n // -- Readable -------------------------------------------------------------\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n original.ReadableSetEncoding = Readable.prototype.setEncoding;\n Readable.prototype.setEncoding = function setEncoding(enc, options) {\n // Use our own decoder, it has the same interface.\n // We cannot use original function as it doesn't handle BOM-s.\n this._readableState.decoder = iconv.getDecoder(enc, options);\n this._readableState.encoding = enc;\n }\n\n Readable.prototype.collect = iconv._collect;\n }\n }\n\n // Remove iconv-lite Node primitive extensions.\n iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n if (!iconv.supportsNodeEncodingsExtension)\n return;\n if (!original)\n throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n delete Buffer.isNativeEncoding;\n\n var SlowBuffer = require('buffer').SlowBuffer;\n\n SlowBuffer.prototype.toString = original.SlowBufferToString;\n SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n Buffer.isEncoding = original.BufferIsEncoding;\n Buffer.byteLength = original.BufferByteLength;\n Buffer.prototype.toString = original.BufferToString;\n Buffer.prototype.write = original.BufferWrite;\n\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n Readable.prototype.setEncoding = original.ReadableSetEncoding;\n delete Readable.prototype.collect;\n }\n\n original = undefined;\n }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n // Load streaming support in Node v0.10+\n var nodeVerArr = nodeVer.split(\".\").map(Number);\n if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n require(\"./streams\")(iconv);\n }\n\n // Load Node primitive extensions.\n require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n", "/*!\n * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n if (!encoding) return null\n\n try {\n return iconv.getDecoder(encoding)\n } catch (e) {\n // error getting decoder\n if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n // the encoding was not found\n throw createError(415, 'specified encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n var done = callback\n var opts = options || {}\n\n if (options === true || typeof options === 'string') {\n // short cut for encoding\n opts = {\n encoding: options\n }\n }\n\n if (typeof options === 'function') {\n done = options\n opts = {}\n }\n\n // validate callback is a function, if provided\n if (done !== undefined && typeof done !== 'function') {\n throw new TypeError('argument callback must be a function')\n }\n\n // require the callback without promises\n if (!done && !global.Promise) {\n throw new TypeError('argument callback is required')\n }\n\n // get encoding\n var encoding = opts.encoding !== true\n ? opts.encoding\n : 'utf-8'\n\n // convert the limit to an integer\n var limit = bytes.parse(opts.limit)\n\n // convert the expected length to an integer\n var length = opts.length != null && !isNaN(opts.length)\n ? parseInt(opts.length, 10)\n : null\n\n if (done) {\n // classic callback style\n return readStream(stream, encoding, length, limit, wrap(done))\n }\n\n return new Promise(function executor (resolve, reject) {\n readStream(stream, encoding, length, limit, function onRead (err, buf) {\n if (err) return reject(err)\n resolve(buf)\n })\n })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n // unpipe everything from the stream\n unpipe(stream)\n\n // pause stream\n if (typeof stream.pause === 'function') {\n stream.pause()\n }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n var complete = false\n var sync = true\n\n // check the length and limit options.\n // note: we intentionally leave the stream paused,\n // so users should handle the stream themselves.\n if (limit !== null && length !== null && length > limit) {\n return done(createError(413, 'request entity too large', {\n expected: length,\n length: length,\n limit: limit,\n type: 'entity.too.large'\n }))\n }\n\n // streams1: assert request encoding is buffer.\n // streams2+: assert the stream encoding is buffer.\n // stream._decoder: streams1\n // state.encoding: streams2\n // state.decoder: streams2, specifically < 0.10.6\n var state = stream._readableState\n if (stream._decoder || (state && (state.encoding || state.decoder))) {\n // developer error\n return done(createError(500, 'stream encoding should not be set', {\n type: 'stream.encoding.set'\n }))\n }\n\n if (typeof stream.readable !== 'undefined' && !stream.readable) {\n return done(createError(500, 'stream is not readable', {\n type: 'stream.not.readable'\n }))\n }\n\n var received = 0\n var decoder\n\n try {\n decoder = getDecoder(encoding)\n } catch (err) {\n return done(err)\n }\n\n var buffer = decoder\n ? ''\n : []\n\n // attach listeners\n stream.on('aborted', onAborted)\n stream.on('close', cleanup)\n stream.on('data', onData)\n stream.on('end', onEnd)\n stream.on('error', onEnd)\n\n // mark sync section complete\n sync = false\n\n function done () {\n var args = new Array(arguments.length)\n\n // copy arguments\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n // mark complete\n complete = true\n\n if (sync) {\n process.nextTick(invokeCallback)\n } else {\n invokeCallback()\n }\n\n function invokeCallback () {\n cleanup()\n\n if (args[0]) {\n // halt the stream on error\n halt(stream)\n }\n\n callback.apply(null, args)\n }\n }\n\n function onAborted () {\n if (complete) return\n\n done(createError(400, 'request aborted', {\n code: 'ECONNABORTED',\n expected: length,\n length: length,\n received: received,\n type: 'request.aborted'\n }))\n }\n\n function onData (chunk) {\n if (complete) return\n\n received += chunk.length\n\n if (limit !== null && received > limit) {\n done(createError(413, 'request entity too large', {\n limit: limit,\n received: received,\n type: 'entity.too.large'\n }))\n } else if (decoder) {\n buffer += decoder.write(chunk)\n } else {\n buffer.push(chunk)\n }\n }\n\n function onEnd (err) {\n if (complete) return\n if (err) return done(err)\n\n if (length !== null && received !== length) {\n done(createError(400, 'request size did not match content length', {\n expected: length,\n length: length,\n received: received,\n type: 'request.size.invalid'\n }))\n } else {\n var string = decoder\n ? buffer + (decoder.end() || '')\n : Buffer.concat(buffer)\n done(null, string)\n }\n }\n\n function cleanup () {\n buffer = null\n\n stream.removeListener('aborted', onAborted)\n stream.removeListener('data', onData)\n stream.removeListener('end', onEnd)\n stream.removeListener('error', onEnd)\n stream.removeListener('close', cleanup)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBytes = [];\n this.initialBytesLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBytes.push(buf);\n this.initialBytesLen += buf.length;\n \n if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n this.initialBytes.length = this.initialBytesLen = 0;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var buf = Buffer.concat(this.initialBytes),\n encoding = detectEncoding(buf, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var res = this.decoder.write(buf),\n trail = this.decoder.end();\n\n return trail ? (res + trail) : res;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n var enc = defaultEncoding || 'utf-16le';\n\n if (buf.length >= 2) {\n // Check BOM.\n if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n enc = 'utf-16be';\n else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n enc = 'utf-16le';\n else {\n // No BOM found. Try to deduce encoding from initial content.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n for (var i = 0; i < _len; i += 2) {\n if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n }\n\n if (asciiCharsBE > asciiCharsLE)\n enc = 'utf-16be';\n else if (asciiCharsBE < asciiCharsLE)\n enc = 'utf-16le';\n }\n }\n\n return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString();\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString();\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 decode tables.\n var thirdByteNodeIdx = this.decodeTables.length;\n var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n var fourthByteNodeIdx = this.decodeTables.length;\n var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n var secondByteNode = this.decodeTables[secondByteNodeIdx];\n for (var j = 0x30; j <= 0x39; j++)\n secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n }\n for (var i = 0x81; i <= 0xFE; i++)\n thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n for (var i = 0x30; i <= 0x39; i++)\n fourthByteNode[i] = GB18030_CODE\n } \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0)\n this._setEncodeChar(uCode, mbCode);\n else if (uCode <= NODE_START)\n this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n else if (uCode <= SEQ_START)\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBuf = Buffer.alloc(0);\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n uCode;\n\n if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n \n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n uCode = this.defaultCharUnicode.charCodeAt(0);\n }\n else if (uCode === GB18030_CODE) {\n var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode > 0xFFFF) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 + uCode % 0x400;\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBuf.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var buf = this.prevBuf.slice(1);\n\n // Parse remaining as usual.\n this.prevBuf = Buffer.alloc(0);\n this.nodeIdx = 0;\n if (buf.length > 0)\n ret += this.write(buf);\n }\n\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + Math.floor((r-l+1)/2);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'\u20AC': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [0xa2cc],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n \n // Additional Public API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n\n\n // Not published yet.\n iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n var original = undefined; // Place to keep original methods.\n\n // Node authors rewrote Buffer internals to make it compatible with\n // Uint8Array and we cannot patch key functions since then.\n // Note: this does use older Buffer API on a purpose\n iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n iconv.extendNodeEncodings = function extendNodeEncodings() {\n if (original) return;\n original = {};\n\n if (!iconv.supportsNodeEncodingsExtension) {\n console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n return;\n }\n\n var nodeNativeEncodings = {\n 'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n 'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n };\n\n Buffer.isNativeEncoding = function(enc) {\n return enc && nodeNativeEncodings[enc.toLowerCase()];\n }\n\n // -- SlowBuffer -----------------------------------------------------------\n var SlowBuffer = require('buffer').SlowBuffer;\n\n original.SlowBufferToString = SlowBuffer.prototype.toString;\n SlowBuffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.SlowBufferWrite = SlowBuffer.prototype.write;\n SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n }\n\n // -- Buffer ---------------------------------------------------------------\n\n original.BufferIsEncoding = Buffer.isEncoding;\n Buffer.isEncoding = function(encoding) {\n return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n }\n\n original.BufferByteLength = Buffer.byteLength;\n Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferByteLength.call(this, str, encoding);\n\n // Slow, I know, but we don't have a better way yet.\n return iconv.encode(str, encoding).length;\n }\n\n original.BufferToString = Buffer.prototype.toString;\n Buffer.prototype.toString = function(encoding, start, end) {\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferToString.call(this, encoding, start, end);\n\n // Otherwise, use our decoding method.\n if (typeof start == 'undefined') start = 0;\n if (typeof end == 'undefined') end = this.length;\n return iconv.decode(this.slice(start, end), encoding);\n }\n\n original.BufferWrite = Buffer.prototype.write;\n Buffer.prototype.write = function(string, offset, length, encoding) {\n var _offset = offset, _length = length, _encoding = encoding;\n // Support both (string, offset, length, encoding)\n // and the legacy (string, encoding, offset, length)\n if (isFinite(offset)) {\n if (!isFinite(length)) {\n encoding = length;\n length = undefined;\n }\n } else { // legacy\n var swap = encoding;\n encoding = offset;\n offset = length;\n length = swap;\n }\n\n encoding = String(encoding || 'utf8').toLowerCase();\n\n // Use native conversion when possible\n if (Buffer.isNativeEncoding(encoding))\n return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n offset = +offset || 0;\n var remaining = this.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = +length;\n if (length > remaining) {\n length = remaining;\n }\n }\n\n if (string.length > 0 && (length < 0 || offset < 0))\n throw new RangeError('attempt to write beyond buffer bounds');\n\n // Otherwise, use our encoding method.\n var buf = iconv.encode(string, encoding);\n if (buf.length < length) length = buf.length;\n buf.copy(this, offset, 0, length);\n return length;\n\n // TODO: Set _charsWritten.\n }\n\n\n // -- Readable -------------------------------------------------------------\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n original.ReadableSetEncoding = Readable.prototype.setEncoding;\n Readable.prototype.setEncoding = function setEncoding(enc, options) {\n // Use our own decoder, it has the same interface.\n // We cannot use original function as it doesn't handle BOM-s.\n this._readableState.decoder = iconv.getDecoder(enc, options);\n this._readableState.encoding = enc;\n }\n\n Readable.prototype.collect = iconv._collect;\n }\n }\n\n // Remove iconv-lite Node primitive extensions.\n iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n if (!iconv.supportsNodeEncodingsExtension)\n return;\n if (!original)\n throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n delete Buffer.isNativeEncoding;\n\n var SlowBuffer = require('buffer').SlowBuffer;\n\n SlowBuffer.prototype.toString = original.SlowBufferToString;\n SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n Buffer.isEncoding = original.BufferIsEncoding;\n Buffer.byteLength = original.BufferByteLength;\n Buffer.prototype.toString = original.BufferToString;\n Buffer.prototype.write = original.BufferWrite;\n\n if (iconv.supportsStreams) {\n var Readable = require('stream').Readable;\n\n Readable.prototype.setEncoding = original.ReadableSetEncoding;\n delete Readable.prototype.collect;\n }\n\n original = undefined;\n }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n // Load streaming support in Node v0.10+\n var nodeVerArr = nodeVer.split(\".\").map(Number);\n if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n require(\"./streams\")(iconv);\n }\n\n // Load Node primitive extensions.\n require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n", "/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n", "/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished (msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, wrap(listener))\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished (msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener (msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish (error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket (socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // istanbul ignore next: node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener (msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener (msg) {\n function listener (err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\n// istanbul ignore next: node.js 0.8 patch\nfunction patchAssignSocket (res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket (socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n try {\n return require('async_hooks')\n } catch (e) {\n return {}\n }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n var res\n\n // create anonymous resource\n if (asyncHooks.AsyncResource) {\n res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n }\n\n // incompatible node.js\n if (!res || !res.runInAsyncScope) {\n return fn\n }\n\n // return bound function\n return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n var length\n var opts = options\n var stream\n\n // flag as parsed\n req._body = true\n\n // read options\n var encoding = opts.encoding !== null\n ? opts.encoding\n : null\n var verify = opts.verify\n\n try {\n // get the content stream\n stream = contentstream(req, debug, opts.inflate)\n length = stream.length\n stream.length = undefined\n } catch (err) {\n return next(err)\n }\n\n // set raw-body options\n opts.length = length\n opts.encoding = verify\n ? null\n : encoding\n\n // assert charset is supported\n if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n }))\n }\n\n // read body\n debug('read body')\n getBody(stream, opts, function (error, body) {\n if (error) {\n var _error\n\n if (error.type === 'encoding.unsupported') {\n // echo back charset\n _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n charset: encoding.toLowerCase(),\n type: 'charset.unsupported'\n })\n } else {\n // set status code on error\n _error = createError(400, error)\n }\n\n // unpipe from stream and destroy\n if (stream !== req) {\n unpipe(req)\n destroy(stream, true)\n }\n\n // read off entire request\n dump(req, function onfinished () {\n next(createError(400, _error))\n })\n return\n }\n\n // verify\n if (verify) {\n try {\n debug('verify body')\n verify(req, res, body, encoding)\n } catch (err) {\n next(createError(403, err, {\n body: body,\n type: err.type || 'entity.verify.failed'\n }))\n return\n }\n }\n\n // parse\n var str = body\n try {\n debug('parse body')\n str = typeof body !== 'string' && encoding !== null\n ? iconv.decode(body, encoding)\n : body\n req.body = parse(str)\n } catch (err) {\n next(createError(400, err, {\n body: str,\n type: err.type || 'entity.parse.failed'\n }))\n return\n }\n\n next()\n })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n var length = req.headers['content-length']\n var stream\n\n debug('content-encoding \"%s\"', encoding)\n\n if (inflate === false && encoding !== 'identity') {\n throw createError(415, 'content encoding unsupported', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n switch (encoding) {\n case 'deflate':\n stream = zlib.createInflate()\n debug('inflate body')\n req.pipe(stream)\n break\n case 'gzip':\n stream = zlib.createGunzip()\n debug('gunzip body')\n req.pipe(stream)\n break\n case 'identity':\n stream = req\n stream.length = length\n break\n default:\n throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n encoding: encoding,\n type: 'encoding.unsupported'\n })\n }\n\n return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n if (onFinished.isFinished(req)) {\n callback(null)\n } else {\n onFinished(req, callback)\n req.resume()\n }\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * SHT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first = ALPHA / DIGIT\n * restricted-name-chars = ALPHA / DIGIT / \"!\" / \"#\" /\n * \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n * ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n * ; specify a structured syntax suffix\n * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z\n * DIGIT = %x30-39 ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var subtype = obj.subtype\n var suffix = obj.suffix\n var type = obj.type\n\n if (!type || !typeNameRegExp.test(type)) {\n throw new TypeError('invalid type')\n }\n\n if (!subtype || !subtypeNameRegExp.test(subtype)) {\n throw new TypeError('invalid subtype')\n }\n\n // format as type/subtype\n var string = type + '/' + subtype\n\n // append +suffix\n if (suffix) {\n if (!typeNameRegExp.test(suffix)) {\n throw new TypeError('invalid suffix')\n }\n\n string += '+' + suffix\n }\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!tokenRegExp.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n if (typeof string === 'object') {\n string = getcontenttype(string)\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = string.indexOf(';')\n var type = index !== -1\n ? string.substr(0, index)\n : string\n\n var key\n var match\n var obj = splitType(type)\n var params = {}\n var value\n\n paramRegExp.lastIndex = index\n\n while (match = paramRegExp.exec(string)) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(qescRegExp, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n obj.parameters = params\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n if (typeof obj.getHeader === 'function') {\n // res-like\n return obj.getHeader('content-type')\n }\n\n if (typeof obj.headers === 'object') {\n // req-like\n return obj.headers && obj.headers['content-type']\n }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n var str = String(val)\n\n // no need to quote tokens\n if (tokenRegExp.test(str)) {\n return str\n }\n\n if (str.length > 0 && !textRegExp.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n var match = typeRegExp.exec(string.toLowerCase())\n\n if (!match) {\n throw new TypeError('invalid media type')\n }\n\n var type = match[1]\n var subtype = match[2]\n var suffix\n\n // suffix after last +\n var index = subtype.lastIndexOf('+')\n if (index !== -1) {\n suffix = subtype.substr(index + 1)\n subtype = subtype.substr(0, index)\n }\n\n var obj = {\n type: type,\n subtype: subtype,\n suffix: suffix\n }\n\n return obj\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\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 * type-is\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n var i\n var types = types_\n\n // remove parameters and normalize\n var val = tryNormalizeType(value)\n\n // no type or invalid\n if (!val) {\n return false\n }\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length - 1)\n for (i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // no types, return the content type\n if (!types || !types.length) {\n return val\n }\n\n var type\n for (i = 0; i < types.length; i++) {\n if (mimeMatch(normalize(type = types[i]), val)) {\n return type[0] === '+' || type.indexOf('*') !== -1\n ? val\n : type\n }\n }\n\n // no matches\n return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n return req.headers['transfer-encoding'] !== undefined ||\n !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * this.is('html'); // => 'html'\n * this.is('text/html'); // => 'text/html'\n * this.is('text/*', 'application/json'); // => 'text/html'\n *\n * // When Content-Type is application/json\n * this.is('json', 'urlencoded'); // => 'json'\n * this.is('application/json'); // => 'application/json'\n * this.is('html', 'application/*'); // => 'application/json'\n *\n * this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n var types = types_\n\n // no body\n if (!hasbody(req)) {\n return null\n }\n\n // support flattened arguments\n if (arguments.length > 2) {\n types = new Array(arguments.length - 1)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i + 1]\n }\n }\n\n // request content type\n var value = req.headers['content-type']\n\n return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n * var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n if (typeof type !== 'string') {\n // invalid type\n return false\n }\n\n switch (type) {\n case 'urlencoded':\n return 'application/x-www-form-urlencoded'\n case 'multipart':\n return 'multipart/*'\n }\n\n if (type[0] === '+') {\n // \"+json\" -> \"*/*+json\" expando\n return '*/*' + type\n }\n\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n // invalid type\n if (expected === false) {\n return false\n }\n\n // split types\n var actualParts = actual.split('/')\n var expectedParts = expected.split('/')\n\n // invalid format\n if (actualParts.length !== 2 || expectedParts.length !== 2) {\n return false\n }\n\n // validate type\n if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n return false\n }\n\n // validate suffix wildcard\n if (expectedParts[1].substr(0, 2) === '*+') {\n return expectedParts[1].length <= actualParts[1].length + 1 &&\n expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n }\n\n // validate subtype\n if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n return false\n }\n\n return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n // parse the type\n var type = typer.parse(value)\n\n // remove the parameters\n type.parameters = undefined\n\n // reformat it\n return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n if (!value) {\n return null\n }\n\n try {\n return normalizeType(value)\n } catch (err) {\n return null\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n * ws = *(\n * %x20 / ; Space\n * %x09 / ; Horizontal tab\n * %x0A / ; Line feed or New line\n * %x0D ) ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n var opts = options || {}\n\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var inflate = opts.inflate !== false\n var reviver = opts.reviver\n var strict = opts.strict !== false\n var type = opts.type || 'application/json'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n if (body.length === 0) {\n // special-case empty json body, as it's a common client-side mistake\n // TODO: maybe make this configurable or part of \"strict\" option\n return {}\n }\n\n if (strict) {\n var first = firstchar(body)\n\n if (first !== '{' && first !== '[') {\n debug('strict violation')\n throw createStrictSyntaxError(body, first)\n }\n }\n\n try {\n debug('parse json')\n return JSON.parse(body, reviver)\n } catch (e) {\n throw normalizeJsonSyntaxError(e, {\n message: e.message,\n stack: e.stack\n })\n }\n }\n\n return function jsonParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset per RFC 7159 sec 8.1\n var charset = getCharset(req) || 'utf-8'\n if (charset.slice(0, 4) !== 'utf-') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n var index = str.indexOf(char)\n var partial = index !== -1\n ? str.substring(0, index) + '#'\n : ''\n\n try {\n JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n } catch (e) {\n return normalizeJsonSyntaxError(e, {\n message: e.message.replace('#', char),\n stack: e.stack\n })\n }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n var match = FIRST_CHAR_REGEXP.exec(str)\n\n return match\n ? match[1]\n : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n var keys = Object.getOwnPropertyNames(error)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n if (key !== 'stack' && key !== 'message') {\n delete error[key]\n }\n }\n\n // replace stack before message for Node.js 0.10 and below\n error.stack = obj.stack.replace(error.message, obj.message)\n error.message = obj.message\n\n return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n var opts = options || {}\n\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'application/octet-stream'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function rawParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n encoding: null,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n var opts = options || {}\n\n var defaultCharset = opts.defaultCharset || 'utf-8'\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'text/plain'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (buf) {\n return buf\n }\n\n return function textParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // get charset\n var charset = getCharset(req) || defaultCharset\n\n // read\n read(req, res, next, parse, debug, {\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {(o: {}, p: PropertyKey) => p is keyof o} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar gopd = require('gopd');\n\n/** @type {(obj: Record<PropertyKey, unknown>, property: PropertyKey, value: unknown, nonEnumerable?: boolean | null, nonWritable?: boolean | null, nonConfigurable?: boolean | null, loose?: boolean) => void} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $floor = GetIntrinsic('%Math.floor%');\n\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(fn, 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(fn, 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n", "'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\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 while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (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\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 /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (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 (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, 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, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\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 = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\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 || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\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 /* eslint operator-linebreak: [2, \"before\"] */\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 compactQueue(queue);\n\n return value;\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 || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar split = String.prototype.split;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n if (generateArrayPrefix === 'comma' && encodeValuesOnly) {\n var valuesArray = split.call(String(obj), ',');\n var valuesJoined = '';\n for (var i = 0; i < valuesArray.length; ++i) {\n valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format));\n }\n return [formatter(keyValue) + (commaRoundTrip && isArray(obj) && valuesArray.length === 1 ? '[]' : '') + '=' + valuesJoined];\n }\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\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 (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (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 (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('\u2713')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\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 var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\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, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n 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 (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else 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 if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\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 = options.depth > 0 && 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 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 (options.depth > 0 && (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, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\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, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\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", "/*!\n * body-parser\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n var opts = options || {}\n\n // notice because option default will flip in next major\n if (opts.extended === undefined) {\n deprecate('undefined extended: provide extended option')\n }\n\n var extended = opts.extended !== false\n var inflate = opts.inflate !== false\n var limit = typeof opts.limit !== 'number'\n ? bytes.parse(opts.limit || '100kb')\n : opts.limit\n var type = opts.type || 'application/x-www-form-urlencoded'\n var verify = opts.verify || false\n\n if (verify !== false && typeof verify !== 'function') {\n throw new TypeError('option verify must be function')\n }\n\n // create the appropriate query parser\n var queryparse = extended\n ? extendedparser(opts)\n : simpleparser(opts)\n\n // create the appropriate type checking function\n var shouldParse = typeof type !== 'function'\n ? typeChecker(type)\n : type\n\n function parse (body) {\n return body.length\n ? queryparse(body)\n : {}\n }\n\n return function urlencodedParser (req, res, next) {\n if (req._body) {\n debug('body already parsed')\n next()\n return\n }\n\n req.body = req.body || {}\n\n // skip requests without bodies\n if (!typeis.hasBody(req)) {\n debug('skip empty body')\n next()\n return\n }\n\n debug('content-type %j', req.headers['content-type'])\n\n // determine if request should be parsed\n if (!shouldParse(req)) {\n debug('skip parsing')\n next()\n return\n }\n\n // assert charset\n var charset = getCharset(req) || 'utf-8'\n if (charset !== 'utf-8') {\n debug('invalid charset')\n next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n charset: charset,\n type: 'charset.unsupported'\n }))\n return\n }\n\n // read\n read(req, res, next, parse, debug, {\n debug: debug,\n encoding: charset,\n inflate: inflate,\n limit: limit,\n verify: verify\n })\n }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var parse = parser('qs')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n var arrayLimit = Math.max(100, paramCount)\n\n debug('parse extended urlencoding')\n return parse(body, {\n allowPrototypes: true,\n arrayLimit: arrayLimit,\n depth: Infinity,\n parameterLimit: parameterLimit\n })\n }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n try {\n return (contentType.parse(req).parameters.charset || '').toLowerCase()\n } catch (e) {\n return undefined\n }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n var count = 0\n var index = 0\n\n while ((index = body.indexOf('&', index)) !== -1) {\n count++\n index++\n\n if (count === limit) {\n return undefined\n }\n }\n\n return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n var mod = parsers[name]\n\n if (mod !== undefined) {\n return mod.parse\n }\n\n // this uses a switch for static require analysis\n switch (name) {\n case 'qs':\n mod = require('qs')\n break\n case 'querystring':\n mod = require('querystring')\n break\n }\n\n // store to prevent invoking require()\n parsers[name] = mod\n\n return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n var parameterLimit = options.parameterLimit !== undefined\n ? options.parameterLimit\n : 1000\n var parse = parser('querystring')\n\n if (isNaN(parameterLimit) || parameterLimit < 1) {\n throw new TypeError('option parameterLimit must be a positive number')\n }\n\n if (isFinite(parameterLimit)) {\n parameterLimit = parameterLimit | 0\n }\n\n return function queryparse (body) {\n var paramCount = parameterCount(body, parameterLimit)\n\n if (paramCount === undefined) {\n debug('too many parameters')\n throw createError(413, 'too many parameters', {\n type: 'parameters.too.many'\n })\n }\n\n debug('parse urlencoding')\n return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n return function checkType (req) {\n return Boolean(typeis(req, type))\n }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n 'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n configurable: true,\n enumerable: true,\n get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n // use default type for parsers\n var opts = Object.create(options || null, {\n type: {\n configurable: true,\n enumerable: true,\n value: undefined,\n writable: true\n }\n })\n\n var _urlencoded = exports.urlencoded(opts)\n var _json = exports.json(opts)\n\n return function bodyParser (req, res, next) {\n _json(req, res, function (err) {\n if (err) return next(err)\n _urlencoded(req, res, next)\n })\n }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n return function get () {\n return loadParser(name)\n }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n var parser = parsers[parserName]\n\n if (parser !== undefined) {\n return parser\n }\n\n // this uses a switch for static require analysis\n switch (parserName) {\n case 'json':\n parser = require('./lib/types/json')\n break\n case 'raw':\n parser = require('./lib/types/raw')\n break\n case 'text':\n parser = require('./lib/types/text')\n break\n case 'urlencoded':\n parser = require('./lib/types/urlencoded')\n break\n }\n\n // store to prevent invoking require()\n return (parsers[parserName] = parser)\n}\n", "/*!\n * merge-descriptors\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 exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge(dest, src, redefine) {\n if (!dest) {\n throw new TypeError('argument dest is required')\n }\n\n if (!src) {\n throw new TypeError('argument src is required')\n }\n\n if (redefine === undefined) {\n // Default to true\n redefine = true\n }\n\n Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) {\n if (!redefine && hasOwnProperty.call(dest, name)) {\n // Skip desriptor\n return\n }\n\n // Copy descriptor\n var descriptor = Object.getOwnPropertyDescriptor(src, name)\n Object.defineProperty(dest, name, descriptor)\n })\n\n return dest\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '&quot;';\n break;\n case 38: // &\n escape = '&amp;';\n break;\n case 39: // '\n escape = '&#39;';\n break;\n case 60: // <\n escape = '&lt;';\n break;\n case 62: // >\n escape = '&gt;';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n", "/*!\n * finalhandler\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '<br>')\n .replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')\n\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>Error</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n req.socket.destroy()\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses.message[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n res.statusMessage = statuses.message[status]\n\n // remove any content headers\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Range')\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param {Array} array\n * @param {Array} result\n * @param {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (depth > 0 && Array.isArray(value)) {\n flattenWithDepth(value, result, depth - 1)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param {Array} array\n * @param {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n for (var i = 0; i < array.length; i++) {\n var value = array[i]\n\n if (Array.isArray(value)) {\n flattenForever(value, result)\n } else {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param {Array} array\n * @param {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n if (depth == null) {\n return flattenForever(array, [])\n }\n\n return flattenWithDepth(array, [], depth)\n}\n", "/**\n * Expose `pathtoRegexp`.\n */\n\nmodule.exports = pathtoRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\((?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param {String|RegExp|Array} path\n * @param {Array} keys\n * @param {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathtoRegexp(path, keys, options) {\n options = options || {};\n keys = keys || [];\n var strict = options.strict;\n var end = options.end !== false;\n var flags = options.sensitive ? '' : 'i';\n var extraOffset = 0;\n var keysOffset = keys.length;\n var i = 0;\n var name = 0;\n var m;\n\n if (path instanceof RegExp) {\n while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n keys.push({\n name: name++,\n optional: false,\n offset: m.index\n });\n }\n\n return path;\n }\n\n if (Array.isArray(path)) {\n // Map array parts into regexps and return their source. We also pass\n // the same keys and options instance into every generation to get\n // consistent matching groups before we join the sources together.\n path = path.map(function (value) {\n return pathtoRegexp(value, keys, options).source;\n });\n\n return new RegExp('(?:' + path.join('|') + ')', flags);\n }\n\n path = ('^' + path + (strict ? '' : path[path.length - 1] === '/' ? '?' : '/?'))\n .replace(/\\/\\(/g, '/(?:')\n .replace(/([\\/\\.])/g, '\\\\$1')\n .replace(/(\\\\\\/)?(\\\\\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?/g, function (match, slash, format, key, capture, star, optional, offset) {\n slash = slash || '';\n format = format || '';\n capture = capture || '([^\\\\/' + format + ']+?)';\n optional = optional || '';\n\n keys.push({\n name: key,\n optional: !!optional,\n offset: offset + extraOffset\n });\n\n var result = ''\n + (optional ? '' : slash)\n + '(?:'\n + format + (optional ? slash : '') + capture\n + (star ? '((?:[\\\\/' + format + '].+?)?)' : '')\n + ')'\n + optional;\n\n extraOffset += result.length - match.length;\n\n return result;\n })\n .replace(/\\*/g, function (star, index) {\n var len = keys.length\n\n while (len-- > keysOffset && keys[len].offset > index) {\n keys[len].offset += 3; // Replacement length minus asterisk length.\n }\n\n return '(.*)';\n });\n\n // This is a workaround for handling unnamed matching groups.\n while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n var escapeCount = 0;\n var index = m.index;\n\n while (path.charAt(--index) === '\\\\') {\n escapeCount++;\n }\n\n // It's possible to escape the bracket.\n if (escapeCount % 2 === 1) {\n continue;\n }\n\n if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n keys.splice(keysOffset + i, 0, {\n name: name++, // Unnamed matching groups must be consistently linear.\n optional: false,\n offset: m.index\n });\n }\n\n i++;\n }\n\n // If the path is non-ending, match until the end or a slash.\n path += (end ? '$' : (path[path.length - 1] === '/' ? '' : '(?=\\\\/|$)'));\n\n return new RegExp(path, flags);\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\n\nfunction Layer(path, options, fn) {\n if (!(this instanceof Layer)) {\n return new Layer(path, options, fn);\n }\n\n debug('new %o', path)\n var opts = options || {};\n\n this.handle = fn;\n this.name = fn.name || '<anonymous>';\n this.params = undefined;\n this.path = undefined;\n this.regexp = pathRegexp(path, this.keys = [], opts);\n\n // set fast path flags\n this.regexp.fast_star = path === '*'\n this.regexp.fast_slash = path === '/' && opts.end === false\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n var fn = this.handle;\n\n if (fn.length !== 4) {\n // not a standard error handler\n return next(error);\n }\n\n try {\n fn(error, req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n var fn = this.handle;\n\n if (fn.length > 3) {\n // not a standard request handler\n return next();\n }\n\n try {\n fn(req, res, next);\n } catch (err) {\n next(err);\n }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n var match\n\n if (path != null) {\n // fast path non-ending match for / (any path matches)\n if (this.regexp.fast_slash) {\n this.params = {}\n this.path = ''\n return true\n }\n\n // fast path for * (everything matched in a param)\n if (this.regexp.fast_star) {\n this.params = {'0': decode_param(path)}\n this.path = path\n return true\n }\n\n // match the path\n match = this.regexp.exec(path)\n }\n\n if (!match) {\n this.params = undefined;\n this.path = undefined;\n return false;\n }\n\n // store values\n this.params = {};\n this.path = match[0]\n\n var keys = this.keys;\n var params = this.params;\n\n for (var i = 1; i < match.length; i++) {\n var key = keys[i - 1];\n var prop = key.name;\n var val = decode_param(match[i])\n\n if (val !== undefined || !(hasOwnProperty.call(params, prop))) {\n params[prop] = val;\n }\n }\n\n return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n if (typeof val !== 'string' || val.length === 0) {\n return val;\n }\n\n try {\n return decodeURIComponent(val);\n } catch (err) {\n if (err instanceof URIError) {\n err.message = 'Failed to decode param \\'' + val + '\\'';\n err.status = err.statusCode = 400;\n }\n\n throw err;\n }\n}\n", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n return method.toLowerCase();\n });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n return [\n 'get',\n 'post',\n 'put',\n 'head',\n 'delete',\n 'options',\n 'trace',\n 'copy',\n 'lock',\n 'mkcol',\n 'move',\n 'purge',\n 'propfind',\n 'proppatch',\n 'unlock',\n 'report',\n 'mkactivity',\n 'checkout',\n 'merge',\n 'm-search',\n 'notify',\n 'subscribe',\n 'unsubscribe',\n 'patch',\n 'search',\n 'connect'\n ];\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n this.path = path;\n this.stack = [];\n\n debug('new %o', path)\n\n // route handlers for various http methods\n this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n if (this.methods._all) {\n return true;\n }\n\n var name = method.toLowerCase();\n\n if (name === 'head' && !this.methods['head']) {\n name = 'get';\n }\n\n return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n var methods = Object.keys(this.methods);\n\n // append automatic head\n if (this.methods.get && !this.methods.head) {\n methods.push('head');\n }\n\n for (var i = 0; i < methods.length; i++) {\n // make upper case\n methods[i] = methods[i].toUpperCase();\n }\n\n return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n var idx = 0;\n var stack = this.stack;\n var sync = 0\n\n if (stack.length === 0) {\n return done();\n }\n\n var method = req.method.toLowerCase();\n if (method === 'head' && !this.methods['head']) {\n method = 'get';\n }\n\n req.route = this;\n\n next();\n\n function next(err) {\n // signal to exit route\n if (err && err === 'route') {\n return done();\n }\n\n // signal to exit router\n if (err && err === 'router') {\n return done(err)\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n var layer = stack[idx++]\n\n // end of layers\n if (!layer) {\n return done(err)\n }\n\n if (layer.method && layer.method !== method) {\n next(err)\n } else if (err) {\n layer.handle_error(err, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n\n sync = 0\n }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n * function check_something(req, res, next){\n * next();\n * };\n *\n * function validate_user(req, res, next){\n * next();\n * };\n *\n * route\n * .all(validate_user)\n * .all(check_something)\n * .get(function(req, res, next){\n * res.send('hello world');\n * });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.all() requires a callback function but got a ' + type\n throw new TypeError(msg);\n }\n\n var layer = Layer('/', {}, handle);\n layer.method = undefined;\n\n this.methods._all = true;\n this.stack.push(layer);\n }\n\n return this;\n};\n\nmethods.forEach(function(method){\n Route.prototype[method] = function(){\n var handles = flatten(slice.call(arguments));\n\n for (var i = 0; i < handles.length; i++) {\n var handle = handles[i];\n\n if (typeof handle !== 'function') {\n var type = toString.call(handle);\n var msg = 'Route.' + method + '() requires a callback function but got a ' + type\n throw new Error(msg);\n }\n\n debug('%s %o', method, this.path)\n\n var layer = Layer('/', {}, handle);\n layer.method = method;\n\n this.methods[method] = true;\n this.stack.push(layer);\n }\n\n return this;\n };\n});\n", "/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is an callable function\n * @public\n */\n\nvar proto = module.exports = function(options) {\n var opts = options || {};\n\n function router(req, res, next) {\n router.handle(req, res, next);\n }\n\n // mixin Router class functions\n setPrototypeOf(router, proto)\n\n router.params = {};\n router._params = [];\n router.caseSensitive = opts.caseSensitive;\n router.mergeParams = opts.mergeParams;\n router.strict = opts.strict;\n router.stack = [];\n\n return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n * app.param('user_id', function(req, res, next, id){\n * User.find(id, function(err, user){\n * if (err) {\n * return next(err);\n * } else if (!user) {\n * return next(new Error('failed to load user'));\n * }\n * req.user = user;\n * next();\n * });\n * });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n // param logic\n if (typeof name === 'function') {\n deprecate('router.param(fn): Refactor to use path params');\n this._params.push(name);\n return;\n }\n\n // apply param functions\n var params = this._params;\n var len = params.length;\n var ret;\n\n if (name[0] === ':') {\n deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead')\n name = name.slice(1)\n }\n\n for (var i = 0; i < len; ++i) {\n if (ret = params[i](name, fn)) {\n fn = ret;\n }\n }\n\n // ensure we end up with a\n // middleware function\n if ('function' !== typeof fn) {\n throw new Error('invalid param() call for ' + name + ', got ' + fn);\n }\n\n (this.params[name] = this.params[name] || []).push(fn);\n return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var self = this;\n\n debug('dispatching %s %s', req.method, req.url);\n\n var idx = 0;\n var protohost = getProtohost(req.url) || ''\n var removed = '';\n var slashAdded = false;\n var sync = 0\n var paramcalled = {};\n\n // store options for OPTIONS request\n // only used if OPTIONS request\n var options = [];\n\n // middleware and routes\n var stack = self.stack;\n\n // manage inter-router variables\n var parentParams = req.params;\n var parentUrl = req.baseUrl || '';\n var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n // setup next layer\n req.next = next;\n\n // for options requests, respond with a default if nothing else responds\n if (req.method === 'OPTIONS') {\n done = wrap(done, function(old, err) {\n if (err || options.length === 0) return old(err);\n sendOptionsResponse(res, options, old);\n });\n }\n\n // setup basic req values\n req.baseUrl = parentUrl;\n req.originalUrl = req.originalUrl || req.url;\n\n next();\n\n function next(err) {\n var layerError = err === 'route'\n ? null\n : err;\n\n // remove added slash\n if (slashAdded) {\n req.url = req.url.slice(1)\n slashAdded = false;\n }\n\n // restore altered req.url\n if (removed.length !== 0) {\n req.baseUrl = parentUrl;\n req.url = protohost + removed + req.url.slice(protohost.length)\n removed = '';\n }\n\n // signal to exit router\n if (layerError === 'router') {\n setImmediate(done, null)\n return\n }\n\n // no more matching layers\n if (idx >= stack.length) {\n setImmediate(done, layerError);\n return;\n }\n\n // max sync stack\n if (++sync > 100) {\n return setImmediate(next, err)\n }\n\n // get pathname of request\n var path = getPathname(req);\n\n if (path == null) {\n return done(layerError);\n }\n\n // find next matching layer\n var layer;\n var match;\n var route;\n\n while (match !== true && idx < stack.length) {\n layer = stack[idx++];\n match = matchLayer(layer, path);\n route = layer.route;\n\n if (typeof match !== 'boolean') {\n // hold on to layerError\n layerError = layerError || match;\n }\n\n if (match !== true) {\n continue;\n }\n\n if (!route) {\n // process non-route handlers normally\n continue;\n }\n\n if (layerError) {\n // routes do not match with a pending error\n match = false;\n continue;\n }\n\n var method = req.method;\n var has_method = route._handles_method(method);\n\n // build up automatic options response\n if (!has_method && method === 'OPTIONS') {\n appendMethods(options, route._options());\n }\n\n // don't even bother matching route\n if (!has_method && method !== 'HEAD') {\n match = false;\n }\n }\n\n // no match\n if (match !== true) {\n return done(layerError);\n }\n\n // store route for dispatch on change\n if (route) {\n req.route = route;\n }\n\n // Capture one-time layer values\n req.params = self.mergeParams\n ? mergeParams(layer.params, parentParams)\n : layer.params;\n var layerPath = layer.path;\n\n // this should be done for the layer\n self.process_params(layer, paramcalled, req, res, function (err) {\n if (err) {\n next(layerError || err)\n } else if (route) {\n layer.handle_request(req, res, next)\n } else {\n trim_prefix(layer, layerError, layerPath, path)\n }\n\n sync = 0\n });\n }\n\n function trim_prefix(layer, layerError, layerPath, path) {\n if (layerPath.length !== 0) {\n // Validate path is a prefix match\n if (layerPath !== path.slice(0, layerPath.length)) {\n next(layerError)\n return\n }\n\n // Validate path breaks on a path separator\n var c = path[layerPath.length]\n if (c && c !== '/' && c !== '.') return next(layerError)\n\n // Trim off the part of the url that matches the route\n // middleware (.use stuff) needs to have the path stripped\n debug('trim prefix (%s) from url %s', layerPath, req.url);\n removed = layerPath;\n req.url = protohost + req.url.slice(protohost.length + removed.length)\n\n // Ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n\n // Setup base URL (no trailing slash)\n req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n ? removed.substring(0, removed.length - 1)\n : removed);\n }\n\n debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n\n if (layerError) {\n layer.handle_error(layerError, req, res, next);\n } else {\n layer.handle_request(req, res, next);\n }\n }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n var params = this.params;\n\n // captured parameters from the layer, keys and values\n var keys = layer.keys;\n\n // fast track\n if (!keys || keys.length === 0) {\n return done();\n }\n\n var i = 0;\n var name;\n var paramIndex = 0;\n var key;\n var paramVal;\n var paramCallbacks;\n var paramCalled;\n\n // process params in order\n // param callbacks can be async\n function param(err) {\n if (err) {\n return done(err);\n }\n\n if (i >= keys.length ) {\n return done();\n }\n\n paramIndex = 0;\n key = keys[i++];\n name = key.name;\n paramVal = req.params[name];\n paramCallbacks = params[name];\n paramCalled = called[name];\n\n if (paramVal === undefined || !paramCallbacks) {\n return param();\n }\n\n // param previously called with same value or error occurred\n if (paramCalled && (paramCalled.match === paramVal\n || (paramCalled.error && paramCalled.error !== 'route'))) {\n // restore value\n req.params[name] = paramCalled.value;\n\n // next param\n return param(paramCalled.error);\n }\n\n called[name] = paramCalled = {\n error: null,\n match: paramVal,\n value: paramVal\n };\n\n paramCallback();\n }\n\n // single param callbacks\n function paramCallback(err) {\n var fn = paramCallbacks[paramIndex++];\n\n // store updated value\n paramCalled.value = req.params[key.name];\n\n if (err) {\n // store error\n paramCalled.error = err;\n param(err);\n return;\n }\n\n if (!fn) return param();\n\n try {\n fn(req, res, paramCallback, paramVal, key.name);\n } catch (e) {\n paramCallback(e);\n }\n }\n\n param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate router.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var callbacks = flatten(slice.call(arguments, offset));\n\n if (callbacks.length === 0) {\n throw new TypeError('Router.use() requires a middleware function')\n }\n\n for (var i = 0; i < callbacks.length; i++) {\n var fn = callbacks[i];\n\n if (typeof fn !== 'function') {\n throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))\n }\n\n // add the middleware\n debug('use %o %s', path, fn.name || '<anonymous>')\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: false,\n end: false\n }, fn);\n\n layer.route = undefined;\n\n this.stack.push(layer);\n }\n\n return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n var route = new Route(path);\n\n var layer = new Layer(path, {\n sensitive: this.caseSensitive,\n strict: this.strict,\n end: true\n }, route.dispatch.bind(route));\n\n layer.route = route;\n\n this.stack.push(layer);\n return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function(method){\n proto[method] = function(path){\n var route = this.route(path)\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n for (var i = 0; i < addition.length; i++) {\n var method = addition[i];\n if (list.indexOf(method) === -1) {\n list.push(method);\n }\n }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n try {\n return parseUrl(req).pathname;\n } catch (err) {\n return undefined;\n }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n return undefined\n }\n\n var searchIndex = url.indexOf('?')\n var pathLength = searchIndex !== -1\n ? searchIndex\n : url.length\n var fqdnIndex = url.slice(0, pathLength).indexOf('://')\n\n return fqdnIndex !== -1\n ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined\n}\n\n// get type for error message\nfunction gettype(obj) {\n var type = typeof obj;\n\n if (type !== 'object') {\n return type;\n }\n\n // inspect [[Class]] for objects\n return toString.call(obj)\n .replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n try {\n return layer.match(path);\n } catch (err) {\n return err;\n }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n if (typeof parent !== 'object' || !parent) {\n return params;\n }\n\n // make copy of parent for base\n var obj = mixin({}, parent);\n\n // simple non-numeric merging\n if (!(0 in params) || !(0 in parent)) {\n return mixin(obj, params);\n }\n\n var i = 0;\n var o = 0;\n\n // determine numeric gaps\n while (i in params) {\n i++;\n }\n\n while (o in parent) {\n o++;\n }\n\n // offset numeric indices in params before merge\n for (i--; i >= 0; i--) {\n params[i + o] = params[i];\n\n // create holes for the merge when necessary\n if (i < o) {\n delete params[i];\n }\n }\n\n return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n var props = new Array(arguments.length - 2);\n var vals = new Array(arguments.length - 2);\n\n for (var i = 0; i < props.length; i++) {\n props[i] = arguments[i + 2];\n vals[i] = obj[props[i]];\n }\n\n return function () {\n // restore vals\n for (var i = 0; i < props.length; i++) {\n obj[props[i]] = vals[i];\n }\n\n return fn.apply(this, arguments);\n };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n try {\n var body = options.join(',');\n res.set('Allow', body);\n res.send(body);\n } catch (err) {\n next(err);\n }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n return function proxy() {\n var args = new Array(arguments.length + 1);\n\n args[0] = old;\n for (var i = 0, len = arguments.length; i < len; i++) {\n args[i + 1] = arguments[i];\n }\n\n fn.apply(this, args);\n };\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function(app){\n return function expressInit(req, res, next){\n if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n req.res = res;\n res.req = req;\n req.next = next;\n\n setPrototypeOf(req, app.request)\n setPrototypeOf(res, app.response)\n\n res.locals = res.locals || Object.create(null);\n\n next();\n };\n};\n\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar merge = require('utils-merge')\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n var opts = merge({}, options)\n var queryparse = qs.parse;\n\n if (typeof options === 'function') {\n queryparse = options;\n opts = undefined;\n }\n\n if (opts !== undefined && opts.allowPrototypes === undefined) {\n // back-compat for qs module\n opts.allowPrototypes = true;\n }\n\n return function query(req, res, next){\n if (!req.query) {\n var val = parseUrl(req).query;\n req.query = queryparse(val, opts);\n }\n\n next();\n };\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n * - `defaultEngine` the default template engine name\n * - `engines` template engine require() cache\n * - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n var opts = options || {};\n\n this.defaultEngine = opts.defaultEngine;\n this.ext = extname(name);\n this.name = name;\n this.root = opts.root;\n\n if (!this.ext && !this.defaultEngine) {\n throw new Error('No default engine was specified and no extension was provided.');\n }\n\n var fileName = name;\n\n if (!this.ext) {\n // get extension from default engine name\n this.ext = this.defaultEngine[0] !== '.'\n ? '.' + this.defaultEngine\n : this.defaultEngine;\n\n fileName += this.ext;\n }\n\n if (!opts.engines[this.ext]) {\n // load engine\n var mod = this.ext.slice(1)\n debug('require \"%s\"', mod)\n\n // default engine export\n var fn = require(mod).__express\n\n if (typeof fn !== 'function') {\n throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n }\n\n opts.engines[this.ext] = fn\n }\n\n // store loaded engine\n this.engine = opts.engines[this.ext];\n\n // lookup path\n this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n var path;\n var roots = [].concat(this.root);\n\n debug('lookup \"%s\"', name);\n\n for (var i = 0; i < roots.length && !path; i++) {\n var root = roots[i];\n\n // resolve the path\n var loc = resolve(root, name);\n var dir = dirname(loc);\n var file = basename(loc);\n\n // resolve the file\n path = this.resolve(dir, file);\n }\n\n return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n debug('render \"%s\"', this.path);\n this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n var ext = this.ext;\n\n // <path>.<ext>\n var path = join(dir, file);\n var stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n\n // <path>/index.<ext>\n path = join(dir, basename(file, ext), 'index' + ext);\n stat = tryStat(path);\n\n if (stat && stat.isFile()) {\n return path;\n }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n debug('stat \"%s\"', path);\n\n try {\n return fs.statSync(path);\n } catch (e) {\n return undefined;\n }\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * HT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = Buffer.from(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n return '%' + String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n", "/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n", "/*!\n * etag\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = etag\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar crypto = require('crypto')\nvar Stats = require('fs').Stats\n\n/**\n * Module variables.\n * @private\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Generate an entity tag.\n *\n * @param {Buffer|string} entity\n * @return {string}\n * @private\n */\n\nfunction entitytag (entity) {\n if (entity.length === 0) {\n // fast-path empty\n return '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n }\n\n // compute hash of entity\n var hash = crypto\n .createHash('sha1')\n .update(entity, 'utf8')\n .digest('base64')\n .substring(0, 27)\n\n // compute length of entity\n var len = typeof entity === 'string'\n ? Buffer.byteLength(entity, 'utf8')\n : entity.length\n\n return '\"' + len.toString(16) + '-' + hash + '\"'\n}\n\n/**\n * Create a simple ETag.\n *\n * @param {string|Buffer|Stats} entity\n * @param {object} [options]\n * @param {boolean} [options.weak]\n * @return {String}\n * @public\n */\n\nfunction etag (entity, options) {\n if (entity == null) {\n throw new TypeError('argument entity is required')\n }\n\n // support fs.Stats object\n var isStats = isstats(entity)\n var weak = options && typeof options.weak === 'boolean'\n ? options.weak\n : isStats\n\n // validate argument\n if (!isStats && typeof entity !== 'string' && !Buffer.isBuffer(entity)) {\n throw new TypeError('argument entity must be string, Buffer, or fs.Stats')\n }\n\n // generate entity tag\n var tag = isStats\n ? stattag(entity)\n : entitytag(entity)\n\n return weak\n ? 'W/' + tag\n : tag\n}\n\n/**\n * Determine if object is a Stats object.\n *\n * @param {object} obj\n * @return {boolean}\n * @api private\n */\n\nfunction isstats (obj) {\n // genuine fs.Stats\n if (typeof Stats === 'function' && obj instanceof Stats) {\n return true\n }\n\n // quack quack\n return obj && typeof obj === 'object' &&\n 'ctime' in obj && toString.call(obj.ctime) === '[object Date]' &&\n 'mtime' in obj && toString.call(obj.mtime) === '[object Date]' &&\n 'ino' in obj && typeof obj.ino === 'number' &&\n 'size' in obj && typeof obj.size === 'number'\n}\n\n/**\n * Generate a tag for a stat.\n *\n * @param {object} stat\n * @return {string}\n * @private\n */\n\nfunction stattag (stat) {\n var mtime = stat.mtime.getTime().toString(16)\n var size = stat.size.toString(16)\n\n return '\"' + size + '-' + mtime + '\"'\n}\n", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n", "var path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n // Map of extension -> mime type\n this.types = Object.create(null);\n\n // Map of mime type -> extension\n this.extensions = Object.create(null);\n}\n\n/**\n * Define mimetype -> extension mappings. Each key is a mime-type that maps\n * to an array of extensions associated with the type. The first extension is\n * used as the default extension for the type.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n *\n * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n for (var type in map) {\n var exts = map[type];\n for (var i = 0; i < exts.length; i++) {\n if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n this.types[exts[i]] + ' to ' + type);\n }\n\n this.types[exts[i]] = type;\n }\n\n // Default extension is the first one we encounter\n if (!this.extensions[type]) {\n this.extensions[type] = exts[0];\n }\n }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected). Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n this._loading = file;\n // Read file and split into lines\n var map = {},\n content = fs.readFileSync(file, 'ascii'),\n lines = content.split(/[\\r\\n]+/);\n\n lines.forEach(function(line) {\n // Clean up whitespace/comments, and split into fields\n var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n map[fields.shift()] = fields;\n });\n\n this.define(map);\n\n this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n lookup: function(mimeType, fallback) {\n // Assume text types are utf8\n return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n }\n};\n\nmodule.exports = mime;\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string')\n }\n\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n Stream.call(this)\n\n var opts = options || {}\n\n this.options = opts\n this.path = path\n this.req = req\n\n this._acceptRanges = opts.acceptRanges !== undefined\n ? Boolean(opts.acceptRanges)\n : true\n\n this._cacheControl = opts.cacheControl !== undefined\n ? Boolean(opts.cacheControl)\n : true\n\n this._etag = opts.etag !== undefined\n ? Boolean(opts.etag)\n : true\n\n this._dotfiles = opts.dotfiles !== undefined\n ? opts.dotfiles\n : 'ignore'\n\n if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n }\n\n this._hidden = Boolean(opts.hidden)\n\n if (opts.hidden !== undefined) {\n deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n }\n\n // legacy support\n if (opts.dotfiles === undefined) {\n this._dotfiles = undefined\n }\n\n this._extensions = opts.extensions !== undefined\n ? normalizeList(opts.extensions, 'extensions option')\n : []\n\n this._immutable = opts.immutable !== undefined\n ? Boolean(opts.immutable)\n : false\n\n this._index = opts.index !== undefined\n ? normalizeList(opts.index, 'index option')\n : ['index.html']\n\n this._lastModified = opts.lastModified !== undefined\n ? Boolean(opts.lastModified)\n : true\n\n this._maxage = opts.maxAge || opts.maxage\n this._maxage = typeof this._maxage === 'string'\n ? ms(this._maxage)\n : Number(this._maxage)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n\n this._root = opts.root\n ? resolve(opts.root)\n : null\n\n if (!this._root && opts.from) {\n this.from(opts.from)\n }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n this._etag = Boolean(val)\n debug('etag %s', this._etag)\n return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n this._hidden = Boolean(val)\n this._dotfiles = undefined\n debug('hidden %s', this._hidden)\n return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n var index = !paths ? [] : normalizeList(paths, 'paths argument')\n debug('index %o', paths)\n this._index = index\n return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n this._root = resolve(String(path))\n debug('root %s', this._root)\n return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n 'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n 'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n this._maxage = typeof maxAge === 'string'\n ? ms(maxAge)\n : Number(maxAge)\n this._maxage = !isNaN(this._maxage)\n ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n : 0\n debug('max-age %d', this._maxage)\n return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n // emit if listeners instead of responding\n if (hasListeners(this, 'error')) {\n return this.emit('error', createHttpError(status, err))\n }\n\n var res = this.res\n var msg = statuses.message[status] || String(status)\n var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n // clear existing headers\n clearHeaders(res)\n\n // add error headers\n if (err && err.headers) {\n setHeaders(res, err.headers)\n }\n\n // send basic response\n res.statusCode = status\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n return this.req.headers['if-match'] ||\n this.req.headers['if-unmodified-since'] ||\n this.req.headers['if-none-match'] ||\n this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n var req = this.req\n var res = this.res\n\n // if-match\n var match = req.headers['if-match']\n if (match) {\n var etag = res.getHeader('ETag')\n return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n }))\n }\n\n // if-unmodified-since\n var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n if (!isNaN(unmodifiedSince)) {\n var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n return isNaN(lastModified) || lastModified > unmodifiedSince\n }\n\n return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n var res = this.res\n\n res.removeHeader('Content-Encoding')\n res.removeHeader('Content-Language')\n res.removeHeader('Content-Length')\n res.removeHeader('Content-Range')\n res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n var res = this.res\n debug('not modified')\n this.removeContentHeaderFields()\n res.statusCode = 304\n res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n var err = new Error('Can\\'t set headers after they are sent.')\n debug('headers already sent')\n this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n var statusCode = this.res.statusCode\n return (statusCode >= 200 && statusCode < 300) ||\n statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n switch (error.code) {\n case 'ENAMETOOLONG':\n case 'ENOENT':\n case 'ENOTDIR':\n this.error(404, error)\n break\n default:\n this.error(500, error)\n break\n }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n return fresh(this.req.headers, {\n etag: this.res.getHeader('ETag'),\n 'last-modified': this.res.getHeader('Last-Modified')\n })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n var ifRange = this.req.headers['if-range']\n\n if (!ifRange) {\n return true\n }\n\n // if-range as etag\n if (ifRange.indexOf('\"') !== -1) {\n var etag = this.res.getHeader('ETag')\n return Boolean(etag && ifRange.indexOf(etag) !== -1)\n }\n\n // if-range as modified date\n var lastModified = this.res.getHeader('Last-Modified')\n return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n var res = this.res\n\n if (hasListeners(this, 'directory')) {\n this.emit('directory', res, path)\n return\n }\n\n if (this.hasTrailingSlash()) {\n this.error(403)\n return\n }\n\n var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n escapeHtml(loc) + '</a>')\n\n // redirect\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n // root path\n var root = this._root\n\n // references\n this.res = res\n\n // decode the path\n var path = decode(this.path)\n if (path === -1) {\n this.error(400)\n return res\n }\n\n // null byte(s)\n if (~path.indexOf('\\0')) {\n this.error(400)\n return res\n }\n\n var parts\n if (root !== null) {\n // normalize\n if (path) {\n path = normalize('.' + sep + path)\n }\n\n // malicious path\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = path.split(sep)\n\n // join / normalize from optional root dir\n path = normalize(join(root, path))\n } else {\n // \"..\" is malicious without \"root\"\n if (UP_PATH_REGEXP.test(path)) {\n debug('malicious path \"%s\"', path)\n this.error(403)\n return res\n }\n\n // explode path parts\n parts = normalize(path).split(sep)\n\n // resolve the path\n path = resolve(path)\n }\n\n // dotfile handling\n if (containsDotFile(parts)) {\n var access = this._dotfiles\n\n // legacy support\n if (access === undefined) {\n access = parts[parts.length - 1][0] === '.'\n ? (this._hidden ? 'allow' : 'ignore')\n : 'allow'\n }\n\n debug('%s dotfile \"%s\"', access, path)\n switch (access) {\n case 'allow':\n break\n case 'deny':\n this.error(403)\n return res\n case 'ignore':\n default:\n this.error(404)\n return res\n }\n }\n\n // index file support\n if (this._index.length && this.hasTrailingSlash()) {\n this.sendIndex(path)\n return res\n }\n\n this.sendFile(path)\n return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n var len = stat.size\n var options = this.options\n var opts = {}\n var res = this.res\n var req = this.req\n var ranges = req.headers.range\n var offset = options.start || 0\n\n if (headersSent(res)) {\n // impossible to send now\n this.headersAlreadySent()\n return\n }\n\n debug('pipe \"%s\"', path)\n\n // set header fields\n this.setHeader(path, stat)\n\n // set content-type\n this.type(path)\n\n // conditional GET support\n if (this.isConditionalGET()) {\n if (this.isPreconditionFailure()) {\n this.error(412)\n return\n }\n\n if (this.isCachable() && this.isFresh()) {\n this.notModified()\n return\n }\n }\n\n // adjust len to start/end options\n len = Math.max(0, len - offset)\n if (options.end !== undefined) {\n var bytes = options.end - offset + 1\n if (len > bytes) len = bytes\n }\n\n // Range support\n if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n // parse\n ranges = parseRange(len, ranges, {\n combine: true\n })\n\n // If-Range support\n if (!this.isRangeFresh()) {\n debug('range stale')\n ranges = -2\n }\n\n // unsatisfiable\n if (ranges === -1) {\n debug('range unsatisfiable')\n\n // Content-Range\n res.setHeader('Content-Range', contentRange('bytes', len))\n\n // 416 Requested Range Not Satisfiable\n return this.error(416, {\n headers: { 'Content-Range': res.getHeader('Content-Range') }\n })\n }\n\n // valid (syntactically invalid/multiple ranges are treated as a regular response)\n if (ranges !== -2 && ranges.length === 1) {\n debug('range %j', ranges)\n\n // Content-Range\n res.statusCode = 206\n res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n // adjust for requested range\n offset += ranges[0].start\n len = ranges[0].end - ranges[0].start + 1\n }\n }\n\n // clone options\n for (var prop in options) {\n opts[prop] = options[prop]\n }\n\n // set read options\n opts.start = offset\n opts.end = Math.max(offset, offset + len - 1)\n\n // content-length\n res.setHeader('Content-Length', len)\n\n // HEAD support\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n var i = 0\n var self = this\n\n debug('stat \"%s\"', path)\n fs.stat(path, function onstat (err, stat) {\n if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n // not found, check extensions\n return next(err)\n }\n if (err) return self.onStatError(err)\n if (stat.isDirectory()) return self.redirect(path)\n self.emit('file', path, stat)\n self.send(path, stat)\n })\n\n function next (err) {\n if (self._extensions.length <= i) {\n return err\n ? self.onStatError(err)\n : self.error(404)\n }\n\n var p = path + '.' + self._extensions[i++]\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n var i = -1\n var self = this\n\n function next (err) {\n if (++i >= self._index.length) {\n if (err) return self.onStatError(err)\n return self.error(404)\n }\n\n var p = join(path, self._index[i])\n\n debug('stat \"%s\"', p)\n fs.stat(p, function (err, stat) {\n if (err) return next(err)\n if (stat.isDirectory()) return next()\n self.emit('file', p, stat)\n self.send(p, stat)\n })\n }\n\n next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n var self = this\n var res = this.res\n\n // pipe\n var stream = fs.createReadStream(path, options)\n this.emit('stream', stream)\n stream.pipe(res)\n\n // cleanup\n function cleanup () {\n destroy(stream, true)\n }\n\n // response finished, cleanup\n onFinished(res, cleanup)\n\n // error handling\n stream.on('error', function onerror (err) {\n // clean up stream early\n cleanup()\n\n // error\n self.onStatError(err)\n })\n\n // end\n stream.on('end', function onend () {\n self.emit('end')\n })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n var res = this.res\n\n if (res.getHeader('Content-Type')) return\n\n var type = mime.lookup(path)\n\n if (!type) {\n debug('no content-type')\n return\n }\n\n var charset = mime.charsets.lookup(type)\n\n debug('content-type %s', type)\n res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n var res = this.res\n\n this.emit('headers', res, path, stat)\n\n if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n debug('accept ranges')\n res.setHeader('Accept-Ranges', 'bytes')\n }\n\n if (this._cacheControl && !res.getHeader('Cache-Control')) {\n var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n if (this._immutable) {\n cacheControl += ', immutable'\n }\n\n debug('cache-control %s', cacheControl)\n res.setHeader('Cache-Control', cacheControl)\n }\n\n if (this._lastModified && !res.getHeader('Last-Modified')) {\n var modified = stat.mtime.toUTCString()\n debug('modified %s', modified)\n res.setHeader('Last-Modified', modified)\n }\n\n if (this._etag && !res.getHeader('ETag')) {\n var val = etag(stat)\n debug('etag %s', val)\n res.setHeader('ETag', val)\n }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n var headers = getHeaderNames(res)\n\n for (var i = 0; i < headers.length; i++) {\n res.removeHeader(headers[i])\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str[i] !== '/') {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n for (var i = 0; i < parts.length; i++) {\n var part = parts[i]\n if (part.length > 1 && part[0] === '.') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>' + title + '</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n if (!err) {\n return createError(status)\n }\n\n return err instanceof Error\n ? createError(status, err, { expose: false })\n : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n try {\n return decodeURIComponent(path)\n } catch (err) {\n return -1\n }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n return typeof res.getHeaderNames !== 'function'\n ? Object.keys(res._headers || {})\n : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n var count = typeof emitter.listenerCount !== 'function'\n ? emitter.listeners(type).length\n : emitter.listenerCount(type)\n\n return count > 0\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n var list = [].concat(val || [])\n\n for (var i = 0; i < list.length; i++) {\n if (typeof list[i] !== 'string') {\n throw new TypeError(name + ' must be array of strings or false')\n }\n }\n\n return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n if (start !== end) {\n list.push(str.substring(start, end))\n }\n\n return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n var keys = Object.keys(headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n if (!req) {\n throw new TypeError('argument req is required')\n }\n\n // simple header parsing\n var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n var socketAddr = getSocketAddr(req)\n var addrs = [socketAddr].concat(proxyAddrs)\n\n // return all addresses\n return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n return req.socket\n ? req.socket.remoteAddress\n : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n var end = header.length\n var list = []\n var start = header.length\n\n // gather addresses, backwards\n for (var i = header.length - 1; i >= 0; i--) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i\n }\n break\n case 0x2c: /* , */\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n start = end = i\n break\n default:\n start = i\n break\n }\n }\n\n // final address\n if (start !== end) {\n list.push(header.substring(start, end))\n }\n\n return list\n}\n", "(function() {\n var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n ipaddr = {};\n\n root = this;\n\n if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n module.exports = ipaddr;\n } else {\n root['ipaddr'] = ipaddr;\n }\n\n matchCIDR = function(first, second, partSize, cidrBits) {\n var part, shift;\n if (first.length !== second.length) {\n throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n }\n part = 0;\n while (cidrBits > 0) {\n shift = partSize - cidrBits;\n if (shift < 0) {\n shift = 0;\n }\n if (first[part] >> shift !== second[part] >> shift) {\n return false;\n }\n cidrBits -= partSize;\n part += 1;\n }\n return true;\n };\n\n ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n var k, len, rangeName, rangeSubnets, subnet;\n if (defaultName == null) {\n defaultName = 'unicast';\n }\n for (rangeName in rangeList) {\n rangeSubnets = rangeList[rangeName];\n if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n rangeSubnets = [rangeSubnets];\n }\n for (k = 0, len = rangeSubnets.length; k < len; k++) {\n subnet = rangeSubnets[k];\n if (address.kind() === subnet[0].kind()) {\n if (address.match.apply(address, subnet)) {\n return rangeName;\n }\n }\n }\n }\n return defaultName;\n };\n\n ipaddr.IPv4 = (function() {\n function IPv4(octets) {\n var k, len, octet;\n if (octets.length !== 4) {\n throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n }\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n }\n }\n this.octets = octets;\n }\n\n IPv4.prototype.kind = function() {\n return 'ipv4';\n };\n\n IPv4.prototype.toString = function() {\n return this.octets.join(\".\");\n };\n\n IPv4.prototype.toNormalizedString = function() {\n return this.toString();\n };\n\n IPv4.prototype.toByteArray = function() {\n return this.octets.slice(0);\n };\n\n IPv4.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv4') {\n throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n }\n return matchCIDR(this.octets, other.octets, 8, cidrRange);\n };\n\n IPv4.prototype.SpecialRanges = {\n unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n };\n\n IPv4.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv4.prototype.toIPv4MappedAddress = function() {\n return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n };\n\n IPv4.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, octet, stop, zeros, zerotable;\n zerotable = {\n 0: 8,\n 128: 7,\n 192: 6,\n 224: 5,\n 240: 4,\n 248: 3,\n 252: 2,\n 254: 1,\n 255: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 3; k >= 0; i = k += -1) {\n octet = this.octets[i];\n if (octet in zerotable) {\n zeros = zerotable[octet];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 8) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 32 - cidr;\n };\n\n return IPv4;\n\n })();\n\n ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n ipv4Regexes = {\n fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n };\n\n ipaddr.IPv4.parser = function(string) {\n var match, parseIntAuto, part, shift, value;\n parseIntAuto = function(string) {\n if (string[0] === \"0\" && string[1] !== \"x\") {\n return parseInt(string, 8);\n } else {\n return parseInt(string);\n }\n };\n if (match = string.match(ipv4Regexes.fourOctet)) {\n return (function() {\n var k, len, ref, results;\n ref = match.slice(1, 6);\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseIntAuto(part));\n }\n return results;\n })();\n } else if (match = string.match(ipv4Regexes.longValue)) {\n value = parseIntAuto(match[1]);\n if (value > 0xffffffff || value < 0) {\n throw new Error(\"ipaddr: address outside defined range\");\n }\n return ((function() {\n var k, results;\n results = [];\n for (shift = k = 0; k <= 24; shift = k += 8) {\n results.push((value >> shift) & 0xff);\n }\n return results;\n })()).reverse();\n } else {\n return null;\n }\n };\n\n ipaddr.IPv6 = (function() {\n function IPv6(parts, zoneId) {\n var i, k, l, len, part, ref;\n if (parts.length === 16) {\n this.parts = [];\n for (i = k = 0; k <= 14; i = k += 2) {\n this.parts.push((parts[i] << 8) | parts[i + 1]);\n }\n } else if (parts.length === 8) {\n this.parts = parts;\n } else {\n throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n }\n ref = this.parts;\n for (l = 0, len = ref.length; l < len; l++) {\n part = ref[l];\n if (!((0 <= part && part <= 0xffff))) {\n throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n }\n }\n if (zoneId) {\n this.zoneId = zoneId;\n }\n }\n\n IPv6.prototype.kind = function() {\n return 'ipv6';\n };\n\n IPv6.prototype.toString = function() {\n return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n };\n\n IPv6.prototype.toRFC5952String = function() {\n var bestMatchIndex, bestMatchLength, match, regex, string;\n regex = /((^|:)(0(:|$)){2,})/g;\n string = this.toNormalizedString();\n bestMatchIndex = 0;\n bestMatchLength = -1;\n while ((match = regex.exec(string))) {\n if (match[0].length > bestMatchLength) {\n bestMatchIndex = match.index;\n bestMatchLength = match[0].length;\n }\n }\n if (bestMatchLength < 0) {\n return string;\n }\n return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n };\n\n IPv6.prototype.toByteArray = function() {\n var bytes, k, len, part, ref;\n bytes = [];\n ref = this.parts;\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n bytes.push(part >> 8);\n bytes.push(part & 0xff);\n }\n return bytes;\n };\n\n IPv6.prototype.toNormalizedString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.toFixedLengthString = function() {\n var addr, part, suffix;\n addr = ((function() {\n var k, len, ref, results;\n ref = this.parts;\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(part.toString(16).padStart(4, '0'));\n }\n return results;\n }).call(this)).join(\":\");\n suffix = '';\n if (this.zoneId) {\n suffix = '%' + this.zoneId;\n }\n return addr + suffix;\n };\n\n IPv6.prototype.match = function(other, cidrRange) {\n var ref;\n if (cidrRange === void 0) {\n ref = other, other = ref[0], cidrRange = ref[1];\n }\n if (other.kind() !== 'ipv6') {\n throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n }\n return matchCIDR(this.parts, other.parts, 16, cidrRange);\n };\n\n IPv6.prototype.SpecialRanges = {\n unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n };\n\n IPv6.prototype.range = function() {\n return ipaddr.subnetMatch(this, this.SpecialRanges);\n };\n\n IPv6.prototype.isIPv4MappedAddress = function() {\n return this.range() === 'ipv4Mapped';\n };\n\n IPv6.prototype.toIPv4Address = function() {\n var high, low, ref;\n if (!this.isIPv4MappedAddress()) {\n throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n }\n ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n };\n\n IPv6.prototype.prefixLengthFromSubnetMask = function() {\n var cidr, i, k, part, stop, zeros, zerotable;\n zerotable = {\n 0: 16,\n 32768: 15,\n 49152: 14,\n 57344: 13,\n 61440: 12,\n 63488: 11,\n 64512: 10,\n 65024: 9,\n 65280: 8,\n 65408: 7,\n 65472: 6,\n 65504: 5,\n 65520: 4,\n 65528: 3,\n 65532: 2,\n 65534: 1,\n 65535: 0\n };\n cidr = 0;\n stop = false;\n for (i = k = 7; k >= 0; i = k += -1) {\n part = this.parts[i];\n if (part in zerotable) {\n zeros = zerotable[part];\n if (stop && zeros !== 0) {\n return null;\n }\n if (zeros !== 16) {\n stop = true;\n }\n cidr += zeros;\n } else {\n return null;\n }\n }\n return 128 - cidr;\n };\n\n return IPv6;\n\n })();\n\n ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n zoneIndex = \"%[0-9a-z]{1,}\";\n\n ipv6Regexes = {\n zoneIndex: new RegExp(zoneIndex, 'i'),\n \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n };\n\n expandIPv6 = function(string, parts) {\n var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n if (string.indexOf('::') !== string.lastIndexOf('::')) {\n return null;\n }\n zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n if (zoneId) {\n zoneId = zoneId.substring(1);\n string = string.replace(/%.+$/, '');\n }\n colonCount = 0;\n lastColon = -1;\n while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n colonCount++;\n }\n if (string.substr(0, 2) === '::') {\n colonCount--;\n }\n if (string.substr(-2, 2) === '::') {\n colonCount--;\n }\n if (colonCount > parts) {\n return null;\n }\n replacementCount = parts - colonCount;\n replacement = ':';\n while (replacementCount--) {\n replacement += '0:';\n }\n string = string.replace('::', replacement);\n if (string[0] === ':') {\n string = string.slice(1);\n }\n if (string[string.length - 1] === ':') {\n string = string.slice(0, -1);\n }\n parts = (function() {\n var k, len, ref, results;\n ref = string.split(\":\");\n results = [];\n for (k = 0, len = ref.length; k < len; k++) {\n part = ref[k];\n results.push(parseInt(part, 16));\n }\n return results;\n })();\n return {\n parts: parts,\n zoneId: zoneId\n };\n };\n\n ipaddr.IPv6.parser = function(string) {\n var addr, k, len, match, octet, octets, zoneId;\n if (ipv6Regexes['native'].test(string)) {\n return expandIPv6(string, 8);\n } else if (match = string.match(ipv6Regexes['transitional'])) {\n zoneId = match[6] || '';\n addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n if (addr.parts) {\n octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n for (k = 0, len = octets.length; k < len; k++) {\n octet = octets[k];\n if (!((0 <= octet && octet <= 255))) {\n return null;\n }\n }\n addr.parts.push(octets[0] << 8 | octets[1]);\n addr.parts.push(octets[2] << 8 | octets[3]);\n return {\n parts: addr.parts,\n zoneId: addr.zoneId\n };\n }\n }\n return null;\n };\n\n ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n return this.parser(string) !== null;\n };\n\n ipaddr.IPv4.isValid = function(string) {\n var e;\n try {\n new this(this.parser(string));\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n return true;\n } else {\n return false;\n }\n };\n\n ipaddr.IPv6.isValid = function(string) {\n var addr, e;\n if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n return false;\n }\n try {\n addr = this.parser(string);\n new this(addr.parts, addr.zoneId);\n return true;\n } catch (error1) {\n e = error1;\n return false;\n }\n };\n\n ipaddr.IPv4.parse = function(string) {\n var parts;\n parts = this.parser(string);\n if (parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(parts);\n };\n\n ipaddr.IPv6.parse = function(string) {\n var addr;\n addr = this.parser(string);\n if (addr.parts === null) {\n throw new Error(\"ipaddr: string is not formatted like ip address\");\n }\n return new this(addr.parts, addr.zoneId);\n };\n\n ipaddr.IPv4.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 32) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n };\n\n ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n var filledOctetCount, j, octets;\n prefix = parseInt(prefix);\n if (prefix < 0 || prefix > 32) {\n throw new Error('ipaddr: invalid IPv4 prefix length');\n }\n octets = [0, 0, 0, 0];\n j = 0;\n filledOctetCount = Math.floor(prefix / 8);\n while (j < filledOctetCount) {\n octets[j] = 255;\n j++;\n }\n if (filledOctetCount < 4) {\n octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n }\n return new this(octets);\n };\n\n ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n try {\n cidr = this.parseCIDR(string);\n ipInterfaceOctets = cidr[0].toByteArray();\n subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n octets = [];\n i = 0;\n while (i < 4) {\n octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n i++;\n }\n return new this(octets);\n } catch (error1) {\n error = error1;\n throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n }\n };\n\n ipaddr.IPv6.parseCIDR = function(string) {\n var maskLength, match, parsed;\n if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n maskLength = parseInt(match[2]);\n if (maskLength >= 0 && maskLength <= 128) {\n parsed = [this.parse(match[1]), maskLength];\n Object.defineProperty(parsed, 'toString', {\n value: function() {\n return this.join('/');\n }\n });\n return parsed;\n }\n }\n throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n };\n\n ipaddr.isValid = function(string) {\n return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n };\n\n ipaddr.parse = function(string) {\n if (ipaddr.IPv6.isValid(string)) {\n return ipaddr.IPv6.parse(string);\n } else if (ipaddr.IPv4.isValid(string)) {\n return ipaddr.IPv4.parse(string);\n } else {\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n }\n };\n\n ipaddr.parseCIDR = function(string) {\n var e;\n try {\n return ipaddr.IPv6.parseCIDR(string);\n } catch (error1) {\n e = error1;\n try {\n return ipaddr.IPv4.parseCIDR(string);\n } catch (error1) {\n e = error1;\n throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n }\n }\n };\n\n ipaddr.fromByteArray = function(bytes) {\n var length;\n length = bytes.length;\n if (length === 4) {\n return new ipaddr.IPv4(bytes);\n } else if (length === 16) {\n return new ipaddr.IPv6(bytes);\n } else {\n throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n }\n };\n\n ipaddr.process = function(string) {\n var addr;\n addr = this.parse(string);\n if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n return addr.toIPv4Address();\n } else {\n return addr;\n }\n };\n\n}).call(this);\n", "/*!\n * proxy-addr\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n linklocal: ['169.254.0.0/16', 'fe80::/10'],\n loopback: ['127.0.0.1/8', '::1/128'],\n uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n // get addresses\n var addrs = forwarded(req)\n\n if (!trust) {\n // Return all addresses\n return addrs\n }\n\n if (typeof trust !== 'function') {\n trust = compile(trust)\n }\n\n for (var i = 0; i < addrs.length - 1; i++) {\n if (trust(addrs[i], i)) continue\n\n addrs.length = i + 1\n }\n\n return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n if (!val) {\n throw new TypeError('argument is required')\n }\n\n var trust\n\n if (typeof val === 'string') {\n trust = [val]\n } else if (Array.isArray(val)) {\n trust = val.slice()\n } else {\n throw new TypeError('unsupported trust argument')\n }\n\n for (var i = 0; i < trust.length; i++) {\n val = trust[i]\n\n if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n continue\n }\n\n // Splice in pre-defined range\n val = IP_RANGES[val]\n trust.splice.apply(trust, [i, 1].concat(val))\n i += val.length - 1\n }\n\n return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n var rangeSubnets = new Array(arr.length)\n\n for (var i = 0; i < arr.length; i++) {\n rangeSubnets[i] = parseipNotation(arr[i])\n }\n\n return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n // Return optimized function based on length\n var len = rangeSubnets.length\n return len === 0\n ? trustNone\n : len === 1\n ? trustSingle(rangeSubnets[0])\n : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n var pos = note.lastIndexOf('/')\n var str = pos !== -1\n ? note.substring(0, pos)\n : note\n\n if (!isip(str)) {\n throw new TypeError('invalid IP address: ' + str)\n }\n\n var ip = parseip(str)\n\n if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n // Store as IPv4\n ip = ip.toIPv4Address()\n }\n\n var max = ip.kind() === 'ipv6'\n ? 128\n : 32\n\n var range = pos !== -1\n ? note.substring(pos + 1, note.length)\n : null\n\n if (range === null) {\n range = max\n } else if (DIGIT_REGEXP.test(range)) {\n range = parseInt(range, 10)\n } else if (ip.kind() === 'ipv4' && isip(range)) {\n range = parseNetmask(range)\n } else {\n range = null\n }\n\n if (range <= 0 || range > max) {\n throw new TypeError('invalid range on address: ' + note)\n }\n\n return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n var ip = parseip(netmask)\n var kind = ip.kind()\n\n return kind === 'ipv4'\n ? ip.prefixLengthFromSubnetMask()\n : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n if (!req) {\n throw new TypeError('req argument is required')\n }\n\n if (!trust) {\n throw new TypeError('trust argument is required')\n }\n\n var addrs = alladdrs(req, trust)\n var addr = addrs[addrs.length - 1]\n\n return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var ipconv\n var kind = ip.kind()\n\n for (var i = 0; i < subnets.length; i++) {\n var subnet = subnets[i]\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetrange = subnet[1]\n var trusted = ip\n\n if (kind !== subnetkind) {\n if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n continue\n }\n\n if (!ipconv) {\n // Convert IP to match subnet IP kind\n ipconv = subnetkind === 'ipv4'\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n trusted = ipconv\n }\n\n if (trusted.match(subnetip, subnetrange)) {\n return true\n }\n }\n\n return false\n }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n var subnetip = subnet[0]\n var subnetkind = subnetip.kind()\n var subnetisipv4 = subnetkind === 'ipv4'\n var subnetrange = subnet[1]\n\n return function trust (addr) {\n if (!isip(addr)) return false\n\n var ip = parseip(addr)\n var kind = ip.kind()\n\n if (kind !== subnetkind) {\n if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n // Incompatible IP addresses\n return false\n }\n\n // Convert IP to match subnet IP kind\n ip = subnetisipv4\n ? ip.toIPv4Address()\n : ip.toIPv4MappedAddress()\n }\n\n return ip.match(subnetip, subnetrange)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n if ('/' === path[0]) return true;\n if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten,\n 'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n return ~type.indexOf('/')\n ? acceptParams(type)\n : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n var ret = [];\n\n for (var i = 0; i < types.length; ++i) {\n ret.push(exports.normalizeType(types[i]));\n }\n\n return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition,\n 'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n * also includes `.originalIndex` for stable sorting\n *\n * @param {String} str\n * @param {Number} index\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams(str, index) {\n var parts = str.split(/ *; */);\n var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index };\n\n for (var i = 1; i < parts.length; ++i) {\n var pms = parts[i].split(/ *= */);\n if ('q' === pms[0]) {\n ret.quality = parseFloat(pms[1]);\n } else {\n ret.params[pms[0]] = pms[1];\n }\n }\n\n return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'weak':\n fn = exports.wetag;\n break;\n case false:\n break;\n case 'strong':\n fn = exports.etag;\n break;\n default:\n throw new TypeError('unknown value for etag function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n var fn;\n\n if (typeof val === 'function') {\n return val;\n }\n\n switch (val) {\n case true:\n case 'simple':\n fn = querystring.parse;\n break;\n case false:\n fn = newObject;\n break;\n case 'extended':\n fn = parseExtendedQueryString;\n break;\n default:\n throw new TypeError('unknown value for query parser function: ' + val);\n }\n\n return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n if (typeof val === 'function') return val;\n\n if (val === true) {\n // Support plain true/false\n return function(){ return true };\n }\n\n if (typeof val === 'number') {\n // Support trusting hop count\n return function(a, i){ return i < val };\n }\n\n if (typeof val === 'string') {\n // Support comma-separated values\n val = val.split(',')\n .map(function (v) { return v.trim() })\n }\n\n return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n if (!type || !charset) {\n return type;\n }\n\n // parse type\n var parsed = contentType.parse(type);\n\n // set charset\n parsed.parameters.charset = charset;\n\n // format type\n return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n return function generateETag (body, encoding) {\n var buf = !Buffer.isBuffer(body)\n ? Buffer.from(body, encoding)\n : body\n\n return etag(buf, options)\n }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n return qs.parse(str, {\n allowPrototypes: true\n });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n return {};\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n * - setup default configuration\n * - setup default middleware\n * - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n this.cache = {};\n this.engines = {};\n this.settings = {};\n\n this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n var env = process.env.NODE_ENV || 'development';\n\n // default settings\n this.enable('x-powered-by');\n this.set('etag', 'weak');\n this.set('env', env);\n this.set('query parser', 'extended');\n this.set('subdomain offset', 2);\n this.set('trust proxy', false);\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: true\n });\n\n debug('booting in %s mode', env);\n\n this.on('mount', function onmount(parent) {\n // inherit trust proxy\n if (this.settings[trustProxyDefaultSymbol] === true\n && typeof parent.settings['trust proxy fn'] === 'function') {\n delete this.settings['trust proxy'];\n delete this.settings['trust proxy fn'];\n }\n\n // inherit protos\n setPrototypeOf(this.request, parent.request)\n setPrototypeOf(this.response, parent.response)\n setPrototypeOf(this.engines, parent.engines)\n setPrototypeOf(this.settings, parent.settings)\n });\n\n // setup locals\n this.locals = Object.create(null);\n\n // top-most app is mounted at /\n this.mountpath = '/';\n\n // default locals\n this.locals.settings = this.settings;\n\n // default configuration\n this.set('view', View);\n this.set('views', resolve('views'));\n this.set('jsonp callback name', 'callback');\n\n if (env === 'production') {\n this.enable('view cache');\n }\n\n Object.defineProperty(this, 'router', {\n get: function() {\n throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n }\n });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n if (!this._router) {\n this._router = new Router({\n caseSensitive: this.enabled('case sensitive routing'),\n strict: this.enabled('strict routing')\n });\n\n this._router.use(query(this.get('query parser fn')));\n this._router.use(middleware.init(this));\n }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n var router = this._router;\n\n // final handler\n var done = callback || finalhandler(req, res, {\n env: this.get('env'),\n onerror: logerror.bind(this)\n });\n\n // no routes\n if (!router) {\n debug('no routes defined on app');\n done();\n return;\n }\n\n router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n var offset = 0;\n var path = '/';\n\n // default path to '/'\n // disambiguate app.use([fn])\n if (typeof fn !== 'function') {\n var arg = fn;\n\n while (Array.isArray(arg) && arg.length !== 0) {\n arg = arg[0];\n }\n\n // first arg is the path\n if (typeof arg !== 'function') {\n offset = 1;\n path = fn;\n }\n }\n\n var fns = flatten(slice.call(arguments, offset));\n\n if (fns.length === 0) {\n throw new TypeError('app.use() requires a middleware function')\n }\n\n // setup router\n this.lazyrouter();\n var router = this._router;\n\n fns.forEach(function (fn) {\n // non-express app\n if (!fn || !fn.handle || !fn.set) {\n return router.use(path, fn);\n }\n\n debug('.use app under %s', path);\n fn.mountpath = path;\n fn.parent = this;\n\n // restore .app property on req and res\n router.use(path, function mounted_app(req, res, next) {\n var orig = req.app;\n fn.handle(req, res, function (err) {\n setPrototypeOf(req, orig.request)\n setPrototypeOf(res, orig.response)\n next(err);\n });\n });\n\n // mounted an app\n fn.emit('mount', this);\n }, this);\n\n return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n this.lazyrouter();\n return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n * app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n * app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n if (typeof fn !== 'function') {\n throw new Error('callback function required');\n }\n\n // get file extension\n var extension = ext[0] !== '.'\n ? '.' + ext\n : ext;\n\n // store engine\n this.engines[extension] = fn;\n\n return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n this.lazyrouter();\n\n if (Array.isArray(name)) {\n for (var i = 0; i < name.length; i++) {\n this.param(name[i], fn);\n }\n\n return this;\n }\n\n this._router.param(name, fn);\n\n return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n * app.set('foo', 'bar');\n * app.set('foo');\n * // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n if (arguments.length === 1) {\n // app.get(setting)\n var settings = this.settings\n\n while (settings && settings !== Object.prototype) {\n if (hasOwnProperty.call(settings, setting)) {\n return settings[setting]\n }\n\n settings = Object.getPrototypeOf(settings)\n }\n\n return undefined\n }\n\n debug('set \"%s\" to %o', setting, val);\n\n // set value\n this.settings[setting] = val;\n\n // trigger matched settings\n switch (setting) {\n case 'etag':\n this.set('etag fn', compileETag(val));\n break;\n case 'query parser':\n this.set('query parser fn', compileQueryParser(val));\n break;\n case 'trust proxy':\n this.set('trust proxy fn', compileTrust(val));\n\n // trust proxy inherit back-compat\n Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n configurable: true,\n value: false\n });\n\n break;\n }\n\n return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n return this.parent\n ? this.parent.path() + this.mountpath\n : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n * app.enabled('foo')\n * // => false\n *\n * app.enable('foo')\n * app.enabled('foo')\n * // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n * app.disabled('foo')\n * // => true\n *\n * app.enable('foo')\n * app.disabled('foo')\n * // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function(method){\n app[method] = function(path){\n if (method === 'get' && arguments.length === 1) {\n // app.get(setting)\n return this.set(path);\n }\n\n this.lazyrouter();\n\n var route = this._router.route(path);\n route[method].apply(route, slice.call(arguments, 1));\n return this;\n };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n this.lazyrouter();\n\n var route = this._router.route(path);\n var args = slice.call(arguments, 1);\n\n for (var i = 0; i < methods.length; i++) {\n route[methods[i]].apply(route, args);\n }\n\n return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n * app.render('email', { name: 'Tobi' }, function(err, html){\n * // ...\n * })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n var cache = this.cache;\n var done = callback;\n var engines = this.engines;\n var opts = options;\n var renderOptions = {};\n var view;\n\n // support callback function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // merge app.locals\n merge(renderOptions, this.locals);\n\n // merge options._locals\n if (opts._locals) {\n merge(renderOptions, opts._locals);\n }\n\n // merge options\n merge(renderOptions, opts);\n\n // set .cache unless explicitly provided\n if (renderOptions.cache == null) {\n renderOptions.cache = this.enabled('view cache');\n }\n\n // primed cache\n if (renderOptions.cache) {\n view = cache[name];\n }\n\n // view\n if (!view) {\n var View = this.get('view');\n\n view = new View(name, {\n defaultEngine: this.get('view engine'),\n root: this.get('views'),\n engines: engines\n });\n\n if (!view.path) {\n var dirs = Array.isArray(view.root) && view.root.length > 1\n ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n : 'directory \"' + view.root + '\"'\n var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n err.view = view;\n return done(err);\n }\n\n // prime the cache\n if (renderOptions.cache) {\n cache[name] = view;\n }\n }\n\n // render\n tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n * var http = require('http')\n * , https = require('https')\n * , express = require('express')\n * , app = express();\n *\n * http.createServer(app).listen(80);\n * https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n /* istanbul ignore next */\n if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n try {\n view.render(options, callback);\n } catch (err) {\n callback(err);\n }\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredCharsets;\nmodule.exports.preferredCharsets = preferredCharsets;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleCharsetRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Charset header.\n * @private\n */\n\nfunction parseAcceptCharset(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var charset = parseCharset(accepts[i].trim(), i);\n\n if (charset) {\n accepts[j++] = charset;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a charset from the Accept-Charset header.\n * @private\n */\n\nfunction parseCharset(str, i) {\n var match = simpleCharsetRegExp.exec(str);\n if (!match) return null;\n\n var charset = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n charset: charset,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a charset.\n * @private\n */\n\nfunction getCharsetPriority(charset, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(charset, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the charset.\n * @private\n */\n\nfunction specify(charset, spec, index) {\n var s = 0;\n if(spec.charset.toLowerCase() === charset.toLowerCase()){\n s |= 1;\n } else if (spec.charset !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n}\n\n/**\n * Get the preferred charsets from an Accept-Charset header.\n * @public\n */\n\nfunction preferredCharsets(accept, provided) {\n // RFC 2616 sec 14.2: no header = *\n var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all charsets\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullCharset);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getCharsetPriority(type, accepts, index);\n });\n\n // sorted list of accepted charsets\n return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full charset string.\n * @private\n */\n\nfunction getFullCharset(spec) {\n return spec.charset;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredEncodings;\nmodule.exports.preferredEncodings = preferredEncodings;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleEncodingRegExp = /^\\s*([^\\s;]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Encoding header.\n * @private\n */\n\nfunction parseAcceptEncoding(accept) {\n var accepts = accept.split(',');\n var hasIdentity = false;\n var minQuality = 1;\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var encoding = parseEncoding(accepts[i].trim(), i);\n\n if (encoding) {\n accepts[j++] = encoding;\n hasIdentity = hasIdentity || specify('identity', encoding);\n minQuality = Math.min(minQuality, encoding.q || 1);\n }\n }\n\n if (!hasIdentity) {\n /*\n * If identity doesn't explicitly appear in the accept-encoding header,\n * it's added to the list of acceptable encoding with the lowest q\n */\n accepts[j++] = {\n encoding: 'identity',\n q: minQuality,\n i: i\n };\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse an encoding from the Accept-Encoding header.\n * @private\n */\n\nfunction parseEncoding(str, i) {\n var match = simpleEncodingRegExp.exec(str);\n if (!match) return null;\n\n var encoding = match[1];\n var q = 1;\n if (match[2]) {\n var params = match[2].split(';');\n for (var j = 0; j < params.length; j++) {\n var p = params[j].trim().split('=');\n if (p[0] === 'q') {\n q = parseFloat(p[1]);\n break;\n }\n }\n }\n\n return {\n encoding: encoding,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of an encoding.\n * @private\n */\n\nfunction getEncodingPriority(encoding, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(encoding, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the encoding.\n * @private\n */\n\nfunction specify(encoding, spec, index) {\n var s = 0;\n if(spec.encoding.toLowerCase() === encoding.toLowerCase()){\n s |= 1;\n } else if (spec.encoding !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred encodings from an Accept-Encoding header.\n * @public\n */\n\nfunction preferredEncodings(accept, provided) {\n var accepts = parseAcceptEncoding(accept || '');\n\n if (!provided) {\n // sorted list of all encodings\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullEncoding);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getEncodingPriority(type, accepts, index);\n });\n\n // sorted list of accepted encodings\n return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full encoding string.\n * @private\n */\n\nfunction getFullEncoding(spec) {\n return spec.encoding;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredLanguages;\nmodule.exports.preferredLanguages = preferredLanguages;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleLanguageRegExp = /^\\s*([^\\s\\-;]+)(?:-([^\\s;]+))?\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept-Language header.\n * @private\n */\n\nfunction parseAcceptLanguage(accept) {\n var accepts = accept.split(',');\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var language = parseLanguage(accepts[i].trim(), i);\n\n if (language) {\n accepts[j++] = language;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a language from the Accept-Language header.\n * @private\n */\n\nfunction parseLanguage(str, i) {\n var match = simpleLanguageRegExp.exec(str);\n if (!match) return null;\n\n var prefix = match[1]\n var suffix = match[2]\n var full = prefix\n\n if (suffix) full += \"-\" + suffix;\n\n var q = 1;\n if (match[3]) {\n var params = match[3].split(';')\n for (var j = 0; j < params.length; j++) {\n var p = params[j].split('=');\n if (p[0] === 'q') q = parseFloat(p[1]);\n }\n }\n\n return {\n prefix: prefix,\n suffix: suffix,\n q: q,\n i: i,\n full: full\n };\n}\n\n/**\n * Get the priority of a language.\n * @private\n */\n\nfunction getLanguagePriority(language, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(language, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the language.\n * @private\n */\n\nfunction specify(language, spec, index) {\n var p = parseLanguage(language)\n if (!p) return null;\n var s = 0;\n if(spec.full.toLowerCase() === p.full.toLowerCase()){\n s |= 4;\n } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {\n s |= 2;\n } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {\n s |= 1;\n } else if (spec.full !== '*' ) {\n return null\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s\n }\n};\n\n/**\n * Get the preferred languages from an Accept-Language header.\n * @public\n */\n\nfunction preferredLanguages(accept, provided) {\n // RFC 2616 sec 14.4: no header = *\n var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || '');\n\n if (!provided) {\n // sorted list of all languages\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullLanguage);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getLanguagePriority(type, accepts, index);\n });\n\n // sorted list of accepted languages\n return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full language string.\n * @private\n */\n\nfunction getFullLanguage(spec) {\n return spec.full;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n", "/**\n * negotiator\n * Copyright(c) 2012 Isaac Z. Schlueter\n * Copyright(c) 2014 Federico Romero\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = preferredMediaTypes;\nmodule.exports.preferredMediaTypes = preferredMediaTypes;\n\n/**\n * Module variables.\n * @private\n */\n\nvar simpleMediaTypeRegExp = /^\\s*([^\\s\\/;]+)\\/([^;\\s]+)\\s*(?:;(.*))?$/;\n\n/**\n * Parse the Accept header.\n * @private\n */\n\nfunction parseAccept(accept) {\n var accepts = splitMediaTypes(accept);\n\n for (var i = 0, j = 0; i < accepts.length; i++) {\n var mediaType = parseMediaType(accepts[i].trim(), i);\n\n if (mediaType) {\n accepts[j++] = mediaType;\n }\n }\n\n // trim accepts\n accepts.length = j;\n\n return accepts;\n}\n\n/**\n * Parse a media type from the Accept header.\n * @private\n */\n\nfunction parseMediaType(str, i) {\n var match = simpleMediaTypeRegExp.exec(str);\n if (!match) return null;\n\n var params = Object.create(null);\n var q = 1;\n var subtype = match[2];\n var type = match[1];\n\n if (match[3]) {\n var kvps = splitParameters(match[3]).map(splitKeyValuePair);\n\n for (var j = 0; j < kvps.length; j++) {\n var pair = kvps[j];\n var key = pair[0].toLowerCase();\n var val = pair[1];\n\n // get the value, unwrapping quotes\n var value = val && val[0] === '\"' && val[val.length - 1] === '\"'\n ? val.substr(1, val.length - 2)\n : val;\n\n if (key === 'q') {\n q = parseFloat(value);\n break;\n }\n\n // store parameter\n params[key] = value;\n }\n }\n\n return {\n type: type,\n subtype: subtype,\n params: params,\n q: q,\n i: i\n };\n}\n\n/**\n * Get the priority of a media type.\n * @private\n */\n\nfunction getMediaTypePriority(type, accepted, index) {\n var priority = {o: -1, q: 0, s: 0};\n\n for (var i = 0; i < accepted.length; i++) {\n var spec = specify(type, accepted[i], index);\n\n if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {\n priority = spec;\n }\n }\n\n return priority;\n}\n\n/**\n * Get the specificity of the media type.\n * @private\n */\n\nfunction specify(type, spec, index) {\n var p = parseMediaType(type);\n var s = 0;\n\n if (!p) {\n return null;\n }\n\n if(spec.type.toLowerCase() == p.type.toLowerCase()) {\n s |= 4\n } else if(spec.type != '*') {\n return null;\n }\n\n if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {\n s |= 2\n } else if(spec.subtype != '*') {\n return null;\n }\n\n var keys = Object.keys(spec.params);\n if (keys.length > 0) {\n if (keys.every(function (k) {\n return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase();\n })) {\n s |= 1\n } else {\n return null\n }\n }\n\n return {\n i: index,\n o: spec.i,\n q: spec.q,\n s: s,\n }\n}\n\n/**\n * Get the preferred media types from an Accept header.\n * @public\n */\n\nfunction preferredMediaTypes(accept, provided) {\n // RFC 2616 sec 14.2: no header = */*\n var accepts = parseAccept(accept === undefined ? '*/*' : accept || '');\n\n if (!provided) {\n // sorted list of all types\n return accepts\n .filter(isQuality)\n .sort(compareSpecs)\n .map(getFullType);\n }\n\n var priorities = provided.map(function getPriority(type, index) {\n return getMediaTypePriority(type, accepts, index);\n });\n\n // sorted list of accepted types\n return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {\n return provided[priorities.indexOf(priority)];\n });\n}\n\n/**\n * Compare two specs.\n * @private\n */\n\nfunction compareSpecs(a, b) {\n return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;\n}\n\n/**\n * Get full type string.\n * @private\n */\n\nfunction getFullType(spec) {\n return spec.type + '/' + spec.subtype;\n}\n\n/**\n * Check if a spec has any quality.\n * @private\n */\n\nfunction isQuality(spec) {\n return spec.q > 0;\n}\n\n/**\n * Count the number of quotes in a string.\n * @private\n */\n\nfunction quoteCount(string) {\n var count = 0;\n var index = 0;\n\n while ((index = string.indexOf('\"', index)) !== -1) {\n count++;\n index++;\n }\n\n return count;\n}\n\n/**\n * Split a key value pair.\n * @private\n */\n\nfunction splitKeyValuePair(str) {\n var index = str.indexOf('=');\n var key;\n var val;\n\n if (index === -1) {\n key = str;\n } else {\n key = str.substr(0, index);\n val = str.substr(index + 1);\n }\n\n return [key, val];\n}\n\n/**\n * Split an Accept header into media types.\n * @private\n */\n\nfunction splitMediaTypes(accept) {\n var accepts = accept.split(',');\n\n for (var i = 1, j = 0; i < accepts.length; i++) {\n if (quoteCount(accepts[j]) % 2 == 0) {\n accepts[++j] = accepts[i];\n } else {\n accepts[j] += ',' + accepts[i];\n }\n }\n\n // trim accepts\n accepts.length = j + 1;\n\n return accepts;\n}\n\n/**\n * Split a string of parameters.\n * @private\n */\n\nfunction splitParameters(str) {\n var parameters = str.split(';');\n\n for (var i = 1, j = 0; i < parameters.length; i++) {\n if (quoteCount(parameters[j]) % 2 == 0) {\n parameters[++j] = parameters[i];\n } else {\n parameters[j] += ';' + parameters[i];\n }\n }\n\n // trim parameters\n parameters.length = j + 1;\n\n for (var i = 0; i < parameters.length; i++) {\n parameters[i] = parameters[i].trim();\n }\n\n return parameters;\n}\n", "/*!\n * negotiator\n * Copyright(c) 2012 Federico Romero\n * Copyright(c) 2012-2014 Isaac Z. Schlueter\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Negotiator;\nmodule.exports.Negotiator = Negotiator;\n\n/**\n * Create a Negotiator instance from a request.\n * @param {object} request\n * @public\n */\n\nfunction Negotiator(request) {\n if (!(this instanceof Negotiator)) {\n return new Negotiator(request);\n }\n\n this.request = request;\n}\n\nNegotiator.prototype.charset = function charset(available) {\n var set = this.charsets(available);\n return set && set[0];\n};\n\nNegotiator.prototype.charsets = function charsets(available) {\n return preferredCharsets(this.request.headers['accept-charset'], available);\n};\n\nNegotiator.prototype.encoding = function encoding(available) {\n var set = this.encodings(available);\n return set && set[0];\n};\n\nNegotiator.prototype.encodings = function encodings(available) {\n return preferredEncodings(this.request.headers['accept-encoding'], available);\n};\n\nNegotiator.prototype.language = function language(available) {\n var set = this.languages(available);\n return set && set[0];\n};\n\nNegotiator.prototype.languages = function languages(available) {\n return preferredLanguages(this.request.headers['accept-language'], available);\n};\n\nNegotiator.prototype.mediaType = function mediaType(available) {\n var set = this.mediaTypes(available);\n return set && set[0];\n};\n\nNegotiator.prototype.mediaTypes = function mediaTypes(available) {\n return preferredMediaTypes(this.request.headers.accept, available);\n};\n\n// Backwards compatibility\nNegotiator.prototype.preferredCharset = Negotiator.prototype.charset;\nNegotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;\nNegotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;\nNegotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;\nNegotiator.prototype.preferredLanguage = Negotiator.prototype.language;\nNegotiator.prototype.preferredLanguages = Negotiator.prototype.languages;\nNegotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;\nNegotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;\n", "/*!\n * accepts\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 Negotiator = require('negotiator')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Accepts\n\n/**\n * Create a new Accepts object for the given req.\n *\n * @param {object} req\n * @public\n */\n\nfunction Accepts (req) {\n if (!(this instanceof Accepts)) {\n return new Accepts(req)\n }\n\n this.headers = req.headers\n this.negotiator = new Negotiator(req)\n}\n\n/**\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single mime type string\n * such as \"application/json\", the extension name\n * such as \"json\" or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * this.types('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * this.types('html');\n * // => \"html\"\n * this.types('text/html');\n * // => \"text/html\"\n * this.types('json', 'text');\n * // => \"json\"\n * this.types('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * this.types('image/png');\n * this.types('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * this.types(['html', 'json']);\n * this.types('html', 'json');\n * // => \"json\"\n *\n * @param {String|Array} types...\n * @return {String|Array|Boolean}\n * @public\n */\n\nAccepts.prototype.type =\nAccepts.prototype.types = function (types_) {\n var types = types_\n\n // support flattened arguments\n if (types && !Array.isArray(types)) {\n types = new Array(arguments.length)\n for (var i = 0; i < types.length; i++) {\n types[i] = arguments[i]\n }\n }\n\n // no types, return all requested types\n if (!types || types.length === 0) {\n return this.negotiator.mediaTypes()\n }\n\n // no accept header, return first given type\n if (!this.headers.accept) {\n return types[0]\n }\n\n var mimes = types.map(extToMime)\n var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))\n var first = accepts[0]\n\n return first\n ? types[mimes.indexOf(first)]\n : false\n}\n\n/**\n * Return accepted encodings or best fit based on `encodings`.\n *\n * Given `Accept-Encoding: gzip, deflate`\n * an array sorted by quality is returned:\n *\n * ['gzip', 'deflate']\n *\n * @param {String|Array} encodings...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.encoding =\nAccepts.prototype.encodings = function (encodings_) {\n var encodings = encodings_\n\n // support flattened arguments\n if (encodings && !Array.isArray(encodings)) {\n encodings = new Array(arguments.length)\n for (var i = 0; i < encodings.length; i++) {\n encodings[i] = arguments[i]\n }\n }\n\n // no encodings, return all requested encodings\n if (!encodings || encodings.length === 0) {\n return this.negotiator.encodings()\n }\n\n return this.negotiator.encodings(encodings)[0] || false\n}\n\n/**\n * Return accepted charsets or best fit based on `charsets`.\n *\n * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`\n * an array sorted by quality is returned:\n *\n * ['utf-8', 'utf-7', 'iso-8859-1']\n *\n * @param {String|Array} charsets...\n * @return {String|Array}\n * @public\n */\n\nAccepts.prototype.charset =\nAccepts.prototype.charsets = function (charsets_) {\n var charsets = charsets_\n\n // support flattened arguments\n if (charsets && !Array.isArray(charsets)) {\n charsets = new Array(arguments.length)\n for (var i = 0; i < charsets.length; i++) {\n charsets[i] = arguments[i]\n }\n }\n\n // no charsets, return all requested charsets\n if (!charsets || charsets.length === 0) {\n return this.negotiator.charsets()\n }\n\n return this.negotiator.charsets(charsets)[0] || false\n}\n\n/**\n * Return accepted languages or best fit based on `langs`.\n *\n * Given `Accept-Language: en;q=0.8, es, pt`\n * an array sorted by quality is returned:\n *\n * ['es', 'pt', 'en']\n *\n * @param {String|Array} langs...\n * @return {Array|String}\n * @public\n */\n\nAccepts.prototype.lang =\nAccepts.prototype.langs =\nAccepts.prototype.language =\nAccepts.prototype.languages = function (languages_) {\n var languages = languages_\n\n // support flattened arguments\n if (languages && !Array.isArray(languages)) {\n languages = new Array(arguments.length)\n for (var i = 0; i < languages.length; i++) {\n languages[i] = arguments[i]\n }\n }\n\n // no languages, return all requested languages\n if (!languages || languages.length === 0) {\n return this.negotiator.languages()\n }\n\n return this.negotiator.languages(languages)[0] || false\n}\n\n/**\n * Convert extnames to mime.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction extToMime (type) {\n return type.indexOf('/') === -1\n ? mime.lookup(type)\n : type\n}\n\n/**\n * Check if mime is valid.\n *\n * @param {String} type\n * @return {String}\n * @private\n */\n\nfunction validMime (type) {\n return typeof type === 'string'\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar accepts = require('accepts');\nvar deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n * req.get('Content-Type');\n * // => \"text/plain\"\n *\n * req.get('content-type');\n * // => \"text/plain\"\n *\n * req.get('Something');\n * // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n if (!name) {\n throw new TypeError('name argument is required to req.get');\n }\n\n if (typeof name !== 'string') {\n throw new TypeError('name must be a string to req.get');\n }\n\n var lc = name.toLowerCase();\n\n switch (lc) {\n case 'referer':\n case 'referrer':\n return this.headers.referrer\n || this.headers.referer;\n default:\n return this.headers[lc];\n }\n};\n\n/**\n * To do: update docs.\n *\n * Check if the given `type(s)` is acceptable, returning\n * the best match when true, otherwise `undefined`, in which\n * case you should respond with 406 \"Not Acceptable\".\n *\n * The `type` value may be a single MIME type string\n * such as \"application/json\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * or an array `[\"json\", \"html\", \"text/plain\"]`. When a list\n * or array is given, the _best_ match, if any is returned.\n *\n * Examples:\n *\n * // Accept: text/html\n * req.accepts('html');\n * // => \"html\"\n *\n * // Accept: text/*, application/json\n * req.accepts('html');\n * // => \"html\"\n * req.accepts('text/html');\n * // => \"text/html\"\n * req.accepts('json, text');\n * // => \"json\"\n * req.accepts('application/json');\n * // => \"application/json\"\n *\n * // Accept: text/*, application/json\n * req.accepts('image/png');\n * req.accepts('png');\n * // => undefined\n *\n * // Accept: text/*;q=.5, application/json\n * req.accepts(['html', 'json']);\n * req.accepts('html', 'json');\n * req.accepts('html, json');\n * // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n var accept = accepts(this);\n return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n var accept = accepts(this);\n return accept.encodings.apply(accept, arguments);\n};\n\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings,\n 'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n var accept = accepts(this);\n return accept.charsets.apply(accept, arguments);\n};\n\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets,\n 'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(){\n var accept = accepts(this);\n return accept.languages.apply(accept, arguments);\n};\n\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages,\n 'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n var range = this.get('Range');\n if (!range) return;\n return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n * - Checks route placeholders, ex: _/user/:id_\n * - Checks body params, ex: id=12, {\"id\":12}\n * - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n var params = this.params || {};\n var body = this.body || {};\n var query = this.query || {};\n\n var args = arguments.length === 1\n ? 'name'\n : 'name, default';\n deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n\n if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n if (null != body[name]) return body[name];\n if (null != query[name]) return query[name];\n\n return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n * // With Content-Type: text/html; charset=utf-8\n * req.is('html');\n * req.is('text/html');\n * req.is('text/*');\n * // => true\n *\n * // When Content-Type is application/json\n * req.is('json');\n * req.is('application/json');\n * req.is('application/*');\n * // => true\n *\n * req.is('html');\n * // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n var arr = types;\n\n // support flattened arguments\n if (!Array.isArray(types)) {\n arr = new Array(arguments.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = arguments[i];\n }\n }\n\n return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n var proto = this.connection.encrypted\n ? 'https'\n : 'http';\n var trust = this.app.get('trust proxy fn');\n\n if (!trust(this.connection.remoteAddress, 0)) {\n return proto;\n }\n\n // Note: X-Forwarded-Proto is normally only ever a\n // single value, but this is to be safe.\n var header = this.get('X-Forwarded-Proto') || proto\n var index = header.indexOf(',')\n\n return index !== -1\n ? header.substring(0, index).trim()\n : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n * req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n var trust = this.app.get('trust proxy fn');\n return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n var trust = this.app.get('trust proxy fn');\n var addrs = proxyaddr.all(this, trust);\n\n // reverse the order (to farthest -> closest)\n // and remove socket address\n addrs.reverse().pop()\n\n return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n var hostname = this.hostname;\n\n if (!hostname) return [];\n\n var offset = this.app.get('subdomain offset');\n var subdomains = !isIP(hostname)\n ? hostname.split('.').reverse()\n : [hostname];\n\n return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n var trust = this.app.get('trust proxy fn');\n var host = this.get('X-Forwarded-Host');\n\n if (!host || !trust(this.connection.remoteAddress, 0)) {\n host = this.get('Host');\n } else if (host.indexOf(',') !== -1) {\n // Note: X-Forwarded-Host is normally only ever a\n // single value, but this is to be safe.\n host = host.substring(0, host.indexOf(',')).trimRight()\n }\n\n if (!host) return;\n\n // IPv6 literal support\n var offset = host[0] === '['\n ? host.indexOf(']') + 1\n : 0;\n var index = host.indexOf(':', offset);\n\n return index !== -1\n ? host.substring(0, index)\n : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host(){\n return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n var method = this.method;\n var res = this.res\n var status = res.statusCode\n\n // GET or HEAD for weak freshness validation only\n if ('GET' !== method && 'HEAD' !== method) return false;\n\n // 2xx or 304 as per rfc2616 14.26\n if ((status >= 200 && status < 300) || 304 === status) {\n return fresh(this.headers, {\n 'etag': res.get('ETag'),\n 'last-modified': res.get('Last-Modified')\n })\n }\n\n return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n var val = this.get('X-Requested-With') || '';\n return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: true,\n get: getter\n });\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n return val + '.' + crypto\n .createHmac('sha256', secret)\n .update(val)\n .digest('base64')\n .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n var str = val.slice(0, val.lastIndexOf('.'))\n , mac = exports.sign(str, secret);\n \n return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n", "/*!\n * vary\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = vary\nmodule.exports.append = append\n\n/**\n * RegExp to match field-name in RFC 7230 sec 3.2\n *\n * field-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n */\n\nvar FIELD_NAME_REGEXP = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/\n\n/**\n * Append a field to a vary header.\n *\n * @param {String} header\n * @param {String|Array} field\n * @return {String}\n * @public\n */\n\nfunction append (header, field) {\n if (typeof header !== 'string') {\n throw new TypeError('header argument is required')\n }\n\n if (!field) {\n throw new TypeError('field argument is required')\n }\n\n // get fields array\n var fields = !Array.isArray(field)\n ? parse(String(field))\n : field\n\n // assert on invalid field names\n for (var j = 0; j < fields.length; j++) {\n if (!FIELD_NAME_REGEXP.test(fields[j])) {\n throw new TypeError('field argument contains an invalid header name')\n }\n }\n\n // existing, unspecified vary\n if (header === '*') {\n return header\n }\n\n // enumerate current values\n var val = header\n var vals = parse(header.toLowerCase())\n\n // unspecified vary\n if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) {\n return '*'\n }\n\n for (var i = 0; i < fields.length; i++) {\n var fld = fields[i].toLowerCase()\n\n // append value (case-preserving)\n if (vals.indexOf(fld) === -1) {\n vals.push(fld)\n val = val\n ? val + ', ' + fields[i]\n : fields[i]\n }\n }\n\n return val\n}\n\n/**\n * Parse a vary header into an array.\n *\n * @param {String} header\n * @return {Array}\n * @private\n */\n\nfunction parse (header) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = header.length; i < len; i++) {\n switch (header.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(header.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(header.substring(start, end))\n\n return list\n}\n\n/**\n * Mark that a request is varied on a header field.\n *\n * @param {Object} res\n * @param {String|Array} field\n * @public\n */\n\nfunction vary (res, field) {\n if (!res || !res.getHeader || !res.setHeader) {\n // quack quack\n throw new TypeError('res argument is required')\n }\n\n // get existing header\n var val = res.getHeader('Vary') || ''\n var header = Array.isArray(val)\n ? val.join(', ')\n : String(val)\n\n // set new header\n if ((val = append(header, field))) {\n res.setHeader('Vary', val)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors')\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses')\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {\n deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead')\n }\n this.statusCode = code;\n return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n * res.links({\n * next: 'http://api.example.com/users?page=2',\n * last: 'http://api.example.com/users?page=5'\n * });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links){\n var link = this.get('Link') || '';\n if (link) link += ', ';\n return this.set('Link', link + Object.keys(links).map(function(rel){\n return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n * res.send(Buffer.from('wahoo'));\n * res.send({ some: 'json' });\n * res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n var chunk = body;\n var encoding;\n var req = this.req;\n var type;\n\n // settings\n var app = this.app;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.send(body, status) backwards compat\n if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n this.statusCode = arguments[0];\n chunk = arguments[1];\n }\n }\n\n // disambiguate res.send(status) and res.send(status, num)\n if (typeof chunk === 'number' && arguments.length === 1) {\n // res.send(status) will set status message as text string\n if (!this.get('Content-Type')) {\n this.type('txt');\n }\n\n deprecate('res.send(status): Use res.sendStatus(status) instead');\n this.statusCode = chunk;\n chunk = statuses.message[chunk]\n }\n\n switch (typeof chunk) {\n // string defaulting to html\n case 'string':\n if (!this.get('Content-Type')) {\n this.type('html');\n }\n break;\n case 'boolean':\n case 'number':\n case 'object':\n if (chunk === null) {\n chunk = '';\n } else if (Buffer.isBuffer(chunk)) {\n if (!this.get('Content-Type')) {\n this.type('bin');\n }\n } else {\n return this.json(chunk);\n }\n break;\n }\n\n // write strings in utf-8\n if (typeof chunk === 'string') {\n encoding = 'utf8';\n type = this.get('Content-Type');\n\n // reflect this in content-type\n if (typeof type === 'string') {\n this.set('Content-Type', setCharset(type, 'utf-8'));\n }\n }\n\n // determine if ETag should be generated\n var etagFn = app.get('etag fn')\n var generateETag = !this.get('ETag') && typeof etagFn === 'function'\n\n // populate Content-Length\n var len\n if (chunk !== undefined) {\n if (Buffer.isBuffer(chunk)) {\n // get length of Buffer\n len = chunk.length\n } else if (!generateETag && chunk.length < 1000) {\n // just calculate length when no ETag + small chunk\n len = Buffer.byteLength(chunk, encoding)\n } else {\n // convert chunk to Buffer and calculate\n chunk = Buffer.from(chunk, encoding)\n encoding = undefined;\n len = chunk.length\n }\n\n this.set('Content-Length', len);\n }\n\n // populate ETag\n var etag;\n if (generateETag && len !== undefined) {\n if ((etag = etagFn(chunk, encoding))) {\n this.set('ETag', etag);\n }\n }\n\n // freshness\n if (req.fresh) this.statusCode = 304;\n\n // strip irrelevant headers\n if (204 === this.statusCode || 304 === this.statusCode) {\n this.removeHeader('Content-Type');\n this.removeHeader('Content-Length');\n this.removeHeader('Transfer-Encoding');\n chunk = '';\n }\n\n // alter headers for 205\n if (this.statusCode === 205) {\n this.set('Content-Length', '0')\n this.removeHeader('Transfer-Encoding')\n chunk = ''\n }\n\n if (req.method === 'HEAD') {\n // skip body for HEAD\n this.end();\n } else {\n // respond\n this.end(chunk, encoding);\n }\n\n return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n * res.json(null);\n * res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n var val = obj;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.json(body, status) backwards compat\n if (typeof arguments[1] === 'number') {\n deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n this.statusCode = arguments[0];\n val = arguments[1];\n }\n }\n\n // settings\n var app = this.app;\n var escape = app.get('json escape')\n var replacer = app.get('json replacer');\n var spaces = app.get('json spaces');\n var body = stringify(val, replacer, spaces, escape)\n\n // content-type\n if (!this.get('Content-Type')) {\n this.set('Content-Type', 'application/json');\n }\n\n return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n * res.jsonp(null);\n * res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n var val = obj;\n\n // allow status / body\n if (arguments.length === 2) {\n // res.jsonp(body, status) backwards compat\n if (typeof arguments[1] === 'number') {\n deprecate('res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead');\n this.statusCode = arguments[1];\n } else {\n deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n this.statusCode = arguments[0];\n val = arguments[1];\n }\n }\n\n // settings\n var app = this.app;\n var escape = app.get('json escape')\n var replacer = app.get('json replacer');\n var spaces = app.get('json spaces');\n var body = stringify(val, replacer, spaces, escape)\n var callback = this.req.query[app.get('jsonp callback name')];\n\n // content-type\n if (!this.get('Content-Type')) {\n this.set('X-Content-Type-Options', 'nosniff');\n this.set('Content-Type', 'application/json');\n }\n\n // fixup callback\n if (Array.isArray(callback)) {\n callback = callback[0];\n }\n\n // jsonp\n if (typeof callback === 'string' && callback.length !== 0) {\n this.set('X-Content-Type-Options', 'nosniff');\n this.set('Content-Type', 'text/javascript');\n\n // restrict callback charset\n callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n if (body === undefined) {\n // empty argument\n body = ''\n } else if (typeof body === 'string') {\n // replace chars not allowed in JavaScript that are in JSON\n body = body\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n }\n\n // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n // the typeof check is just to reduce client error noise\n body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n }\n\n return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n * res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n var body = statuses.message[statusCode] || String(statusCode)\n\n this.statusCode = statusCode;\n this.type('txt');\n\n return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n * - `maxAge` defaulting to 0 (can be string converted by `ms`)\n * - `root` root directory for relative filenames\n * - `headers` object of headers to serve with file\n * - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n * The following example illustrates how `res.sendFile()` may\n * be used as an alternative for the `static()` middleware for\n * dynamic situations. The code backing `res.sendFile()` is actually\n * the same code, so HTTP cache support etc is identical.\n *\n * app.get('/user/:uid/photos/:file', function(req, res){\n * var uid = req.params.uid\n * , file = req.params.file;\n *\n * req.user.mayViewFilesFrom(uid, function(yes){\n * if (yes) {\n * res.sendFile('/uploads/' + uid + '/' + file);\n * } else {\n * res.send(403, 'Sorry! you cant see that.');\n * }\n * });\n * });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n var done = callback;\n var req = this.req;\n var res = this;\n var next = req.next;\n var opts = options || {};\n\n if (!path) {\n throw new TypeError('path argument is required to res.sendFile');\n }\n\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string to res.sendFile')\n }\n\n // support function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n if (!opts.root && !isAbsolute(path)) {\n throw new TypeError('path must be absolute or specify root to res.sendFile');\n }\n\n // create file stream\n var pathname = encodeURI(path);\n var file = send(req, pathname, opts);\n\n // transfer\n sendfile(res, file, opts, function (err) {\n if (done) return done(err);\n if (err && err.code === 'EISDIR') return next();\n\n // next() all but write errors\n if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n next(err);\n }\n });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n * - `maxAge` defaulting to 0 (can be string converted by `ms`)\n * - `root` root directory for relative filenames\n * - `headers` object of headers to serve with file\n * - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n * The following example illustrates how `res.sendfile()` may\n * be used as an alternative for the `static()` middleware for\n * dynamic situations. The code backing `res.sendfile()` is actually\n * the same code, so HTTP cache support etc is identical.\n *\n * app.get('/user/:uid/photos/:file', function(req, res){\n * var uid = req.params.uid\n * , file = req.params.file;\n *\n * req.user.mayViewFilesFrom(uid, function(yes){\n * if (yes) {\n * res.sendfile('/uploads/' + uid + '/' + file);\n * } else {\n * res.send(403, 'Sorry! you cant see that.');\n * }\n * });\n * });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n var done = callback;\n var req = this.req;\n var res = this;\n var next = req.next;\n var opts = options || {};\n\n // support function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // create file stream\n var file = send(req, path, opts);\n\n // transfer\n sendfile(res, file, opts, function (err) {\n if (done) return done(err);\n if (err && err.code === 'EISDIR') return next();\n\n // next() all but write errors\n if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n next(err);\n }\n });\n};\n\nres.sendfile = deprecate.function(res.sendfile,\n 'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download (path, filename, options, callback) {\n var done = callback;\n var name = filename;\n var opts = options || null\n\n // support function as second or third arg\n if (typeof filename === 'function') {\n done = filename;\n name = null;\n opts = null\n } else if (typeof options === 'function') {\n done = options\n opts = null\n }\n\n // support optional filename, where options may be in it's place\n if (typeof filename === 'object' &&\n (typeof options === 'function' || options === undefined)) {\n name = null\n opts = filename\n }\n\n // set Content-Disposition when file is sent\n var headers = {\n 'Content-Disposition': contentDisposition(name || path)\n };\n\n // merge user-provided headers\n if (opts && opts.headers) {\n var keys = Object.keys(opts.headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n if (key.toLowerCase() !== 'content-disposition') {\n headers[key] = opts.headers[key]\n }\n }\n }\n\n // merge user-provided options\n opts = Object.create(opts)\n opts.headers = headers\n\n // Resolve the full path for sendFile\n var fullPath = !opts.root\n ? resolve(path)\n : path\n\n // send file\n return this.sendFile(fullPath, opts, done)\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n * res.type('.html');\n * res.type('html');\n * res.type('json');\n * res.type('application/json');\n * res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n var ct = type.indexOf('/') === -1\n ? mime.lookup(type)\n : type;\n\n return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n * res.format({\n * 'text/plain': function(){\n * res.send('hey');\n * },\n *\n * 'text/html': function(){\n * res.send('<p>hey</p>');\n * },\n *\n * 'application/json': function () {\n * res.send({ message: 'hey' });\n * }\n * });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n * res.format({\n * text: function(){\n * res.send('hey');\n * },\n *\n * html: function(){\n * res.send('<p>hey</p>');\n * },\n *\n * json: function(){\n * res.send({ message: 'hey' });\n * }\n * });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n var req = this.req;\n var next = req.next;\n\n var keys = Object.keys(obj)\n .filter(function (v) { return v !== 'default' })\n\n var key = keys.length > 0\n ? req.accepts(keys)\n : false;\n\n this.vary(\"Accept\");\n\n if (key) {\n this.set('Content-Type', normalizeType(key).value);\n obj[key](req, this, next);\n } else if (obj.default) {\n obj.default(req, this, next)\n } else {\n next(createError(406, {\n types: normalizeTypes(keys).map(function (o) { return o.value })\n }))\n }\n\n return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n if (filename) {\n this.type(extname(filename));\n }\n\n this.set('Content-Disposition', contentDisposition(filename));\n\n return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n * res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n * res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n var prev = this.get(field);\n var value = val;\n\n if (prev) {\n // concat the new and prev vals\n value = Array.isArray(prev) ? prev.concat(val)\n : Array.isArray(val) ? [prev].concat(val)\n : [prev, val]\n }\n\n return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n * res.set('Foo', ['bar', 'baz']);\n * res.set('Accept', 'application/json');\n * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n if (arguments.length === 2) {\n var value = Array.isArray(val)\n ? val.map(String)\n : String(val);\n\n // add charset to content-type\n if (field.toLowerCase() === 'content-type') {\n if (Array.isArray(value)) {\n throw new TypeError('Content-Type cannot be set to an Array');\n }\n if (!charsetRegExp.test(value)) {\n var charset = mime.charsets.lookup(value.split(';')[0]);\n if (charset) value += '; charset=' + charset.toLowerCase();\n }\n }\n\n this.setHeader(field, value);\n } else {\n for (var key in field) {\n this.set(key, field[key]);\n }\n }\n return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n var opts = merge({ expires: new Date(1), path: '/' }, options);\n\n return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n * - `maxAge` max-age in milliseconds, converted to `expires`\n * - `signed` sign the cookie\n * - `path` defaults to \"/\"\n *\n * Examples:\n *\n * // \"Remember Me\" for 15 minutes\n * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n * // same as above\n * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n var opts = merge({}, options);\n var secret = this.req.secret;\n var signed = opts.signed;\n\n if (signed && !secret) {\n throw new Error('cookieParser(\"secret\") required for signed cookies');\n }\n\n var val = typeof value === 'object'\n ? 'j:' + JSON.stringify(value)\n : String(value);\n\n if (signed) {\n val = 's:' + sign(val, secret);\n }\n\n if (opts.maxAge != null) {\n var maxAge = opts.maxAge - 0\n\n if (!isNaN(maxAge)) {\n opts.expires = new Date(Date.now() + maxAge)\n opts.maxAge = Math.floor(maxAge / 1000)\n }\n }\n\n if (opts.path == null) {\n opts.path = '/';\n }\n\n this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n * res.location('/foo/bar').;\n * res.location('http://example.com');\n * res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n var loc = url;\n\n // \"back\" is an alias for the referrer\n if (url === 'back') {\n loc = this.req.get('Referrer') || '/';\n }\n\n // set location\n return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n * res.redirect('/foo/bar');\n * res.redirect('http://example.com');\n * res.redirect(301, 'http://example.com');\n * res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n var address = url;\n var body;\n var status = 302;\n\n // allow status / url\n if (arguments.length === 2) {\n if (typeof arguments[0] === 'number') {\n status = arguments[0];\n address = arguments[1];\n } else {\n deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n status = arguments[1];\n }\n }\n\n // Set location header\n address = this.location(address).get('Location');\n\n // Support text/{plain,html} by default\n this.format({\n text: function(){\n body = statuses.message[status] + '. Redirecting to ' + address\n },\n\n html: function(){\n var u = escapeHtml(address);\n body = '<p>' + statuses.message[status] + '. Redirecting to <a href=\"' + u + '\">' + u + '</a></p>'\n },\n\n default: function(){\n body = '';\n }\n });\n\n // Respond\n this.statusCode = status;\n this.set('Content-Length', Buffer.byteLength(body));\n\n if (this.req.method === 'HEAD') {\n this.end();\n } else {\n this.end(body);\n }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n // checks for back-compat\n if (!field || (Array.isArray(field) && !field.length)) {\n deprecate('res.vary(): Provide a field name');\n return this;\n }\n\n vary(this, field);\n\n return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n * - `cache` boolean hinting to the engine it should cache\n * - `filename` filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n var app = this.req.app;\n var done = callback;\n var opts = options || {};\n var req = this.req;\n var self = this;\n\n // support callback function as second arg\n if (typeof options === 'function') {\n done = options;\n opts = {};\n }\n\n // merge res.locals\n opts._locals = self.locals;\n\n // default callback to respond\n done = done || function (err, str) {\n if (err) return req.next(err);\n self.send(str);\n };\n\n // render\n app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n var done = false;\n var streaming;\n\n // request aborted\n function onaborted() {\n if (done) return;\n done = true;\n\n var err = new Error('Request aborted');\n err.code = 'ECONNABORTED';\n callback(err);\n }\n\n // directory\n function ondirectory() {\n if (done) return;\n done = true;\n\n var err = new Error('EISDIR, read');\n err.code = 'EISDIR';\n callback(err);\n }\n\n // errors\n function onerror(err) {\n if (done) return;\n done = true;\n callback(err);\n }\n\n // ended\n function onend() {\n if (done) return;\n done = true;\n callback();\n }\n\n // file\n function onfile() {\n streaming = false;\n }\n\n // finished\n function onfinish(err) {\n if (err && err.code === 'ECONNRESET') return onaborted();\n if (err) return onerror(err);\n if (done) return;\n\n setImmediate(function () {\n if (streaming !== false && !done) {\n onaborted();\n return;\n }\n\n if (done) return;\n done = true;\n callback();\n });\n }\n\n // streaming\n function onstream() {\n streaming = true;\n }\n\n file.on('directory', ondirectory);\n file.on('end', onend);\n file.on('error', onerror);\n file.on('file', onfile);\n file.on('stream', onstream);\n onFinished(res, onfinish);\n\n if (options.headers) {\n // set headers on successful transfer\n file.on('headers', function headers(res) {\n var obj = options.headers;\n var keys = Object.keys(obj);\n\n for (var i = 0; i < keys.length; i++) {\n var k = keys[i];\n res.setHeader(k, obj[k]);\n }\n });\n }\n\n // pipe\n file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify (value, replacer, spaces, escape) {\n // v8 checks arguments.length for optimizing simple call\n // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n var json = replacer || spaces\n ? JSON.stringify(value, replacer, spaces)\n : JSON.stringify(value);\n\n if (escape && typeof json === 'string') {\n json = json.replace(/[<>&]/g, function (c) {\n switch (c.charCodeAt(0)) {\n case 0x3c:\n return '\\\\u003c'\n case 0x3e:\n return '\\\\u003e'\n case 0x26:\n return '\\\\u0026'\n /* istanbul ignore next: unreachable default */\n default:\n return c\n }\n })\n }\n\n return json\n}\n", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\nmodule.exports.mime = send.mime\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n if (!root) {\n throw new TypeError('root path required')\n }\n\n if (typeof root !== 'string') {\n throw new TypeError('root path must be a string')\n }\n\n // copy options object\n var opts = Object.create(options || null)\n\n // fall-though\n var fallthrough = opts.fallthrough !== false\n\n // default redirect\n var redirect = opts.redirect !== false\n\n // headers listener\n var setHeaders = opts.setHeaders\n\n if (setHeaders && typeof setHeaders !== 'function') {\n throw new TypeError('option setHeaders must be function')\n }\n\n // setup options for send\n opts.maxage = opts.maxage || opts.maxAge || 0\n opts.root = resolve(root)\n\n // construct directory listener\n var onDirectory = redirect\n ? createRedirectDirectoryListener()\n : createNotFoundDirectoryListener()\n\n return function serveStatic (req, res, next) {\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n if (fallthrough) {\n return next()\n }\n\n // method not allowed\n res.statusCode = 405\n res.setHeader('Allow', 'GET, HEAD')\n res.setHeader('Content-Length', '0')\n res.end()\n return\n }\n\n var forwardError = !fallthrough\n var originalUrl = parseUrl.original(req)\n var path = parseUrl(req).pathname\n\n // make sure redirect occurs at mount\n if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n path = ''\n }\n\n // create send stream\n var stream = send(req, path, opts)\n\n // add directory handler\n stream.on('directory', onDirectory)\n\n // add headers listener\n if (setHeaders) {\n stream.on('headers', setHeaders)\n }\n\n // add file listener for fallthrough\n if (fallthrough) {\n stream.on('file', function onFile () {\n // once file is determined, always forward error\n forwardError = true\n })\n }\n\n // forward errors\n stream.on('error', function error (err) {\n if (forwardError || !(err.statusCode < 500)) {\n next(err)\n return\n }\n\n next()\n })\n\n // pipe\n stream.pipe(res)\n }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n for (var i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) !== 0x2f /* / */) {\n break\n }\n }\n\n return i > 1\n ? '/' + str.substr(i)\n : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n return '<!DOCTYPE html>\\n' +\n '<html lang=\"en\">\\n' +\n '<head>\\n' +\n '<meta charset=\"utf-8\">\\n' +\n '<title>' + title + '</title>\\n' +\n '</head>\\n' +\n '<body>\\n' +\n '<pre>' + body + '</pre>\\n' +\n '</body>\\n' +\n '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n return function notFound () {\n this.error(404)\n }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n return function redirect (res) {\n if (this.hasTrailingSlash()) {\n this.error(404)\n return\n }\n\n // get original URL\n var originalUrl = parseUrl.original(this.req)\n\n // append trailing slash\n originalUrl.path = null\n originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n // reformat the URL\n var loc = encodeUrl(url.format(originalUrl))\n var doc = createHtmlDocument('Redirecting', 'Redirecting to <a href=\"' + escapeHtml(loc) + '\">' +\n escapeHtml(loc) + '</a>')\n\n // send redirect response\n res.statusCode = 301\n res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n res.setHeader('Content-Length', Buffer.byteLength(doc))\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n res.setHeader('Location', loc)\n res.end(doc)\n }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar bodyParser = require('body-parser')\nvar EventEmitter = require('events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Route = require('./router/route');\nvar Router = require('./router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n var app = function(req, res, next) {\n app.handle(req, res, next);\n };\n\n mixin(app, EventEmitter.prototype, false);\n mixin(app, proto, false);\n\n // expose the prototype that will get set on requests\n app.request = Object.create(req, {\n app: { configurable: true, enumerable: true, writable: true, value: app }\n })\n\n // expose the prototype that will get set on responses\n app.response = Object.create(res, {\n app: { configurable: true, enumerable: true, writable: true, value: app }\n })\n\n app.init();\n return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json\nexports.query = require('./middleware/query');\nexports.raw = bodyParser.raw\nexports.static = require('serve-static');\nexports.text = bodyParser.text\nexports.urlencoded = bodyParser.urlencoded\n\n/**\n * Replace removed middleware with an appropriate error message.\n */\n\nvar removedMiddlewares = [\n 'bodyParser',\n 'compress',\n 'cookieSession',\n 'session',\n 'logger',\n 'cookieParser',\n 'favicon',\n 'responseTime',\n 'errorHandler',\n 'timeout',\n 'methodOverride',\n 'vhost',\n 'csrf',\n 'directory',\n 'limit',\n 'multipart',\n 'staticCache'\n]\n\nremovedMiddlewares.forEach(function (name) {\n Object.defineProperty(exports, name, {\n get: function () {\n throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');\n },\n configurable: true\n });\n});\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');\n", "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", "(function () {\n\n 'use strict';\n\n var assign = require('object-assign');\n var vary = require('vary');\n\n var defaults = {\n origin: '*',\n methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',\n preflightContinue: false,\n optionsSuccessStatus: 204\n };\n\n function isString(s) {\n return typeof s === 'string' || s instanceof String;\n }\n\n function isOriginAllowed(origin, allowedOrigin) {\n if (Array.isArray(allowedOrigin)) {\n for (var i = 0; i < allowedOrigin.length; ++i) {\n if (isOriginAllowed(origin, allowedOrigin[i])) {\n return true;\n }\n }\n return false;\n } else if (isString(allowedOrigin)) {\n return origin === allowedOrigin;\n } else if (allowedOrigin instanceof RegExp) {\n return allowedOrigin.test(origin);\n } else {\n return !!allowedOrigin;\n }\n }\n\n function configureOrigin(options, req) {\n var requestOrigin = req.headers.origin,\n headers = [],\n isAllowed;\n\n if (!options.origin || options.origin === '*') {\n // allow any origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: '*'\n }]);\n } else if (isString(options.origin)) {\n // fixed origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: options.origin\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n } else {\n isAllowed = isOriginAllowed(requestOrigin, options.origin);\n // reflect origin\n headers.push([{\n key: 'Access-Control-Allow-Origin',\n value: isAllowed ? requestOrigin : false\n }]);\n headers.push([{\n key: 'Vary',\n value: 'Origin'\n }]);\n }\n\n return headers;\n }\n\n function configureMethods(options) {\n var methods = options.methods;\n if (methods.join) {\n methods = options.methods.join(','); // .methods is an array, so turn it into a string\n }\n return {\n key: 'Access-Control-Allow-Methods',\n value: methods\n };\n }\n\n function configureCredentials(options) {\n if (options.credentials === true) {\n return {\n key: 'Access-Control-Allow-Credentials',\n value: 'true'\n };\n }\n return null;\n }\n\n function configureAllowedHeaders(options, req) {\n var allowedHeaders = options.allowedHeaders || options.headers;\n var headers = [];\n\n if (!allowedHeaders) {\n allowedHeaders = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers\n headers.push([{\n key: 'Vary',\n value: 'Access-Control-Request-Headers'\n }]);\n } else if (allowedHeaders.join) {\n allowedHeaders = allowedHeaders.join(','); // .headers is an array, so turn it into a string\n }\n if (allowedHeaders && allowedHeaders.length) {\n headers.push([{\n key: 'Access-Control-Allow-Headers',\n value: allowedHeaders\n }]);\n }\n\n return headers;\n }\n\n function configureExposedHeaders(options) {\n var headers = options.exposedHeaders;\n if (!headers) {\n return null;\n } else if (headers.join) {\n headers = headers.join(','); // .headers is an array, so turn it into a string\n }\n if (headers && headers.length) {\n return {\n key: 'Access-Control-Expose-Headers',\n value: headers\n };\n }\n return null;\n }\n\n function configureMaxAge(options) {\n var maxAge = (typeof options.maxAge === 'number' || options.maxAge) && options.maxAge.toString()\n if (maxAge && maxAge.length) {\n return {\n key: 'Access-Control-Max-Age',\n value: maxAge\n };\n }\n return null;\n }\n\n function applyHeaders(headers, res) {\n for (var i = 0, n = headers.length; i < n; i++) {\n var header = headers[i];\n if (header) {\n if (Array.isArray(header)) {\n applyHeaders(header, res);\n } else if (header.key === 'Vary' && header.value) {\n vary(res, header.value);\n } else if (header.value) {\n res.setHeader(header.key, header.value);\n }\n }\n }\n }\n\n function cors(options, req, res, next) {\n var headers = [],\n method = req.method && req.method.toUpperCase && req.method.toUpperCase();\n\n if (method === 'OPTIONS') {\n // preflight\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureMethods(options, req));\n headers.push(configureAllowedHeaders(options, req));\n headers.push(configureMaxAge(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n\n if (options.preflightContinue) {\n next();\n } else {\n // Safari (and potentially other browsers) need content-length 0,\n // for 204 or they just hang waiting for a body\n res.statusCode = options.optionsSuccessStatus;\n res.setHeader('Content-Length', '0');\n res.end();\n }\n } else {\n // actual response\n headers.push(configureOrigin(options, req));\n headers.push(configureCredentials(options, req));\n headers.push(configureExposedHeaders(options, req));\n applyHeaders(headers, res);\n next();\n }\n }\n\n function middlewareWrapper(o) {\n // if options are static (either via defaults or custom options passed in), wrap in a function\n var optionsCallback = null;\n if (typeof o === 'function') {\n optionsCallback = o;\n } else {\n optionsCallback = function (req, cb) {\n cb(null, o);\n };\n }\n\n return function corsMiddleware(req, res, next) {\n optionsCallback(req, function (err, options) {\n if (err) {\n next(err);\n } else {\n var corsOptions = assign({}, defaults, options);\n var originCallback = null;\n if (corsOptions.origin && typeof corsOptions.origin === 'function') {\n originCallback = corsOptions.origin;\n } else if (corsOptions.origin) {\n originCallback = function (origin, cb) {\n cb(null, corsOptions.origin);\n };\n }\n\n if (originCallback) {\n originCallback(req.headers.origin, function (err2, origin) {\n if (err2 || !origin) {\n next(err2);\n } else {\n corsOptions.origin = origin;\n cors(corsOptions, req, res, next);\n }\n });\n } else {\n next();\n }\n }\n });\n };\n }\n\n // can pass either an options hash, an options delegate, or nothing\n module.exports = middlewareWrapper;\n\n}());\n", "'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", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n", "module.exports = require('stream');\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", "// 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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\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}", "'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};", "\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 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// 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'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}", "// 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}", "// 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 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", "\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n exports.blob = false;\n}\nelse {\n var buffer = new ArrayBuffer(0);\n try {\n exports.blob = new Blob([buffer], {\n type: \"application/zip\"\n }).size === 0;\n }\n catch (e) {\n try {\n var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n var builder = new Builder();\n builder.append(buffer);\n exports.blob = builder.getBlob(\"application/zip\").size === 0;\n }\n catch (e) {\n exports.blob = false;\n }\n }\n}\n\ntry {\n exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n exports.nodestream = false;\n}\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n var output = [];\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0, len = input.length, remainingBytes = len;\n\n var isArray = utils.getTypeOf(input) !== \"string\";\n while (i < input.length) {\n remainingBytes = len - i;\n\n if (!isArray) {\n chr1 = input.charCodeAt(i++);\n chr2 = i < len ? input.charCodeAt(i++) : 0;\n chr3 = i < len ? input.charCodeAt(i++) : 0;\n } else {\n chr1 = input[i++];\n chr2 = i < len ? input[i++] : 0;\n chr3 = i < len ? input[i++] : 0;\n }\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n }\n\n return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0, resultIndex = 0;\n\n var dataUrlPrefix = \"data:\";\n\n if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n // This is a common error: people give a data url\n // (data:image/png;base64,iVBOR...) with a {base64: true} and\n // wonders why things don't work.\n // We can detect that the string input looks like a data url but we\n // *can't* be sure it is one: removing everything up to the comma would\n // be too dangerous.\n throw new Error(\"Invalid base64 input, it looks like a data url.\");\n }\n\n input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n var totalLength = input.length * 3 / 4;\n if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error(\"Invalid base64 input, bad content length.\");\n }\n var output;\n if (support.uint8array) {\n output = new Uint8Array(totalLength|0);\n } else {\n output = new Array(totalLength|0);\n }\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output[resultIndex++] = chr1;\n\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n\n }\n\n return output;\n};\n", "\"use strict\";\n\nmodule.exports = {\n /**\n * True if this is running in Nodejs, will be undefined in a browser.\n * In a browser, browserify won't include this file and the whole module\n * will be resolved an empty object.\n */\n isNode : typeof Buffer !== \"undefined\",\n /**\n * Create a new nodejs Buffer from an existing content.\n * @param {Object} data the data to pass to the constructor.\n * @param {String} encoding the encoding to use.\n * @return {Buffer} a new Buffer.\n */\n newBufferFrom: function(data, encoding) {\n if (Buffer.from && Buffer.from !== Uint8Array.from) {\n return Buffer.from(data, encoding);\n } else {\n if (typeof data === \"number\") {\n // Safeguard for old Node.js versions. On newer versions,\n // Buffer.from(number) / Buffer(number, encoding) already throw.\n throw new Error(\"The \\\"data\\\" argument must not be a number\");\n }\n return new Buffer(data, encoding);\n }\n },\n /**\n * Create a new nodejs Buffer with the specified size.\n * @param {Integer} size the size of the buffer.\n * @return {Buffer} a new Buffer.\n */\n allocBuffer: function (size) {\n if (Buffer.alloc) {\n return Buffer.alloc(size);\n } else {\n var buf = new Buffer(size);\n buf.fill(0);\n return buf;\n }\n },\n /**\n * Find out if an object is a Buffer.\n * @param {Object} b the object to test.\n * @return {Boolean} true if the object is a Buffer, false otherwise.\n */\n isBuffer : function(b){\n return Buffer.isBuffer(b);\n },\n\n isStream : function (obj) {\n return obj &&\n typeof obj.on === \"function\" &&\n typeof obj.pause === \"function\" &&\n typeof obj.resume === \"function\";\n }\n};\n", "'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\nif (process.browser) {\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n} else {\n scheduleDrain = function () {\n process.nextTick(nextTick);\n };\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n", "'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n/* istanbul ignore else */\nif (!process.browser) {\n // in which we actually take advantage of JS scoping\n var UNHANDLED = ['UNHANDLED'];\n}\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('resolver must be a function');\n }\n this.state = PENDING;\n this.queue = [];\n this.outcome = void 0;\n /* istanbul ignore else */\n if (!process.browser) {\n this.handled = UNHANDLED;\n }\n if (resolver !== INTERNAL) {\n safelyResolveThenable(this, resolver);\n }\n}\n\nPromise.prototype.finally = function (callback) {\n if (typeof callback !== 'function') {\n return this;\n }\n var p = this.constructor;\n return this.then(resolve, reject);\n\n function resolve(value) {\n function yes () {\n return value;\n }\n return p.resolve(callback()).then(yes);\n }\n function reject(reason) {\n function no () {\n throw reason;\n }\n return p.resolve(callback()).then(no);\n }\n};\nPromise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n typeof onRejected !== 'function' && this.state === REJECTED) {\n return this;\n }\n var promise = new this.constructor(INTERNAL);\n /* istanbul ignore else */\n if (!process.browser) {\n if (this.handled === UNHANDLED) {\n this.handled = null;\n }\n }\n if (this.state !== PENDING) {\n var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n unwrap(promise, resolver, this.outcome);\n } else {\n this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n }\n\n return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n this.promise = promise;\n if (typeof onFulfilled === 'function') {\n this.onFulfilled = onFulfilled;\n this.callFulfilled = this.otherCallFulfilled;\n }\n if (typeof onRejected === 'function') {\n this.onRejected = onRejected;\n this.callRejected = this.otherCallRejected;\n }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n immediate(function () {\n var returnValue;\n try {\n returnValue = func(value);\n } catch (e) {\n return handlers.reject(promise, e);\n }\n if (returnValue === promise) {\n handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n } else {\n handlers.resolve(promise, returnValue);\n }\n });\n}\n\nhandlers.resolve = function (self, value) {\n var result = tryCatch(getThen, value);\n if (result.status === 'error') {\n return handlers.reject(self, result.value);\n }\n var thenable = result.value;\n\n if (thenable) {\n safelyResolveThenable(self, thenable);\n } else {\n self.state = FULFILLED;\n self.outcome = value;\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callFulfilled(value);\n }\n }\n return self;\n};\nhandlers.reject = function (self, error) {\n self.state = REJECTED;\n self.outcome = error;\n /* istanbul ignore else */\n if (!process.browser) {\n if (self.handled === UNHANDLED) {\n immediate(function () {\n if (self.handled === UNHANDLED) {\n process.emit('unhandledRejection', error, self);\n }\n });\n }\n }\n var i = -1;\n var len = self.queue.length;\n while (++i < len) {\n self.queue[i].callRejected(error);\n }\n return self;\n};\n\nfunction getThen(obj) {\n // Make sure we only access the accessor once as required by the spec\n var then = obj && obj.then;\n if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n return function appyThen() {\n then.apply(obj, arguments);\n };\n }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n // Either fulfill, reject or reject with error\n var called = false;\n function onError(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.reject(self, value);\n }\n\n function onSuccess(value) {\n if (called) {\n return;\n }\n called = true;\n handlers.resolve(self, value);\n }\n\n function tryToUnwrap() {\n thenable(onSuccess, onError);\n }\n\n var result = tryCatch(tryToUnwrap);\n if (result.status === 'error') {\n onError(result.value);\n }\n}\n\nfunction tryCatch(func, value) {\n var out = {};\n try {\n out.value = func(value);\n out.status = 'success';\n } catch (e) {\n out.status = 'error';\n out.value = e;\n }\n return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n if (value instanceof this) {\n return value;\n }\n return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n var promise = new this(INTERNAL);\n return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var values = new Array(len);\n var resolved = 0;\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n allResolver(iterable[i], i);\n }\n return promise;\n function allResolver(value, i) {\n self.resolve(value).then(resolveFromAll, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n function resolveFromAll(outValue) {\n values[i] = outValue;\n if (++resolved === len && !called) {\n called = true;\n handlers.resolve(promise, values);\n }\n }\n }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n var self = this;\n if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n return this.reject(new TypeError('must be an array'));\n }\n\n var len = iterable.length;\n var called = false;\n if (!len) {\n return this.resolve([]);\n }\n\n var i = -1;\n var promise = new this(INTERNAL);\n\n while (++i < len) {\n resolver(iterable[i]);\n }\n return promise;\n function resolver(value) {\n self.resolve(value).then(function (response) {\n if (!called) {\n called = true;\n handlers.resolve(promise, response);\n }\n }, function (error) {\n if (!called) {\n called = true;\n handlers.reject(promise, error);\n }\n });\n }\n}\n", "\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n ES6Promise = Promise;\n} else {\n ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n Promise: ES6Promise\n};\n", "(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6\u20138\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", "\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n var result = null;\n if (support.uint8array) {\n result = new Uint8Array(str.length);\n } else {\n result = new Array(str.length);\n }\n return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n exports.checkSupport(\"blob\");\n\n try {\n // Blob constructor\n return new Blob([part], {\n type: type\n });\n }\n catch (e) {\n\n try {\n // deprecated, browser only, old way\n var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n var builder = new Builder();\n builder.append(part);\n return builder.getBlob(type);\n }\n catch (e) {\n\n // well, fuck ?!\n throw new Error(\"Bug : can't construct the Blob.\");\n }\n }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n for (var i = 0; i < str.length; ++i) {\n array[i] = str.charCodeAt(i) & 0xFF;\n }\n return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n /**\n * Transform an array of int into a string, chunk by chunk.\n * See the performances notes on arrayLikeToString.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @param {String} type the type of the array.\n * @param {Integer} chunk the chunk size.\n * @return {String} the resulting string.\n * @throws Error if the chunk is too big for the stack.\n */\n stringifyByChunk: function(array, type, chunk) {\n var result = [], k = 0, len = array.length;\n // shortcut\n if (len <= chunk) {\n return String.fromCharCode.apply(null, array);\n }\n while (k < len) {\n if (type === \"array\" || type === \"nodebuffer\") {\n result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n }\n else {\n result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n }\n k += chunk;\n }\n return result.join(\"\");\n },\n /**\n * Call String.fromCharCode on every item in the array.\n * This is the naive implementation, which generate A LOT of intermediate string.\n * This should be used when everything else fail.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\n stringifyByChar: function(array){\n var resultStr = \"\";\n for(var i = 0; i < array.length; i++) {\n resultStr += String.fromCharCode(array[i]);\n }\n return resultStr;\n },\n applyCanBeUsed : {\n /**\n * true if the browser accepts to use String.fromCharCode on Uint8Array\n */\n uint8array : (function () {\n try {\n return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n } catch (e) {\n return false;\n }\n })(),\n /**\n * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n */\n nodebuffer : (function () {\n try {\n return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n } catch (e) {\n return false;\n }\n })()\n }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n // Performances notes :\n // --------------------\n // String.fromCharCode.apply(null, array) is the fastest, see\n // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n // but the stack is limited (and we can get huge arrays !).\n //\n // result += String.fromCharCode(array[i]); generate too many strings !\n //\n // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n // TODO : we now have workers that split the work. Do we still need that ?\n var chunk = 65536,\n type = exports.getTypeOf(array),\n canUseApply = true;\n if (type === \"uint8array\") {\n canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n } else if (type === \"nodebuffer\") {\n canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n }\n\n if (canUseApply) {\n while (chunk > 1) {\n try {\n return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n } catch (e) {\n chunk = Math.floor(chunk / 2);\n }\n }\n }\n\n // no apply or chunk error : slow and painful algorithm\n // default browser on android 4.*\n return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n for (var i = 0; i < arrayFrom.length; i++) {\n arrayTo[i] = arrayFrom[i];\n }\n return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n \"string\": identity,\n \"array\": function(input) {\n return stringToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"string\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return stringToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": function(input) {\n return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n }\n};\n\n// array to ?\ntransform[\"array\"] = {\n \"string\": arrayLikeToString,\n \"array\": identity,\n \"arraybuffer\": function(input) {\n return (new Uint8Array(input)).buffer;\n },\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(input);\n }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n \"string\": function(input) {\n return arrayLikeToString(new Uint8Array(input));\n },\n \"array\": function(input) {\n return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n },\n \"arraybuffer\": identity,\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n },\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(new Uint8Array(input));\n }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return input.buffer;\n },\n \"uint8array\": identity,\n \"nodebuffer\": function(input) {\n return nodejsUtils.newBufferFrom(input);\n }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n },\n \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n if (!input) {\n // undefined, null, etc\n // an empty string won't harm.\n input = \"\";\n }\n if (!outputType) {\n return input;\n }\n exports.checkSupport(outputType);\n var inputType = exports.getTypeOf(input);\n var result = transform[inputType][outputType](input);\n return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n var parts = path.split(\"/\");\n var result = [];\n for (var index = 0; index < parts.length; index++) {\n var part = parts[index];\n // Allow the first and last component to be empty for trailing slashes.\n if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n continue;\n } else if (part === \"..\") {\n result.pop();\n } else {\n result.push(part);\n }\n }\n return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n if (typeof input === \"string\") {\n return \"string\";\n }\n if (Object.prototype.toString.call(input) === \"[object Array]\") {\n return \"array\";\n }\n if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n return \"nodebuffer\";\n }\n if (support.uint8array && input instanceof Uint8Array) {\n return \"uint8array\";\n }\n if (support.arraybuffer && input instanceof ArrayBuffer) {\n return \"arraybuffer\";\n }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n var supported = support[type.toLowerCase()];\n if (!supported) {\n throw new Error(type + \" is not supported by this platform\");\n }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n var res = \"\",\n code, i;\n for (i = 0; i < (str || \"\").length; i++) {\n code = str.charCodeAt(i);\n res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n }\n return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n setImmediate(function () {\n callback.apply(self || null, args || []);\n });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n var Obj = function() {};\n Obj.prototype = superCtor.prototype;\n ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n var result = {}, i, attr;\n for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n for (attr in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n result[attr] = arguments[i][attr];\n }\n }\n }\n return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n // if inputData is already a promise, this flatten it.\n var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n if (isBlob && typeof FileReader !== \"undefined\") {\n return new external.Promise(function (resolve, reject) {\n var reader = new FileReader();\n\n reader.onload = function(e) {\n resolve(e.target.result);\n };\n reader.onerror = function(e) {\n reject(e.target.error);\n };\n reader.readAsArrayBuffer(data);\n });\n } else {\n return data;\n }\n });\n\n return promise.then(function(data) {\n var dataType = exports.getTypeOf(data);\n\n if (!dataType) {\n return external.Promise.reject(\n new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n );\n }\n // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n if (dataType === \"arraybuffer\") {\n data = exports.transformTo(\"uint8array\", data);\n } else if (dataType === \"string\") {\n if (isBase64) {\n data = base64.decode(data);\n }\n else if (isBinary) {\n // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n if (isOptimizedBinaryString !== true) {\n // this is a string, not in a base64 format.\n // Be sure that this is a correct \"binary string\"\n data = string2binary(data);\n }\n }\n }\n return data;\n });\n};\n", "\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n // the name of the worker\n this.name = name || \"default\";\n // an object containing metadata about the workers chain\n this.streamInfo = {};\n // an error which happened when the worker was paused\n this.generatedError = null;\n // an object containing metadata to be merged by this worker into the general metadata\n this.extraStreamInfo = {};\n // true if the stream is paused (and should not do anything), false otherwise\n this.isPaused = true;\n // true if the stream is finished (and should not do anything), false otherwise\n this.isFinished = false;\n // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n this.isLocked = false;\n // the event listeners\n this._listeners = {\n \"data\":[],\n \"end\":[],\n \"error\":[]\n };\n // the previous worker, if any\n this.previous = null;\n}\n\nGenericWorker.prototype = {\n /**\n * Push a chunk to the next workers.\n * @param {Object} chunk the chunk to push\n */\n push : function (chunk) {\n this.emit(\"data\", chunk);\n },\n /**\n * End the stream.\n * @return {Boolean} true if this call ended the worker, false otherwise.\n */\n end : function () {\n if (this.isFinished) {\n return false;\n }\n\n this.flush();\n try {\n this.emit(\"end\");\n this.cleanUp();\n this.isFinished = true;\n } catch (e) {\n this.emit(\"error\", e);\n }\n return true;\n },\n /**\n * End the stream with an error.\n * @param {Error} e the error which caused the premature end.\n * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n */\n error : function (e) {\n if (this.isFinished) {\n return false;\n }\n\n if(this.isPaused) {\n this.generatedError = e;\n } else {\n this.isFinished = true;\n\n this.emit(\"error\", e);\n\n // in the workers chain exploded in the middle of the chain,\n // the error event will go downward but we also need to notify\n // workers upward that there has been an error.\n if(this.previous) {\n this.previous.error(e);\n }\n\n this.cleanUp();\n }\n return true;\n },\n /**\n * Add a callback on an event.\n * @param {String} name the name of the event (data, end, error)\n * @param {Function} listener the function to call when the event is triggered\n * @return {GenericWorker} the current object for chainability\n */\n on : function (name, listener) {\n this._listeners[name].push(listener);\n return this;\n },\n /**\n * Clean any references when a worker is ending.\n */\n cleanUp : function () {\n this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n this._listeners = [];\n },\n /**\n * Trigger an event. This will call registered callback with the provided arg.\n * @param {String} name the name of the event (data, end, error)\n * @param {Object} arg the argument to call the callback with.\n */\n emit : function (name, arg) {\n if (this._listeners[name]) {\n for(var i = 0; i < this._listeners[name].length; i++) {\n this._listeners[name][i].call(this, arg);\n }\n }\n },\n /**\n * Chain a worker with an other.\n * @param {Worker} next the worker receiving events from the current one.\n * @return {worker} the next worker for chainability\n */\n pipe : function (next) {\n return next.registerPrevious(this);\n },\n /**\n * Same as `pipe` in the other direction.\n * Using an API with `pipe(next)` is very easy.\n * Implementing the API with the point of view of the next one registering\n * a source is easier, see the ZipFileWorker.\n * @param {Worker} previous the previous worker, sending events to this one\n * @return {Worker} the current worker for chainability\n */\n registerPrevious : function (previous) {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n\n // sharing the streamInfo...\n this.streamInfo = previous.streamInfo;\n // ... and adding our own bits\n this.mergeStreamInfo();\n this.previous = previous;\n var self = this;\n previous.on(\"data\", function (chunk) {\n self.processChunk(chunk);\n });\n previous.on(\"end\", function () {\n self.end();\n });\n previous.on(\"error\", function (e) {\n self.error(e);\n });\n return this;\n },\n /**\n * Pause the stream so it doesn't send events anymore.\n * @return {Boolean} true if this call paused the worker, false otherwise.\n */\n pause : function () {\n if(this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = true;\n\n if(this.previous) {\n this.previous.pause();\n }\n return true;\n },\n /**\n * Resume a paused stream.\n * @return {Boolean} true if this call resumed the worker, false otherwise.\n */\n resume : function () {\n if(!this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = false;\n\n // if true, the worker tried to resume but failed\n var withError = false;\n if(this.generatedError) {\n this.error(this.generatedError);\n withError = true;\n }\n if(this.previous) {\n this.previous.resume();\n }\n\n return !withError;\n },\n /**\n * Flush any remaining bytes as the stream is ending.\n */\n flush : function () {},\n /**\n * Process a chunk. This is usually the method overridden.\n * @param {Object} chunk the chunk to process.\n */\n processChunk : function(chunk) {\n this.push(chunk);\n },\n /**\n * Add a key/value to be added in the workers chain streamInfo once activated.\n * @param {String} key the key to use\n * @param {Object} value the associated value\n * @return {Worker} the current worker for chainability\n */\n withStreamInfo : function (key, value) {\n this.extraStreamInfo[key] = value;\n this.mergeStreamInfo();\n return this;\n },\n /**\n * Merge this worker's streamInfo into the chain's streamInfo.\n */\n mergeStreamInfo : function () {\n for(var key in this.extraStreamInfo) {\n if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n continue;\n }\n this.streamInfo[key] = this.extraStreamInfo[key];\n }\n },\n\n /**\n * Lock the stream to prevent further updates on the workers chain.\n * After calling this method, all calls to pipe will fail.\n */\n lock: function () {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n this.isLocked = true;\n if (this.previous) {\n this.previous.lock();\n }\n },\n\n /**\n *\n * Pretty print the workers chain.\n */\n toString : function () {\n var me = \"Worker \" + this.name;\n if (this.previous) {\n return this.previous + \" -> \" + me;\n } else {\n return me;\n }\n }\n};\n\nmodule.exports = GenericWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n if (support.uint8array) {\n buf = new Uint8Array(buf_len);\n } else {\n buf = new Array(buf_len);\n }\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n var i, out, c, c_len;\n var len = buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i<len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n // shrinkBuf(utf16buf, out)\n if (utf16buf.length !== out) {\n if(utf16buf.subarray) {\n utf16buf = utf16buf.subarray(0, out);\n } else {\n utf16buf.length = out;\n }\n }\n\n // return String.fromCharCode.apply(null, utf16buf);\n return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n if (support.nodebuffer) {\n return nodejsUtils.newBufferFrom(str, \"utf-8\");\n }\n\n return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n if (support.nodebuffer) {\n return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n }\n\n buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n GenericWorker.call(this, \"utf-8 decode\");\n // the last bytes if a chunk didn't end with a complete codepoint.\n this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n // 1st step, re-use what's left of the previous chunk\n if (this.leftOver && this.leftOver.length) {\n if(support.uint8array) {\n var previousData = data;\n data = new Uint8Array(previousData.length + this.leftOver.length);\n data.set(this.leftOver, 0);\n data.set(previousData, this.leftOver.length);\n } else {\n data = this.leftOver.concat(data);\n }\n this.leftOver = null;\n }\n\n var nextBoundary = utf8border(data);\n var usableData = data;\n if (nextBoundary !== data.length) {\n if (support.uint8array) {\n usableData = data.subarray(0, nextBoundary);\n this.leftOver = data.subarray(nextBoundary, data.length);\n } else {\n usableData = data.slice(0, nextBoundary);\n this.leftOver = data.slice(nextBoundary, data.length);\n }\n }\n\n this.push({\n data : exports.utf8decode(usableData),\n meta : chunk.meta\n });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n if(this.leftOver && this.leftOver.length) {\n this.push({\n data : exports.utf8decode(this.leftOver),\n meta : {}\n });\n this.leftOver = null;\n }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n this.push({\n data : exports.utf8encode(chunk.data),\n meta : chunk.meta\n });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n GenericWorker.call(this, \"ConvertWorker to \" + destType);\n this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n this.push({\n data : utils.transformTo(this.destType, chunk.data),\n meta : chunk.meta\n });\n};\nmodule.exports = ConvertWorker;\n", "\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n Readable.call(this, options);\n this._helper = helper;\n\n var self = this;\n helper.on(\"data\", function (data, meta) {\n if (!self.push(data)) {\n self._helper.pause();\n }\n if(updateCb) {\n updateCb(meta);\n }\n })\n .on(\"error\", function(e) {\n self.emit(\"error\", e);\n })\n .on(\"end\", function () {\n self.push(null);\n });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n try {\n NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n } catch(e) {\n // ignore\n }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n switch(type) {\n case \"blob\" :\n return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n case \"base64\" :\n return base64.encode(content);\n default :\n return utils.transformTo(type, content);\n }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n var i, index = 0, res = null, totalLength = 0;\n for(i = 0; i < dataArray.length; i++) {\n totalLength += dataArray[i].length;\n }\n switch(type) {\n case \"string\":\n return dataArray.join(\"\");\n case \"array\":\n return Array.prototype.concat.apply([], dataArray);\n case \"uint8array\":\n res = new Uint8Array(totalLength);\n for(i = 0; i < dataArray.length; i++) {\n res.set(dataArray[i], index);\n index += dataArray[i].length;\n }\n return res;\n case \"nodebuffer\":\n return Buffer.concat(dataArray);\n default:\n throw new Error(\"concat : unsupported type '\" + type + \"'\");\n }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n return new external.Promise(function (resolve, reject){\n var dataArray = [];\n var chunkType = helper._internalType,\n resultType = helper._outputType,\n mimeType = helper._mimeType;\n helper\n .on(\"data\", function (data, meta) {\n dataArray.push(data);\n if(updateCallback) {\n updateCallback(meta);\n }\n })\n .on(\"error\", function(err) {\n dataArray = [];\n reject(err);\n })\n .on(\"end\", function (){\n try {\n var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n dataArray = [];\n })\n .resume();\n });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n var internalType = outputType;\n switch(outputType) {\n case \"blob\":\n case \"arraybuffer\":\n internalType = \"uint8array\";\n break;\n case \"base64\":\n internalType = \"string\";\n break;\n }\n\n try {\n // the type used internally\n this._internalType = internalType;\n // the type used to output results\n this._outputType = outputType;\n // the mime type\n this._mimeType = mimeType;\n utils.checkSupport(internalType);\n this._worker = worker.pipe(new ConvertWorker(internalType));\n // the last workers can be rewired without issues but we need to\n // prevent any updates on previous workers.\n worker.lock();\n } catch(e) {\n this._worker = new GenericWorker(\"error\");\n this._worker.error(e);\n }\n}\n\nStreamHelper.prototype = {\n /**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {Function} updateCb the update callback.\n * @return Promise the promise for the accumulation.\n */\n accumulate : function (updateCb) {\n return accumulate(this, updateCb);\n },\n /**\n * Add a listener on an event triggered on a stream.\n * @param {String} evt the name of the event\n * @param {Function} fn the listener\n * @return {StreamHelper} the current helper.\n */\n on : function (evt, fn) {\n var self = this;\n\n if(evt === \"data\") {\n this._worker.on(evt, function (chunk) {\n fn.call(self, chunk.data, chunk.meta);\n });\n } else {\n this._worker.on(evt, function () {\n utils.delay(fn, arguments, self);\n });\n }\n return this;\n },\n /**\n * Resume the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n resume : function () {\n utils.delay(this._worker.resume, [], this._worker);\n return this;\n },\n /**\n * Pause the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n pause : function () {\n this._worker.pause();\n return this;\n },\n /**\n * Return a nodejs stream for this helper.\n * @param {Function} updateCb the update callback.\n * @return {NodejsStreamOutputAdapter} the nodejs stream.\n */\n toNodejsStream : function (updateCb) {\n utils.checkSupport(\"nodestream\");\n if (this._outputType !== \"nodebuffer\") {\n // an object stream containing blob/arraybuffer/uint8array/string\n // is strange and I don't know if it would be useful.\n // I you find this comment and have a good usecase, please open a\n // bug report !\n throw new Error(this._outputType + \" is not supported by this method\");\n }\n\n return new NodejsStreamOutputAdapter(this, {\n objectMode : this._outputType !== \"nodebuffer\"\n }, updateCb);\n }\n};\n\n\nmodule.exports = StreamHelper;\n", "\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n GenericWorker.call(this, \"DataWorker\");\n var self = this;\n this.dataIsReady = false;\n this.index = 0;\n this.max = 0;\n this.data = null;\n this.type = \"\";\n\n this._tickScheduled = false;\n\n dataP.then(function (data) {\n self.dataIsReady = true;\n self.data = data;\n self.max = data && data.length || 0;\n self.type = utils.getTypeOf(data);\n if(!self.isPaused) {\n self._tickAndRepeat();\n }\n }, function (e) {\n self.error(e);\n });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n GenericWorker.prototype.cleanUp.call(this);\n this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if (!this._tickScheduled && this.dataIsReady) {\n this._tickScheduled = true;\n utils.delay(this._tickAndRepeat, [], this);\n }\n return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n this._tickScheduled = false;\n if(this.isPaused || this.isFinished) {\n return;\n }\n this._tick();\n if(!this.isFinished) {\n utils.delay(this._tickAndRepeat, [], this);\n this._tickScheduled = true;\n }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n if(this.isPaused || this.isFinished) {\n return false;\n }\n\n var size = DEFAULT_BLOCK_SIZE;\n var data = null, nextIndex = Math.min(this.max, this.index + size);\n if (this.index >= this.max) {\n // EOF\n return this.end();\n } else {\n switch(this.type) {\n case \"string\":\n data = this.data.substring(this.index, nextIndex);\n break;\n case \"uint8array\":\n data = this.data.subarray(this.index, nextIndex);\n break;\n case \"array\":\n case \"nodebuffer\":\n data = this.data.slice(this.index, nextIndex);\n break;\n }\n this.index = nextIndex;\n return this.push({\n data : data,\n meta : {\n percent : this.max ? this.index / this.max * 100 : 0\n }\n });\n }\n};\n\nmodule.exports = DataWorker;\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable, end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n var t = crcTable, end = pos + len;\n\n crc = crc ^ (-1);\n\n for (var i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n if (typeof input === \"undefined\" || !input.length) {\n return 0;\n }\n\n var isArray = utils.getTypeOf(input) !== \"string\";\n\n if(isArray) {\n return crc32(crc|0, input, input.length, 0);\n } else {\n return crc32str(crc|0, input, input.length, 0);\n }\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n GenericWorker.call(this, \"Crc32Probe\");\n this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n this.propName = propName;\n this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n if(chunk) {\n var length = this.streamInfo[this.propName] || 0;\n this.streamInfo[this.propName] = length + chunk.data.length;\n }\n GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n", "\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n this.compressedSize = compressedSize;\n this.uncompressedSize = uncompressedSize;\n this.crc32 = crc32;\n this.compression = compression;\n this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n /**\n * Create a worker to get the uncompressed content.\n * @return {GenericWorker} the worker.\n */\n getContentWorker: function () {\n var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n .pipe(this.compression.uncompressWorker())\n .pipe(new DataLengthProbe(\"data_length\"));\n\n var that = this;\n worker.on(\"end\", function () {\n if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n throw new Error(\"Bug : uncompressed data size mismatch\");\n }\n });\n return worker;\n },\n /**\n * Create a worker to get the compressed content.\n * @return {GenericWorker} the worker.\n */\n getCompressedWorker: function () {\n return new DataWorker(external.Promise.resolve(this.compressedContent))\n .withStreamInfo(\"compressedSize\", this.compressedSize)\n .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n .withStreamInfo(\"crc32\", this.crc32)\n .withStreamInfo(\"compression\", this.compression)\n ;\n }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n return uncompressedWorker\n .pipe(new Crc32Probe())\n .pipe(new DataLengthProbe(\"uncompressedSize\"))\n .pipe(compression.compressWorker(compressionOptions))\n .pipe(new DataLengthProbe(\"compressedSize\"))\n .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n", "\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n this.name = name;\n this.dir = options.dir;\n this.date = options.date;\n this.comment = options.comment;\n this.unixPermissions = options.unixPermissions;\n this.dosPermissions = options.dosPermissions;\n\n this._data = data;\n this._dataBinary = options.binary;\n // keep only the compression\n this.options = {\n compression : options.compression,\n compressionOptions : options.compressionOptions\n };\n};\n\nZipObject.prototype = {\n /**\n * Create an internal stream for the content of this object.\n * @param {String} type the type of each chunk.\n * @return StreamHelper the stream.\n */\n internalStream: function (type) {\n var result = null, outputType = \"string\";\n try {\n if (!type) {\n throw new Error(\"No output type specified.\");\n }\n outputType = type.toLowerCase();\n var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n if (outputType === \"binarystring\" || outputType === \"text\") {\n outputType = \"string\";\n }\n result = this._decompressWorker();\n\n var isUnicodeString = !this._dataBinary;\n\n if (isUnicodeString && !askUnicodeString) {\n result = result.pipe(new utf8.Utf8EncodeWorker());\n }\n if (!isUnicodeString && askUnicodeString) {\n result = result.pipe(new utf8.Utf8DecodeWorker());\n }\n } catch (e) {\n result = new GenericWorker(\"error\");\n result.error(e);\n }\n\n return new StreamHelper(result, outputType, \"\");\n },\n\n /**\n * Prepare the content in the asked type.\n * @param {String} type the type of the result.\n * @param {Function} onUpdate a function to call on each internal update.\n * @return Promise the promise of the result.\n */\n async: function (type, onUpdate) {\n return this.internalStream(type).accumulate(onUpdate);\n },\n\n /**\n * Prepare the content as a nodejs stream.\n * @param {String} type the type of each chunk.\n * @param {Function} onUpdate a function to call on each internal update.\n * @return Stream the stream.\n */\n nodeStream: function (type, onUpdate) {\n return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n },\n\n /**\n * Return a worker for the compressed content.\n * @private\n * @param {Object} compression the compression object to use.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return Worker the worker.\n */\n _compressWorker: function (compression, compressionOptions) {\n if (\n this._data instanceof CompressedObject &&\n this._data.compression.magic === compression.magic\n ) {\n return this._data.getCompressedWorker();\n } else {\n var result = this._decompressWorker();\n if(!this._dataBinary) {\n result = result.pipe(new utf8.Utf8EncodeWorker());\n }\n return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n }\n },\n /**\n * Return a worker for the decompressed content.\n * @private\n * @return Worker the worker.\n */\n _decompressWorker : function () {\n if (this._data instanceof CompressedObject) {\n return this._data.getContentWorker();\n } else if (this._data instanceof GenericWorker) {\n return this._data;\n } else {\n return new DataWorker(this._data);\n }\n }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n", "'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n var len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n var n; /* iterates over tree elements */\n var bits; /* bit counter */\n var length; /* length value */\n var code; /* code value */\n var dist; /* distance index */\n var bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n", "'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n", "'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n", "// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n", "'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n", "'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n", "'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar c = require('./zlib/constants');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n", "// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = require('./lib/utils/common').assign;\n\nvar deflate = require('./lib/deflate');\nvar inflate = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n", "\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n GenericWorker.call(this, \"FlateWorker/\" + action);\n\n this._pako = null;\n this._pakoAction = action;\n this._pakoOptions = options;\n // the `meta` object from the last chunk received\n // this allow this worker to pass around metadata\n this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n this.meta = chunk.meta;\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n GenericWorker.prototype.flush.call(this);\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n GenericWorker.prototype.cleanUp.call(this);\n this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n this._pako = new pako[this._pakoAction]({\n raw: true,\n level: this._pakoOptions.level || -1 // default compression\n });\n var self = this;\n this._pako.onData = function(data) {\n self.push({\n data : data,\n meta : self.meta\n });\n };\n};\n\nexports.compressWorker = function (compressionOptions) {\n return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n return new FlateWorker(\"Inflate\", {});\n};\n", "\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n magic: \"\\x00\\x00\",\n compressWorker : function () {\n return new GenericWorker(\"STORE compression\");\n },\n uncompressWorker : function () {\n return new GenericWorker(\"STORE decompression\");\n }\n};\nexports.DEFLATE = require(\"./flate\");\n", "\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n var hex = \"\", i;\n for (i = 0; i < bytes; i++) {\n hex += String.fromCharCode(dec & 0xff);\n dec = dec >>> 8;\n }\n return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n * ^^^_________________________ setuid, setgid, sticky\n * ^^^^^^^^^________________ permissions\n * ^^^^^^^^^^______ not used ?\n * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n var result = unixPermissions;\n if (!unixPermissions) {\n // I can't use octal values in strict mode, hence the hexa.\n // 040775 => 0x41fd\n // 0100664 => 0x81b4\n result = isDir ? 0x41fd : 0x81b4;\n }\n return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0 Read-Only\n * Bit 1 Hidden\n * Bit 2 System\n * Bit 3 Volume Label\n * Bit 4 Directory\n * Bit 5 Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n // the dir flag is already set for compatibility\n return (dosPermissions || 0) & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n var file = streamInfo[\"file\"],\n compression = streamInfo[\"compression\"],\n useCustomEncoding = encodeFileName !== utf8.utf8encode,\n encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n comment = file.comment,\n encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n useUTF8ForComment = utfEncodedComment.length !== comment.length,\n dosTime,\n dosDate,\n extraFields = \"\",\n unicodePathExtraField = \"\",\n unicodeCommentExtraField = \"\",\n dir = file.dir,\n date = file.date;\n\n\n var dataInfo = {\n crc32 : 0,\n compressedSize : 0,\n uncompressedSize : 0\n };\n\n // if the content is streamed, the sizes/crc32 are only available AFTER\n // the end of the stream.\n if (!streamedContent || streamingEnded) {\n dataInfo.crc32 = streamInfo[\"crc32\"];\n dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n }\n\n var bitflag = 0;\n if (streamedContent) {\n // Bit 3: the sizes/crc32 are set to zero in the local header.\n // The correct values are put in the data descriptor immediately\n // following the compressed data.\n bitflag |= 0x0008;\n }\n if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n // Bit 11: Language encoding flag (EFS).\n bitflag |= 0x0800;\n }\n\n\n var extFileAttr = 0;\n var versionMadeBy = 0;\n if (dir) {\n // dos or unix, we set the dos dir flag\n extFileAttr |= 0x00010;\n }\n if(platform === \"UNIX\") {\n versionMadeBy = 0x031E; // UNIX, version 3.0\n extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n } else { // DOS or other, fallback to DOS\n versionMadeBy = 0x0014; // DOS, version 2.0\n extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n }\n\n // date\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n dosTime = date.getUTCHours();\n dosTime = dosTime << 6;\n dosTime = dosTime | date.getUTCMinutes();\n dosTime = dosTime << 5;\n dosTime = dosTime | date.getUTCSeconds() / 2;\n\n dosDate = date.getUTCFullYear() - 1980;\n dosDate = dosDate << 4;\n dosDate = dosDate | (date.getUTCMonth() + 1);\n dosDate = dosDate << 5;\n dosDate = dosDate | date.getUTCDate();\n\n if (useUTF8ForFileName) {\n // set the unicode path extra field. unzip needs at least one extra\n // field to correctly handle unicode path, so using the path is as good\n // as any other information. This could improve the situation with\n // other archive managers too.\n // This field is usually used without the utf8 flag, with a non\n // unicode path in the header (winrar, winzip). This helps (a bit)\n // with the messy Windows' default compressed folders feature but\n // breaks on p7zip which doesn't seek the unicode path extra field.\n // So for now, UTF-8 everywhere !\n unicodePathExtraField =\n // Version\n decToHex(1, 1) +\n // NameCRC32\n decToHex(crc32(encodedFileName), 4) +\n // UnicodeName\n utfEncodedFileName;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x70\" +\n // size\n decToHex(unicodePathExtraField.length, 2) +\n // content\n unicodePathExtraField;\n }\n\n if(useUTF8ForComment) {\n\n unicodeCommentExtraField =\n // Version\n decToHex(1, 1) +\n // CommentCRC32\n decToHex(crc32(encodedComment), 4) +\n // UnicodeName\n utfEncodedComment;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x63\" +\n // size\n decToHex(unicodeCommentExtraField.length, 2) +\n // content\n unicodeCommentExtraField;\n }\n\n var header = \"\";\n\n // version needed to extract\n header += \"\\x0A\\x00\";\n // general purpose bit flag\n header += decToHex(bitflag, 2);\n // compression method\n header += compression.magic;\n // last mod file time\n header += decToHex(dosTime, 2);\n // last mod file date\n header += decToHex(dosDate, 2);\n // crc-32\n header += decToHex(dataInfo.crc32, 4);\n // compressed size\n header += decToHex(dataInfo.compressedSize, 4);\n // uncompressed size\n header += decToHex(dataInfo.uncompressedSize, 4);\n // file name length\n header += decToHex(encodedFileName.length, 2);\n // extra field length\n header += decToHex(extraFields.length, 2);\n\n\n var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n var dirRecord = signature.CENTRAL_FILE_HEADER +\n // version made by (00: DOS)\n decToHex(versionMadeBy, 2) +\n // file header (common to file and central directory)\n header +\n // file comment length\n decToHex(encodedComment.length, 2) +\n // disk number start\n \"\\x00\\x00\" +\n // internal file attributes TODO\n \"\\x00\\x00\" +\n // external file attributes\n decToHex(extFileAttr, 4) +\n // relative offset of local header\n decToHex(offset, 4) +\n // file name\n encodedFileName +\n // extra field\n extraFields +\n // file comment\n encodedComment;\n\n return {\n fileRecord: fileRecord,\n dirRecord: dirRecord\n };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n var dirEnd = \"\";\n var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n // end of central dir signature\n dirEnd = signature.CENTRAL_DIRECTORY_END +\n // number of this disk\n \"\\x00\\x00\" +\n // number of the disk with the start of the central directory\n \"\\x00\\x00\" +\n // total number of entries in the central directory on this disk\n decToHex(entriesCount, 2) +\n // total number of entries in the central directory\n decToHex(entriesCount, 2) +\n // size of the central directory 4 bytes\n decToHex(centralDirLength, 4) +\n // offset of start of central directory with respect to the starting disk number\n decToHex(localDirLength, 4) +\n // .ZIP file comment length\n decToHex(encodedComment.length, 2) +\n // .ZIP file comment\n encodedComment;\n\n return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n var descriptor = \"\";\n descriptor = signature.DATA_DESCRIPTOR +\n // crc-32 4 bytes\n decToHex(streamInfo[\"crc32\"], 4) +\n // compressed size 4 bytes\n decToHex(streamInfo[\"compressedSize\"], 4) +\n // uncompressed size 4 bytes\n decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n GenericWorker.call(this, \"ZipFileWorker\");\n // The number of bytes written so far. This doesn't count accumulated chunks.\n this.bytesWritten = 0;\n // The comment of the zip file\n this.zipComment = comment;\n // The platform \"generating\" the zip file.\n this.zipPlatform = platform;\n // the function to encode file names and comments.\n this.encodeFileName = encodeFileName;\n // Should we stream the content of the files ?\n this.streamFiles = streamFiles;\n // If `streamFiles` is false, we will need to accumulate the content of the\n // files to calculate sizes / crc32 (and write them *before* the content).\n // This boolean indicates if we are accumulating chunks (it will change a lot\n // during the lifetime of this worker).\n this.accumulate = false;\n // The buffer receiving chunks when accumulating content.\n this.contentBuffer = [];\n // The list of generated directory records.\n this.dirRecords = [];\n // The offset (in bytes) from the beginning of the zip file for the current source.\n this.currentSourceOffset = 0;\n // The total number of entries in this zip file.\n this.entriesCount = 0;\n // the name of the file currently being added, null when handling the end of the zip file.\n // Used for the emitted metadata.\n this.currentFile = null;\n\n\n\n this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n var currentFilePercent = chunk.meta.percent || 0;\n var entriesCount = this.entriesCount;\n var remainingFiles = this._sources.length;\n\n if(this.accumulate) {\n this.contentBuffer.push(chunk);\n } else {\n this.bytesWritten += chunk.data.length;\n\n GenericWorker.prototype.push.call(this, {\n data : chunk.data,\n meta : {\n currentFile : this.currentFile,\n percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n }\n });\n }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n this.currentSourceOffset = this.bytesWritten;\n this.currentFile = streamInfo[\"file\"].name;\n\n var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n // don't stream folders (because they don't have any content)\n if(streamedContent) {\n var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n } else {\n // we need to wait for the whole file before pushing anything\n this.accumulate = true;\n }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n this.accumulate = false;\n var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n this.dirRecords.push(record.dirRecord);\n if(streamedContent) {\n // after the streamed file, we put data descriptors\n this.push({\n data : generateDataDescriptors(streamInfo),\n meta : {percent:100}\n });\n } else {\n // the content wasn't streamed, we need to push everything now\n // first the file record, then the content\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n while(this.contentBuffer.length) {\n this.push(this.contentBuffer.shift());\n }\n }\n this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n var localDirLength = this.bytesWritten;\n for(var i = 0; i < this.dirRecords.length; i++) {\n this.push({\n data : this.dirRecords[i],\n meta : {percent:100}\n });\n }\n var centralDirLength = this.bytesWritten - localDirLength;\n\n var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n this.push({\n data : dirEnd,\n meta : {percent:100}\n });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n this.previous = this._sources.shift();\n this.openedSource(this.previous.streamInfo);\n if (this.isPaused) {\n this.previous.pause();\n } else {\n this.previous.resume();\n }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n this._sources.push(previous);\n var self = this;\n\n previous.on(\"data\", function (chunk) {\n self.processChunk(chunk);\n });\n previous.on(\"end\", function () {\n self.closedSource(self.previous.streamInfo);\n if(self._sources.length) {\n self.prepareNextSource();\n } else {\n self.end();\n }\n });\n previous.on(\"error\", function (e) {\n self.error(e);\n });\n return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if (!this.previous && this._sources.length) {\n this.prepareNextSource();\n return true;\n }\n if (!this.previous && !this._sources.length && !this.generatedError) {\n this.end();\n return true;\n }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n var sources = this._sources;\n if(!GenericWorker.prototype.error.call(this, e)) {\n return false;\n }\n for(var i = 0; i < sources.length; i++) {\n try {\n sources[i].error(e);\n } catch(e) {\n // the `error` exploded, nothing to do\n }\n }\n return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n GenericWorker.prototype.lock.call(this);\n var sources = this._sources;\n for(var i = 0; i < sources.length; i++) {\n sources[i].lock();\n }\n};\n\nmodule.exports = ZipFileWorker;\n", "\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n var compressionName = fileCompression || zipCompression;\n var compression = compressions[compressionName];\n if (!compression) {\n throw new Error(compressionName + \" is not a valid compression method !\");\n }\n return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n var entriesCount = 0;\n try {\n\n zip.forEach(function (relativePath, file) {\n entriesCount++;\n var compression = getCompression(file.options.compression, options.compression);\n var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n var dir = file.dir, date = file.date;\n\n file._compressWorker(compression, compressionOptions)\n .withStreamInfo(\"file\", {\n name : relativePath,\n dir : dir,\n date : date,\n comment : file.comment || \"\",\n unixPermissions : file.unixPermissions,\n dosPermissions : file.dosPermissions\n })\n .pipe(zipFileWorker);\n });\n zipFileWorker.entriesCount = entriesCount;\n } catch (e) {\n zipFileWorker.error(e);\n }\n\n return zipFileWorker;\n};\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n this._upstreamEnded = false;\n this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n var self = this;\n this._stream = stream;\n stream.pause();\n stream\n .on(\"data\", function (chunk) {\n self.push({\n data: chunk,\n meta : {\n percent : 0\n }\n });\n })\n .on(\"error\", function (e) {\n if(self.isPaused) {\n this.generatedError = e;\n } else {\n self.error(e);\n }\n })\n .on(\"end\", function () {\n if(self.isPaused) {\n self._upstreamEnded = true;\n } else {\n self.end();\n }\n });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n if(!GenericWorker.prototype.pause.call(this)) {\n return false;\n }\n this._stream.pause();\n return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n if(!GenericWorker.prototype.resume.call(this)) {\n return false;\n }\n\n if(this._upstreamEnded) {\n this.end();\n } else {\n this._stream.resume();\n }\n\n return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n", "\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n // be sure sub folders exist\n var dataType = utils.getTypeOf(data),\n parent;\n\n\n /*\n * Correct options.\n */\n\n var o = utils.extend(originalOptions || {}, defaults);\n o.date = o.date || new Date();\n if (o.compression !== null) {\n o.compression = o.compression.toUpperCase();\n }\n\n if (typeof o.unixPermissions === \"string\") {\n o.unixPermissions = parseInt(o.unixPermissions, 8);\n }\n\n // UNX_IFDIR 0040000 see zipinfo.c\n if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n o.dir = true;\n }\n // Bit 4 Directory\n if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n o.dir = true;\n }\n\n if (o.dir) {\n name = forceTrailingSlash(name);\n }\n if (o.createFolders && (parent = parentFolder(name))) {\n folderAdd.call(this, parent, true);\n }\n\n var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n o.binary = !isUnicodeString;\n }\n\n\n var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n o.base64 = false;\n o.binary = true;\n data = \"\";\n o.compression = \"STORE\";\n dataType = \"string\";\n }\n\n /*\n * Convert content to fit.\n */\n\n var zipObjectContent = null;\n if (data instanceof CompressedObject || data instanceof GenericWorker) {\n zipObjectContent = data;\n } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n zipObjectContent = new NodejsStreamInputAdapter(name, data);\n } else {\n zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n }\n\n var object = new ZipObject(name, zipObjectContent, o);\n this.files[name] = object;\n /*\n TODO: we can't throw an exception because we have async promises\n (we can have a promise of a Date() for example) but returning a\n promise is useless because file(name, data) returns the JSZip\n object for chaining. Should we break that to allow the user\n to catch the error ?\n\n return external.Promise.resolve(zipObjectContent)\n .then(function () {\n return object;\n });\n */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n if (path.slice(-1) === \"/\") {\n path = path.substring(0, path.length - 1);\n }\n var lastSlash = path.lastIndexOf(\"/\");\n return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n // Check the name ends with a /\n if (path.slice(-1) !== \"/\") {\n path += \"/\"; // IE doesn't like substr(-1)\n }\n return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n * folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n name = forceTrailingSlash(name);\n\n // Does this folder already exist?\n if (!this.files[name]) {\n fileAdd.call(this, name, null, {\n dir: true,\n createFolders: createFolders\n });\n }\n return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param {Object} object Anything\n* @return {Boolean} true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n /**\n * @see loadAsync\n */\n load: function() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n\n\n /**\n * Call a callback function for each entry at this folder level.\n * @param {Function} cb the callback function:\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n */\n forEach: function(cb) {\n var filename, relativePath, file;\n // ignore warning about unwanted properties because this.files is a null prototype object\n /* eslint-disable-next-line guard-for-in */\n for (filename in this.files) {\n file = this.files[filename];\n relativePath = filename.slice(this.root.length, filename.length);\n if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n }\n }\n },\n\n /**\n * Filter nested files/folders with the specified function.\n * @param {Function} search the predicate to use :\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n * @return {Array} An array of matching elements.\n */\n filter: function(search) {\n var result = [];\n this.forEach(function (relativePath, entry) {\n if (search(relativePath, entry)) { // the file matches the function\n result.push(entry);\n }\n\n });\n return result;\n },\n\n /**\n * Add a file to the zip file, or search a file.\n * @param {string|RegExp} name The name of the file to add (if data is defined),\n * the name of the file to find (if no data) or a regex to match files.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded\n * @param {Object} o File options\n * @return {JSZip|Object|Array} this JSZip object (when adding a file),\n * a file (when searching by string) or an array of files (when searching by regex).\n */\n file: function(name, data, o) {\n if (arguments.length === 1) {\n if (isRegExp(name)) {\n var regexp = name;\n return this.filter(function(relativePath, file) {\n return !file.dir && regexp.test(relativePath);\n });\n }\n else { // text\n var obj = this.files[this.root + name];\n if (obj && !obj.dir) {\n return obj;\n } else {\n return null;\n }\n }\n }\n else { // more than one argument : we have data !\n name = this.root + name;\n fileAdd.call(this, name, data, o);\n }\n return this;\n },\n\n /**\n * Add a directory to the zip file, or search.\n * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.\n */\n folder: function(arg) {\n if (!arg) {\n return this;\n }\n\n if (isRegExp(arg)) {\n return this.filter(function(relativePath, file) {\n return file.dir && arg.test(relativePath);\n });\n }\n\n // else, name is a new folder\n var name = this.root + arg;\n var newFolder = folderAdd.call(this, name);\n\n // Allow chaining by returning a new object with this folder as the root\n var ret = this.clone();\n ret.root = newFolder.name;\n return ret;\n },\n\n /**\n * Delete a file, or a directory and all sub-files, from the zip\n * @param {string} name the name of the file to delete\n * @return {JSZip} this JSZip object\n */\n remove: function(name) {\n name = this.root + name;\n var file = this.files[name];\n if (!file) {\n // Look for any folders\n if (name.slice(-1) !== \"/\") {\n name += \"/\";\n }\n file = this.files[name];\n }\n\n if (file && !file.dir) {\n // file\n delete this.files[name];\n } else {\n // maybe a folder, delete recursively\n var kids = this.filter(function(relativePath, file) {\n return file.name.slice(0, name.length) === name;\n });\n for (var i = 0; i < kids.length; i++) {\n delete this.files[kids[i].name];\n }\n }\n\n return this;\n },\n\n /**\n * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n */\n generate: function() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n\n /**\n * Generate the complete zip file as an internal stream.\n * @param {Object} options the options to generate the zip file :\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {StreamHelper} the streamed zip file.\n */\n generateInternalStream: function(options) {\n var worker, opts = {};\n try {\n opts = utils.extend(options || {}, {\n streamFiles: false,\n compression: \"STORE\",\n compressionOptions : null,\n type: \"\",\n platform: \"DOS\",\n comment: null,\n mimeType: \"application/zip\",\n encodeFileName: utf8.utf8encode\n });\n\n opts.type = opts.type.toLowerCase();\n opts.compression = opts.compression.toUpperCase();\n\n // \"binarystring\" is preferred but the internals use \"string\".\n if(opts.type === \"binarystring\") {\n opts.type = \"string\";\n }\n\n if (!opts.type) {\n throw new Error(\"No output type specified.\");\n }\n\n utils.checkSupport(opts.type);\n\n // accept nodejs `process.platform`\n if(\n opts.platform === \"darwin\" ||\n opts.platform === \"freebsd\" ||\n opts.platform === \"linux\" ||\n opts.platform === \"sunos\"\n ) {\n opts.platform = \"UNIX\";\n }\n if (opts.platform === \"win32\") {\n opts.platform = \"DOS\";\n }\n\n var comment = opts.comment || this.comment || \"\";\n worker = generate.generateWorker(this, opts, comment);\n } catch (e) {\n worker = new GenericWorker(\"error\");\n worker.error(e);\n }\n return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n },\n /**\n * Generate the complete zip file asynchronously.\n * @see generateInternalStream\n */\n generateAsync: function(options, onUpdate) {\n return this.generateInternalStream(options).accumulate(onUpdate);\n },\n /**\n * Generate the complete zip file asynchronously.\n * @see generateInternalStream\n */\n generateNodeStream: function(options, onUpdate) {\n options = options || {};\n if (!options.type) {\n options.type = \"nodebuffer\";\n }\n return this.generateInternalStream(options).toNodejsStream(onUpdate);\n }\n};\nmodule.exports = out;\n", "\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n this.data = data; // type : see implementation\n this.length = data.length;\n this.index = 0;\n this.zero = 0;\n}\nDataReader.prototype = {\n /**\n * Check that the offset will not go too far.\n * @param {string} offset the additional offset to check.\n * @throws {Error} an Error if the offset is out of bounds.\n */\n checkOffset: function(offset) {\n this.checkIndex(this.index + offset);\n },\n /**\n * Check that the specified index will not be too far.\n * @param {string} newIndex the index to check.\n * @throws {Error} an Error if the index is out of bounds.\n */\n checkIndex: function(newIndex) {\n if (this.length < this.zero + newIndex || newIndex < 0) {\n throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n }\n },\n /**\n * Change the index.\n * @param {number} newIndex The new index.\n * @throws {Error} if the new index is out of the data.\n */\n setIndex: function(newIndex) {\n this.checkIndex(newIndex);\n this.index = newIndex;\n },\n /**\n * Skip the next n bytes.\n * @param {number} n the number of bytes to skip.\n * @throws {Error} if the new index is out of the data.\n */\n skip: function(n) {\n this.setIndex(this.index + n);\n },\n /**\n * Get the byte at the specified index.\n * @param {number} i the index to use.\n * @return {number} a byte.\n */\n byteAt: function() {\n // see implementations\n },\n /**\n * Get the next number with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {number} the corresponding number.\n */\n readInt: function(size) {\n var result = 0,\n i;\n this.checkOffset(size);\n for (i = this.index + size - 1; i >= this.index; i--) {\n result = (result << 8) + this.byteAt(i);\n }\n this.index += size;\n return result;\n },\n /**\n * Get the next string with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {string} the corresponding string.\n */\n readString: function(size) {\n return utils.transformTo(\"string\", this.readData(size));\n },\n /**\n * Get raw data without conversion, <size> bytes.\n * @param {number} size the number of bytes to read.\n * @return {Object} the raw data, implementation specific.\n */\n readData: function() {\n // see implementations\n },\n /**\n * Find the last occurrence of a zip signature (4 bytes).\n * @param {string} sig the signature to find.\n * @return {number} the index of the last occurrence, -1 if not found.\n */\n lastIndexOfSignature: function() {\n // see implementations\n },\n /**\n * Read the signature (4 bytes) at the current position and compare it with sig.\n * @param {string} sig the expected signature\n * @return {boolean} true if the signature matches, false otherwise.\n */\n readAndCheckSignature: function() {\n // see implementations\n },\n /**\n * Get the next date.\n * @return {Date} the date.\n */\n readDate: function() {\n var dostime = this.readInt(4);\n return new Date(Date.UTC(\n ((dostime >> 25) & 0x7f) + 1980, // year\n ((dostime >> 21) & 0x0f) - 1, // month\n (dostime >> 16) & 0x1f, // day\n (dostime >> 11) & 0x1f, // hour\n (dostime >> 5) & 0x3f, // minute\n (dostime & 0x1f) << 1)); // second\n }\n};\nmodule.exports = DataReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n DataReader.call(this, data);\n for(var i = 0; i < this.data.length; i++) {\n data[i] = data[i] & 0xFF;\n }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3);\n for (var i = this.length - 4; i >= 0; --i) {\n if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n return i - this.zero;\n }\n }\n\n return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3),\n data = this.readData(4);\n return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n return [];\n }\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = ArrayReader;\n", "\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n var data = this.readData(4);\n return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n this.checkOffset(size);\n // this will work because the constructor applied the \"& 0xff\" mask.\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = StringReader;\n", "\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n this.checkOffset(size);\n if(size === 0) {\n // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n return new Uint8Array(0);\n }\n var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = Uint8ArrayReader;\n", "\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n this.checkOffset(size);\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n};\nmodule.exports = NodeBufferReader;\n", "\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n var type = utils.getTypeOf(data);\n utils.checkSupport(type);\n if (type === \"string\" && !support.uint8array) {\n return new StringReader(data);\n }\n if (type === \"nodebuffer\") {\n return new NodeBufferReader(data);\n }\n if (support.uint8array) {\n return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n }\n return new ArrayReader(utils.transformTo(\"array\", data));\n};\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n for (var method in compressions) {\n if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n continue;\n }\n if (compressions[method].magic === compressionMethod) {\n return compressions[method];\n }\n }\n return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n this.options = options;\n this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n /**\n * say if the file is encrypted.\n * @return {boolean} true if the file is encrypted, false otherwise.\n */\n isEncrypted: function() {\n // bit 1 is set\n return (this.bitFlag & 0x0001) === 0x0001;\n },\n /**\n * say if the file has utf-8 filename/comment.\n * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n */\n useUTF8: function() {\n // bit 11 is set\n return (this.bitFlag & 0x0800) === 0x0800;\n },\n /**\n * Read the local part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readLocalPart: function(reader) {\n var compression, localExtraFieldsLength;\n\n // we already know everything from the central dir !\n // If the central dir data are false, we are doomed.\n // On the bright side, the local part is scary : zip64, data descriptors, both, etc.\n // The less data we get here, the more reliable this should be.\n // Let's skip the whole header and dash to the data !\n reader.skip(22);\n // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n // Strangely, the filename here is OK.\n // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n // the internet.\n //\n // I think I see the logic here : the central directory is used to display\n // content and the local directory is used to extract the files. Mixing / and \\\n // may be used to display \\ to windows users and use / when extracting the files.\n // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n this.fileNameLength = reader.readInt(2);\n localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n this.fileName = reader.readData(this.fileNameLength);\n reader.skip(localExtraFieldsLength);\n\n if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n }\n\n compression = findCompression(this.compressionMethod);\n if (compression === null) { // no compression found\n throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n }\n this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n },\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readCentralPart: function(reader) {\n this.versionMadeBy = reader.readInt(2);\n reader.skip(2);\n // this.versionNeeded = reader.readInt(2);\n this.bitFlag = reader.readInt(2);\n this.compressionMethod = reader.readString(2);\n this.date = reader.readDate();\n this.crc32 = reader.readInt(4);\n this.compressedSize = reader.readInt(4);\n this.uncompressedSize = reader.readInt(4);\n var fileNameLength = reader.readInt(2);\n this.extraFieldsLength = reader.readInt(2);\n this.fileCommentLength = reader.readInt(2);\n this.diskNumberStart = reader.readInt(2);\n this.internalFileAttributes = reader.readInt(2);\n this.externalFileAttributes = reader.readInt(4);\n this.localHeaderOffset = reader.readInt(4);\n\n if (this.isEncrypted()) {\n throw new Error(\"Encrypted zip are not supported\");\n }\n\n // will be read in the local part, see the comments there\n reader.skip(fileNameLength);\n this.readExtraFields(reader);\n this.parseZIP64ExtraField(reader);\n this.fileComment = reader.readData(this.fileCommentLength);\n },\n\n /**\n * Parse the external file attributes and get the unix/dos permissions.\n */\n processAttributes: function () {\n this.unixPermissions = null;\n this.dosPermissions = null;\n var madeBy = this.versionMadeBy >> 8;\n\n // Check if we have the DOS directory flag set.\n // We look for it in the DOS and UNIX permissions\n // but some unknown platform could set it as a compatibility flag.\n this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n if(madeBy === MADE_BY_DOS) {\n // first 6 bits (0 to 5)\n this.dosPermissions = this.externalFileAttributes & 0x3F;\n }\n\n if(madeBy === MADE_BY_UNIX) {\n this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n }\n\n // fail safe : if the name ends with a / it probably means a folder\n if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n this.dir = true;\n }\n },\n\n /**\n * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n * @param {DataReader} reader the reader to use.\n */\n parseZIP64ExtraField: function() {\n if (!this.extraFields[0x0001]) {\n return;\n }\n\n // should be something, preparing the extra reader\n var extraReader = readerFor(this.extraFields[0x0001].value);\n\n // I really hope that these 64bits integer can fit in 32 bits integer, because js\n // won't let us have more.\n if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n this.uncompressedSize = extraReader.readInt(8);\n }\n if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n this.compressedSize = extraReader.readInt(8);\n }\n if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n this.localHeaderOffset = extraReader.readInt(8);\n }\n if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n this.diskNumberStart = extraReader.readInt(4);\n }\n },\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readExtraFields: function(reader) {\n var end = reader.index + this.extraFieldsLength,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n\n if (!this.extraFields) {\n this.extraFields = {};\n }\n\n while (reader.index + 4 < end) {\n extraFieldId = reader.readInt(2);\n extraFieldLength = reader.readInt(2);\n extraFieldValue = reader.readData(extraFieldLength);\n\n this.extraFields[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n\n reader.setIndex(end);\n },\n /**\n * Apply an UTF8 transformation if needed.\n */\n handleUTF8: function() {\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n if (this.useUTF8()) {\n this.fileNameStr = utf8.utf8decode(this.fileName);\n this.fileCommentStr = utf8.utf8decode(this.fileComment);\n } else {\n var upath = this.findExtraFieldUnicodePath();\n if (upath !== null) {\n this.fileNameStr = upath;\n } else {\n // ASCII text or unsupported code page\n var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);\n this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n }\n\n var ucomment = this.findExtraFieldUnicodeComment();\n if (ucomment !== null) {\n this.fileCommentStr = ucomment;\n } else {\n // ASCII text or unsupported code page\n var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);\n this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n }\n }\n },\n\n /**\n * Find the unicode path declared in the extra field, if any.\n * @return {String} the unicode path, null otherwise.\n */\n findExtraFieldUnicodePath: function() {\n var upathField = this.extraFields[0x7075];\n if (upathField) {\n var extraReader = readerFor(upathField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the filename changed, this field is out of date.\n if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n }\n return null;\n },\n\n /**\n * Find the unicode comment declared in the extra field, if any.\n * @return {String} the unicode comment, null otherwise.\n */\n findExtraFieldUnicodeComment: function() {\n var ucommentField = this.extraFields[0x6375];\n if (ucommentField) {\n var extraReader = readerFor(ucommentField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the comment changed, this field is out of date.\n if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n }\n return null;\n }\n};\nmodule.exports = ZipEntry;\n", "\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n// class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n this.files = [];\n this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n /**\n * Check that the reader is on the specified signature.\n * @param {string} expectedSignature the expected signature.\n * @throws {Error} if it is an other signature.\n */\n checkSignature: function(expectedSignature) {\n if (!this.reader.readAndCheckSignature(expectedSignature)) {\n this.reader.index -= 4;\n var signature = this.reader.readString(4);\n throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n }\n },\n /**\n * Check if the given signature is at the given index.\n * @param {number} askedIndex the index to check.\n * @param {string} expectedSignature the signature to expect.\n * @return {boolean} true if the signature is here, false otherwise.\n */\n isSignature: function(askedIndex, expectedSignature) {\n var currentIndex = this.reader.index;\n this.reader.setIndex(askedIndex);\n var signature = this.reader.readString(4);\n var result = signature === expectedSignature;\n this.reader.setIndex(currentIndex);\n return result;\n },\n /**\n * Read the end of the central directory.\n */\n readBlockEndOfCentral: function() {\n this.diskNumber = this.reader.readInt(2);\n this.diskWithCentralDirStart = this.reader.readInt(2);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n this.centralDirRecords = this.reader.readInt(2);\n this.centralDirSize = this.reader.readInt(4);\n this.centralDirOffset = this.reader.readInt(4);\n\n this.zipCommentLength = this.reader.readInt(2);\n // warning : the encoding depends of the system locale\n // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n // On a windows machine, this field is encoded with the localized windows code page.\n var zipComment = this.reader.readData(this.zipCommentLength);\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n // To get consistent behavior with the generation part, we will assume that\n // this is utf8 encoded unless specified otherwise.\n var decodeContent = utils.transformTo(decodeParamType, zipComment);\n this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n },\n /**\n * Read the end of the Zip 64 central directory.\n * Not merged with the method readEndOfCentral :\n * The end of central can coexist with its Zip64 brother,\n * I don't want to read the wrong number of bytes !\n */\n readBlockZip64EndOfCentral: function() {\n this.zip64EndOfCentralSize = this.reader.readInt(8);\n this.reader.skip(4);\n // this.versionMadeBy = this.reader.readString(2);\n // this.versionNeeded = this.reader.readInt(2);\n this.diskNumber = this.reader.readInt(4);\n this.diskWithCentralDirStart = this.reader.readInt(4);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n this.centralDirRecords = this.reader.readInt(8);\n this.centralDirSize = this.reader.readInt(8);\n this.centralDirOffset = this.reader.readInt(8);\n\n this.zip64ExtensibleData = {};\n var extraDataSize = this.zip64EndOfCentralSize - 44,\n index = 0,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n while (index < extraDataSize) {\n extraFieldId = this.reader.readInt(2);\n extraFieldLength = this.reader.readInt(4);\n extraFieldValue = this.reader.readData(extraFieldLength);\n this.zip64ExtensibleData[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n },\n /**\n * Read the end of the Zip 64 central directory locator.\n */\n readBlockZip64EndOfCentralLocator: function() {\n this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n this.disksCount = this.reader.readInt(4);\n if (this.disksCount > 1) {\n throw new Error(\"Multi-volumes zip are not supported\");\n }\n },\n /**\n * Read the local files, based on the offset read in the central part.\n */\n readLocalFiles: function() {\n var i, file;\n for (i = 0; i < this.files.length; i++) {\n file = this.files[i];\n this.reader.setIndex(file.localHeaderOffset);\n this.checkSignature(sig.LOCAL_FILE_HEADER);\n file.readLocalPart(this.reader);\n file.handleUTF8();\n file.processAttributes();\n }\n },\n /**\n * Read the central directory.\n */\n readCentralDir: function() {\n var file;\n\n this.reader.setIndex(this.centralDirOffset);\n while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n file = new ZipEntry({\n zip64: this.zip64\n }, this.loadOptions);\n file.readCentralPart(this.reader);\n this.files.push(file);\n }\n\n if (this.centralDirRecords !== this.files.length) {\n if (this.centralDirRecords !== 0 && this.files.length === 0) {\n // We expected some records but couldn't find ANY.\n // This is really suspicious, as if something went wrong.\n throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n } else {\n // We found some records but not all.\n // Something is wrong but we got something for the user: no error here.\n // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n }\n }\n },\n /**\n * Read the end of central directory.\n */\n readEndOfCentral: function() {\n var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n if (offset < 0) {\n // Check if the content is a truncated zip or complete garbage.\n // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n // extractible zip for example) but it can give a good hint.\n // If an ajax request was used without responseType, we will also\n // get unreadable data.\n var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n if (isGarbage) {\n throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n } else {\n throw new Error(\"Corrupted zip: can't find end of central directory\");\n }\n\n }\n this.reader.setIndex(offset);\n var endOfCentralDirOffset = offset;\n this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n this.readBlockEndOfCentral();\n\n\n /* extract from the zip spec :\n 4) If one of the fields in the end of central directory\n record is too small to hold required data, the field\n should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n ZIP64 format record should be created.\n 5) The end of central directory record and the\n Zip64 end of central directory locator record must\n reside on the same disk when splitting or spanning\n an archive.\n */\n if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n this.zip64 = true;\n\n /*\n Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n all numbers as 64-bit double precision IEEE 754 floating point numbers.\n So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n */\n\n // should look for a zip64 EOCD locator\n offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n if (offset < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n this.readBlockZip64EndOfCentralLocator();\n\n // now the zip64 EOCD record\n if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n // console.warn(\"ZIP64 end of central directory not where expected.\");\n this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n }\n }\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n this.readBlockZip64EndOfCentral();\n }\n\n var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n if (this.zip64) {\n expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n }\n\n var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n if (extraBytes > 0) {\n // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n // The offsets seem wrong, but we have something at the specified offset.\n // So\u2026 we keep it.\n } else {\n // the offset is wrong, update the \"zero\" of the reader\n // this happens if data has been prepended (crx files for example)\n this.reader.zero = extraBytes;\n }\n } else if (extraBytes < 0) {\n throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n }\n },\n prepareReader: function(data) {\n this.reader = readerFor(data);\n },\n /**\n * Read a zip file and create ZipEntries.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n */\n load: function(data) {\n this.prepareReader(data);\n this.readEndOfCentral();\n this.readCentralDir();\n this.readLocalFiles();\n }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n", "\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n return new external.Promise(function (resolve, reject) {\n var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n worker.on(\"error\", function (e) {\n reject(e);\n })\n .on(\"end\", function () {\n if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n } else {\n resolve();\n }\n })\n .resume();\n });\n}\n\nmodule.exports = function (data, options) {\n var zip = this;\n options = utils.extend(options || {}, {\n base64: false,\n checkCRC32: false,\n optimizedBinaryString: false,\n createFolders: false,\n decodeFileName: utf8.utf8decode\n });\n\n if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n }\n\n return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n .then(function (data) {\n var zipEntries = new ZipEntries(options);\n zipEntries.load(data);\n return zipEntries;\n }).then(function checkCRC32(zipEntries) {\n var promises = [external.Promise.resolve(zipEntries)];\n var files = zipEntries.files;\n if (options.checkCRC32) {\n for (var i = 0; i < files.length; i++) {\n promises.push(checkEntryCRC32(files[i]));\n }\n }\n return external.Promise.all(promises);\n }).then(function addFiles(results) {\n var zipEntries = results.shift();\n var files = zipEntries.files;\n for (var i = 0; i < files.length; i++) {\n var input = files[i];\n\n var unsafeName = input.fileNameStr;\n var safeName = utils.resolve(input.fileNameStr);\n\n zip.file(safeName, input.decompressed, {\n binary: true,\n optimizedBinaryString: true,\n date: input.date,\n dir: input.dir,\n comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n unixPermissions: input.unixPermissions,\n dosPermissions: input.dosPermissions,\n createFolders: options.createFolders\n });\n if (!input.dir) {\n zip.file(safeName).unsafeOriginalName = unsafeName;\n }\n }\n if (zipEntries.zipComment.length) {\n zip.comment = zipEntries.zipComment;\n }\n\n return zip;\n });\n};\n", "\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n // if this constructor is used without `new`, it adds `new` before itself:\n if(!(this instanceof JSZip)) {\n return new JSZip();\n }\n\n if(arguments.length) {\n throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n }\n\n // object containing the files :\n // {\n // \"folder/\" : {...},\n // \"folder/data.txt\" : {...}\n // }\n // NOTE: we use a null prototype because we do not\n // want filenames like \"toString\" coming from a zip file\n // to overwrite methods and attributes in a normal Object.\n this.files = Object.create(null);\n\n this.comment = null;\n\n // Where we are in the hierarchy\n this.root = \"\";\n this.clone = function() {\n var newObj = new JSZip();\n for (var i in this) {\n if (typeof this[i] !== \"function\") {\n newObj[i] = this[i];\n }\n }\n return newObj;\n };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n", "\nimport fs from 'fs';\nimport path from 'path';\nimport express, { Request, Response } from 'express';\nimport cors from 'cors';\nimport { WorkerBuildStep, WorkerFileUpdate } from '../../common/workertypes';\nimport { ServerBuildEnv, TOOLS, findBestTool } from './buildenv';\n\n/*\n## Tool Server (not yet used)\n\n```sh\nnpm run server\nxattr -dr com.apple.quarantine llvm-mos/bin/* # macOS only\ncurl http://localhost:3009/test\ngo to: http://localhost:8000/?platform=c64&file=hello.c&tool=llvm-mos\n```\n*/\n\n////////////////////\n\nconst app = express();\n\napp.use(cors());\n\napp.use(express.json({ limit: 1024*1024 })); // limit 1 MB\n\napp.get('/info', (req: Request, res: Response) => {\n // send a list of supported tools\n res.json({ tools: TOOLS });\n});\n\napp.get('/test', async (req: Request, res: Response, next) => {\n // quick test of the build\n try {\n const updates: WorkerFileUpdate[] = [{ path: 'test.c', data: 'int main() { return 0; }' }];\n const buildStep: WorkerBuildStep = { tool: 'llvm-mos', platform: 'c64', files: ['test.c'] };\n const env = new ServerBuildEnv(SERVER_ROOT, 'test', TOOLS[0]);\n const result = await env.compileAndLink(buildStep, updates);\n res.json(result);\n } catch (err) {\n return next(err);\n }\n});\n\napp.post('/build', async (req: Request, res: Response, next) => {\n try {\n const updates: WorkerFileUpdate[] = req.body.updates;\n const buildStep: WorkerBuildStep = req.body.buildStep;\n const sessionID = req.body.sessionID;\n const bestTool = findBestTool(buildStep);\n const env = new ServerBuildEnv(SERVER_ROOT, sessionID, bestTool);\n const result = await env.compileAndLink(buildStep, updates);\n res.json(result);\n } catch (err) {\n return next(err);\n }\n});\n\n// Catch errors\napp.use((err: Error, req: Request, res: Response, next: Function) => {\n console.error(err.stack);\n res.status(500).send('Something broke!');\n});\n\n// Start the server\nconst port = 3009;\n\n/*{\n origin: [`http://localhost:${port}`, 'http://localhost:8000']\n}));*/\n\nconst SERVER_ROOT = process.env['_8BITWS_SERVER_ROOT'] || path.resolve('./server-root');\nconst SESSION_ROOT = path.join(SERVER_ROOT, 'sessions');\nif (!fs.existsSync(SESSION_ROOT)) {\n fs.mkdirSync(SESSION_ROOT);\n}\nprocess.chdir(SESSION_ROOT);\n\napp.listen(port, () => {\n console.log(`Server is listening on port ${port}`);\n});\n", "\nimport fs from 'fs';\nimport path from 'path';\nimport { spawn } from 'child_process';\nimport { CodeListingMap, WorkerBuildStep, WorkerError, WorkerErrorResult, WorkerFileUpdate, WorkerResult, isOutputResult } from '../../common/workertypes';\nimport { getBasePlatform, getRootBasePlatform, replaceAll } from '../../common/util';\nimport { BuildStep, makeErrorMatcher } from '../workermain';\nimport { parseObjDump } from './clang';\n\n\nconst LLVM_MOS_TOOL: ServerBuildTool = {\n name: 'llvm-mos',\n version: '',\n extensions: ['.c', '.cpp', '.s', '.S', '.C'],\n archs: ['6502'],\n platforms: ['atari8', 'c64', 'nes', 'pce', 'vcs'],\n platform_configs: {\n default: {\n binpath: 'llvm-mos/bin',\n command: 'mos-clang',\n args: ['-Os', '-g', '-D', '__8BITWORKSHOP__', '-o', '$OUTFILE', '$INFILES'],\n },\n debug: { // TODO\n binpath: 'llvm-mos/bin',\n command: 'llvm-objdump',\n args: ['-l', '-t', '$WORKDIR/a.out.elf', '>$WORKDIR/debug.out']\n },\n c64: {\n command: 'mos-c64-clang',\n },\n atari8: {\n command: 'mos-atari8-clang',\n },\n nes: {\n command: 'mos-nes-nrom-clang', // TODO\n libargs: ['-lneslib', '-lfamitone2']\n },\n pce: {\n command: 'mos-pce-clang', // TODO\n },\n vcs: {\n command: 'mos-atari2600-3e-clang', // TODO\n },\n }\n}\n\nexport function findBestTool(step: BuildStep) {\n if (!step?.tool) throw new Error('No tool specified');\n const [name, version] = step.tool.split('@');\n for (let tool of TOOLS) {\n if (tool.name === name && (!version || version === 'latest' || tool.version === version)) {\n return tool;\n }\n }\n throw new Error(`Tool not found: ${step.tool}`);\n}\n\nexport const TOOLS: ServerBuildTool[] = [\n Object.assign({}, LLVM_MOS_TOOL, { version: 'latest' }),\n];\n\ninterface ServerBuildTool {\n name: string;\n version: string;\n extensions: string[];\n archs: string[];\n platforms: string[];\n platform_configs: { [platform: string]: ServerBuildToolPlatformConfig };\n}\n\ninterface ServerBuildToolPlatformConfig {\n binpath?: string;\n command?: string;\n args?: string[];\n libargs?: string[];\n}\n\n\n\nexport class ServerBuildEnv {\n\n rootdir: string;\n sessionID: string;\n tool: ServerBuildTool;\n sessionDir: string;\n\n constructor(rootdir: string, sessionID: string, tool: ServerBuildTool) {\n this.rootdir = path.resolve(rootdir);\n this.sessionID = sessionID;\n this.tool = tool;\n // make sure sessionID is well-formed\n if (!sessionID.match(/^[a-zA-Z0-9_-]+$/)) {\n throw new Error(`Invalid sessionID: ${sessionID}`);\n }\n // create sessionID directory if it doesn't exist\n this.sessionDir = path.join(this.rootdir, 'sessions', sessionID);\n if (!fs.existsSync(this.sessionDir)) {\n fs.mkdirSync(this.sessionDir);\n }\n }\n\n async addFileUpdate(file: WorkerFileUpdate) {\n // make sure file.path contains no path components\n if (file.path.match(/[\\\\\\/]/)) {\n throw new Error(`Invalid file path: ${file.path}`);\n }\n await fs.promises.writeFile(path.join(this.sessionDir, file.path), file.data);\n }\n\n async build(step: WorkerBuildStep, platform?: string): Promise<WorkerResult> {\n // build config\n let platformID = platform || getRootBasePlatform(step.platform);\n let config = this.tool.platform_configs[platformID];\n if (!config) {\n throw new Error(`No config for platform ${platformID}`);\n }\n let defaultConfig = this.tool.platform_configs.default;\n if (!defaultConfig) {\n throw new Error(`No default config for tool ${this.tool.name}`);\n }\n config = Object.assign({}, defaultConfig, config); // combine configs\n // copy args\n let args = config.args.slice(0); //copy array\n let command = config.command;\n // replace $OUTFILE\n let outfile = path.join(this.sessionDir, 'a.out'); // TODO? a.out\n for (let i = 0; i < args.length; i++) {\n args[i] = args[i].replace(/\\$OUTFILE/g, outfile);\n args[i] = args[i].replace(/\\$WORKDIR/g, this.sessionDir);\n }\n // replace $INFILES with the list of input files\n // TODO\n let infiles = [];\n for (let i = 0; i < step.files.length; i++) {\n let f = step.files[i];\n for (let ext of this.tool.extensions) {\n if (f.endsWith(ext)) {\n infiles.push(path.join(this.sessionDir, f));\n break;\n }\n }\n }\n for (let i = 0; i < args.length; i++) {\n if (args[i] === '$INFILES') {\n args = args.slice(0, i).concat(infiles).concat(args.slice(i + 1));\n break;\n }\n }\n if (config.libargs) {\n args = args.concat(config.libargs);\n }\n console.log(`Running: ${command} ${args.join(' ')}`);\n // spawn after setting PATH env var\n // TODO\n let childProcess = spawn(command, args, {\n shell: true,\n cwd: this.rootdir,\n env: { PATH: path.join(this.rootdir, config.binpath)\n } });\n let outputData = '';\n let errorData = '';\n // TODO?\n childProcess.stdout.on('data', (data) => {\n outputData += data.toString();\n });\n childProcess.stderr.on('data', (data) => {\n errorData += data.toString();\n });\n return new Promise((resolve, reject) => {\n childProcess.on('close', async (code) => {\n if (code === 0) {\n if (platform === 'debug') {\n resolve(this.processDebugInfo(step));\n } else {\n resolve(this.processOutput(step));\n }\n } else {\n errorData = replaceAll(errorData, this.sessionDir, '');\n errorData = replaceAll(errorData, this.rootdir, '');\n // remove folder paths\n errorData = errorData.replace(/(\\/var\\/folders\\/.+?\\/).+?:/g, '');\n let errorResult = await this.processErrors(step, errorData);\n if (errorResult.errors.length === 0) {\n errorResult.errors.push({ line: 0, msg: `Build failed.\\n\\n${errorData}` });\n }\n resolve(errorResult);\n }\n });\n });\n }\n\n async processErrors(step: WorkerBuildStep, errorData: string): Promise<WorkerErrorResult> {\n let errors = [];\n // split errorData into lines\n let errorMatcher = makeErrorMatcher(errors, /([^:/]+):(\\d+):(\\d+):\\s*(.+)/, 2, 4, step.path, 1);\n for (let line of errorData.split('\\n')) {\n errorMatcher(line);\n }\n return { errors };\n }\n\n async processOutput(step: WorkerBuildStep): Promise<WorkerResult> {\n let outfile = path.join(this.sessionDir, 'a.out');\n let output = await fs.promises.readFile(outfile, { encoding: 'base64' });\n return { output };\n }\n\n async processDebugInfo(step: WorkerBuildStep): Promise<WorkerResult> {\n let dbgfile = path.join(this.sessionDir, 'debug.out');\n let dbglist = (await fs.promises.readFile(dbgfile)).toString();\n let { listings, symbolmap, segments } = parseObjDump(dbglist);\n return { output: [], listings, symbolmap, segments };\n }\n\n async compileAndLink(step: WorkerBuildStep, updates: WorkerFileUpdate[]): Promise<WorkerResult> {\n for (let file of updates) {\n await this.addFileUpdate(file);\n }\n try {\n let result = await this.build(step);\n // did we succeed?\n if (isOutputResult(result)) {\n // do the debug info\n const debugInfo = await this.build(step, 'debug');\n if (isOutputResult(debugInfo)) {\n result.listings = debugInfo.listings;\n result.symbolmap = debugInfo.symbolmap;\n }\n }\n return result;\n } catch (err) {\n return { errors: [{line:0, msg: err.toString()}] };\n }\n }\n}\n\n", "\nexport type FileData = string | Uint8Array;\n\nexport interface SourceLocation {\n line: number;\n label?: string;\n path?: string; // TODO: make mandatory?\n start?: number;\n end?: number;\n segment?:string;\n func?:string;\n}\n\n// actually it's a kind of SourceSnippet .. can have multiple per line\nexport interface SourceLine extends SourceLocation {\n offset:number;\n insns?:string;\n iscode?:boolean;\n cycles?:number;\n}\n\n// objects that have source code position info\nexport interface SourceLocated {\n $loc?: SourceLocation;\n}\n// statements also have the 'offset' (pc) field from SourceLine\nexport interface SourceLineLocated {\n $loc?: SourceLine;\n}\n\nexport class SourceFile {\n lines: SourceLine[];\n text: string;\n offset2loc: Map<number,SourceLine>; //{[offset:number]:number};\n line2offset: Map<number,number>; //{[line:number]:number};\n \n constructor(lines:SourceLine[], text:string) {\n lines = lines || [];\n this.lines = lines;\n this.text = text;\n this.offset2loc = new Map();\n this.line2offset = new Map();\n for (var info of lines) {\n if (info.offset >= 0) {\n // first line wins (is assigned to offset)\n // TODO: handle macros/includes w/ multiple offsets per line\n if (!this.offset2loc[info.offset])\n this.offset2loc[info.offset] = info;\n if (!this.line2offset[info.line])\n this.line2offset[info.line] = info.offset;\n }\n }\n }\n // TODO: smarter about looking for source lines between two addresses\n findLineForOffset(PC:number, lookbehind:number) : SourceLine {\n if (this.offset2loc) {\n for (var i=0; i<=lookbehind; i++) {\n var loc = this.offset2loc[PC];\n if (loc) {\n return loc;\n }\n PC--;\n }\n }\n return null;\n }\n lineCount():number { return this.lines.length; }\n}\n\nexport interface Dependency {\n path:string\n filename:string\n link:boolean\n data:FileData // TODO: or binary?\n}\n\nexport interface WorkerFileUpdate {\n path:string\n data:FileData\n};\nexport interface WorkerBuildStep {\n path?:string\n files?:string[]\n platform:string\n tool:string\n mainfile?:boolean\n};\nexport interface WorkerItemUpdate {\n key:string\n value:object\n};\n\n// TODO: split into different msg types\nexport interface WorkerMessage {\n preload?:string\n platform?:string\n tool?:string\n updates:WorkerFileUpdate[]\n buildsteps:WorkerBuildStep[]\n reset?:boolean\n code?:string\n setitems?:WorkerItemUpdate[]\n}\n\nexport interface WorkerError extends SourceLocation {\n msg:string,\n}\n\nexport interface CodeListing {\n lines:SourceLine[]\n asmlines?:SourceLine[]\n text?:string\n sourcefile?:SourceFile // not returned by worker\n assemblyfile?:SourceFile // not returned by worker\n}\n\nexport type CodeListingMap = {[path:string]:CodeListing};\n\n// TODO\nexport type VerilogOutput =\n {program_rom_variable:string, program_rom:Uint8Array, code:string, name:string, ports:any[], signals:any[]};\n\nexport type Segment = {\n name:string,\n start:number,\n size:number,\n last?:number,\n type?:string,\n source?:'native'|'linker'\n};\n\nexport type WorkerResult = WorkerErrorResult | WorkerOutputResult<any> | WorkerUnchangedResult;\n\nexport interface WorkerUnchangedResult {\n unchanged: true;\n}\n\nexport interface WorkerErrorResult {\n errors: WorkerError[]\n listings?: CodeListingMap\n}\n\nexport interface WorkerOutputResult<T> {\n output: T\n listings?: CodeListingMap\n symbolmap?: {[sym:string]:number}\n params?: {}\n segments?: Segment[]\n debuginfo?: {} // optional info\n}\n\nexport function isUnchanged(result: WorkerResult) : result is WorkerUnchangedResult {\n return ('unchanged' in result);\n}\n\nexport function isErrorResult(result: WorkerResult) : result is WorkerErrorResult {\n return ('errors' in result);\n}\n\nexport function isOutputResult(result: WorkerResult) : result is WorkerOutputResult<any> {\n return ('output' in result);\n}\n\nexport interface WorkingStore {\n getFileData(path:string) : FileData;\n}\n", "\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s=\" \"+s;\n return s;\n}\n\nexport function rpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s+=\" \";\n return s;\n}\n\nexport function byte2signed(b:number):number {\n b &= 0xff;\n return (b < 0x80) ? b : -(256-b);\n}\n\nexport function getFilenameForPath(s:string):string {\n var toks = s.split('/');\n return toks[toks.length-1];\n}\n\nexport function getFolderForPath(s:string):string {\n return s.substring(0, s.lastIndexOf('/'));\n}\n\nexport function getFilenamePrefix(s:string):string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike<any>, b:ArrayLike<any>):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (a.length != b.length) return false;\n for (var i=0; i<a.length; i++)\n if (a[i] != b[i])\n return false;\n return true;\n}\n\nexport function invertMap(m:{}):{} {\n var r = {};\n if (m) {\n for (var k in m) r[m[k]] = k;\n }\n return r;\n}\n\nexport function highlightDifferences(s1:string, s2:string):string {\n var split1 = s1.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var split2 = s2.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var i = 0;\n var j = 0;\n var result = \"\";\n while (i < split1.length && j < split2.length) {\n var w1 = split1[i];\n var w2 = split2[j];\n if (w2 && w2.indexOf(\"\\n\") >= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '<span class=\"hilite\">' + w2 + '</span>';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i<s.length; i++)\n a[i] = s.charCodeAt(i);\n return a;\n}\n\nexport function byteArrayToString(data : number[] | Uint8Array) : string {\n var str = \"\";\n if (data != null) {\n var charLUT = new Array();\n for (var i = 0; i < 256; ++i)\n charLUT[i] = String.fromCharCode(i);\n var len = data.length;\n for (var i = 0; i < len; i++)\n str += charLUT[data[i]];\n }\n return str;\n}\n\nexport function byteArrayToUTF8(data : number[] | Uint8Array) : string {\n var str = \"\";\n var charLUT = new Array();\n for (var i = 0; i < 128; ++i)\n charLUT[i] = String.fromCharCode(i);\n var c;\n var len = data.length;\n for (var i = 0; i < len;) {\n c = data[i++];\n if (c < 128) {\n str += charLUT[c];\n } else {\n if ((c >= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i<names.length; i++) {\n if (names[i]) {\n var bit = 1 << (r2l ? (names.length-1-i) : i);\n if (i > 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; j<count; j++)\n dest.push(data);\n if (count == 0)\n break;\n } else {\n data = ch;\n dest.push(data);\n }\n }\n return new Uint8Array(dest);\n}\n\n// firefox doesn't do GET with binary files\n// TODO: replace with fetch()?\nexport function getWithBinary(url:string, success:(text:string|Uint8Array)=>void, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike<any> {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike<number> {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise<Event> {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/&apos;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, '>')\n .replace(/&lt;/g, '<')\n .replace(/&amp;/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&amp;').replace(/[<]/g, '&lt;').replace(/[>]/g, '&gt;');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map<string, string|Uint8Array>;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray<T>(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n", "import { WorkerError, CodeListingMap, SourceLocation, SourceLine, SourceLocated, SourceLineLocated } from \"../workertypes\";\n\nexport interface BASICOptions {\n dialectName : string; // use this to select the dialect \n // SYNTAX AND PARSING\n asciiOnly : boolean; // reject non-ASCII chars?\n uppercaseOnly : boolean; // convert everything to uppercase?\n optionalLabels : boolean;\t\t\t// can omit line numbers and use labels?\n optionalWhitespace : boolean; // can \"crunch\" keywords? also, eat extra \":\" delims\n multipleStmtsPerLine : boolean; // multiple statements separated by \":\"\n varNaming : 'A'|'A1'|'A1$'|'AA'|'*'; // only allow A0-9 for numerics, single letter for arrays/strings\n squareBrackets : boolean; // \"[\" and \"]\" interchangable with \"(\" and \")\"?\n tickComments : boolean; // support 'comments?\n hexOctalConsts : boolean; // support &H and &O integer constants?\n optionalLet : boolean; // LET is optional\n chainAssignments : boolean; // support A = B = value (HP2000)\n validKeywords : string[]; // valid keywords (or null for accept all)\n validFunctions : string[]; // valid functions (or null for accept all)\n validOperators : string[]; // valid operators (or null for accept all)\n // VALUES AND OPERATORS\n defaultValues : boolean; // initialize unset variables to default value? (0 or \"\")\n stringConcat : boolean; // can concat strings with \"+\" operator?\n checkOverflow : boolean; // check for overflow of numerics?\n bitwiseLogic : boolean; // -1 = TRUE, 0 = FALSE, AND/OR/NOT done with bitwise ops\n maxStringLength : number; // maximum string length in chars\n maxDefArgs : number; // maximum # of arguments for user-defined functions\n // ARRAYS\n staticArrays : boolean; // can only DIM with constant value? (and never redim)\n sharedArrayNamespace : boolean; // arrays and variables have same namespace? (TODO)\n defaultArrayBase : number; // arrays start at this number (0 or 1)\n defaultArraySize : number; // arrays are allocated w/ this size (starting @ 0)\n maxDimensions : number; // max number of dimensions for arrays\n arraysContainChars : boolean; // HP BASIC array-slicing syntax\n // PRINTING\n printZoneLength : number; // print zone length\n numericPadding : boolean; // \" \" or \"-\" before and \" \" after numbers?\n // CONTROL FLOW\n compiledBlocks : boolean; // assume blocks are statically compiled, not interpreted\n testInitialFor : boolean; // can we skip a NEXT statement? (can't interleave tho)\n optionalNextVar : boolean; // can do NEXT without variable\n multipleNextVars : boolean; // NEXT J,I\n checkOnGotoIndex : boolean; // fatal error when ON..GOTO index out of bounds\n computedGoto : boolean; // non-const expr GOTO label (and GOTO..OF expression)\n restoreWithLabel : boolean; // RESTORE <label>\n endStmtRequired : boolean; // need END at end?\n // MISC\n multilineIfThen? : boolean; // multi-line IF .. ELSE .. END IF?\n commandsPerSec? : number; // how many commands per second?\n maxLinesPerFile? : number; // limit on # of lines\n maxArrayElements? : number; // max array elements (all dimensions)\n}\n\nexport class CompileError extends Error {\n $loc : SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\n// Lexer regular expression -- each (capture group) handles a different token type\n// FLOAT INT HEXOCTAL REMARK IDENT STRING RELOP EXP OPERATORS OTHER WS\nconst re_toks = /([0-9.]+[E][+-]?\\d+|\\d+[.][E0-9]*|[.][E0-9]+)|[0]*(\\d+)|&([OH][0-9A-F]+)|(['].*)|([A-Z_]\\w*[$]?)|(\".*?\")|([<>]?[=<>#])|(\\*\\*)|([-+*/^,;:()\\[\\]\\?\\\\])|(\\S+)|(\\s+)/gi;\n\nexport enum TokenType {\n EOL = 0,\n Float,\n Int,\n HexOctalInt,\n Remark,\n Ident,\n String,\n Relational,\n DoubleStar,\n Operator,\n CatchAll,\n Whitespace,\n _LAST,\n}\n\nexport type ExprTypes = BinOp | UnOp | IndOp | Literal;\nexport type Expr = ExprTypes; // & SourceLocated;\nexport type Opcode = string;\nexport type Value = number | string;\nexport type ValueType = 'number' | 'string' | 'label';\n\nexport interface ExprBase extends SourceLocated {\n valtype: ValueType;\n}\n\nexport interface Literal extends ExprBase {\n value: Value;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface Statement extends SourceLineLocated {\n command: string;\n}\n\nexport interface ScopeStartStatement extends Statement {\n endpc?: number;\n}\n\nexport interface ScopeEndStatement extends Statement {\n startpc?: number;\n}\n\nexport interface PRINT_Statement extends Statement {\n command: \"PRINT\";\n args: Expr[];\n}\n\nexport interface LET_Statement extends Statement {\n command: \"LET\";\n lexprs: IndOp[];\n right: Expr;\n}\n\nexport interface DIM_Statement extends Statement {\n command: \"DIM\";\n args: IndOp[];\n}\n\nexport interface GOTO_Statement extends Statement {\n command: \"GOTO\";\n label: Expr;\n}\n\nexport interface GOSUB_Statement extends Statement {\n command: \"GOSUB\";\n label: Expr;\n}\n\nexport interface RETURN_Statement extends Statement {\n command: \"RETURN\";\n}\n\nexport interface ONGO_Statement extends Statement {\n command: \"ONGOTO\" | \"ONGOSUB\";\n expr: Expr;\n labels: Expr[];\n}\n\nexport interface IF_Statement extends ScopeStartStatement {\n command: \"IF\";\n cond: Expr;\n}\n\nexport interface ELSE_Statement extends ScopeStartStatement {\n command: \"ELSE\";\n}\n\nexport interface FOR_Statement extends ScopeStartStatement {\n command: \"FOR\";\n lexpr: IndOp;\n initial: Expr;\n target: Expr;\n step?: Expr;\n}\n\nexport interface NEXT_Statement extends ScopeEndStatement {\n command: \"NEXT\";\n lexpr?: IndOp;\n}\n\nexport interface WHILE_Statement extends ScopeStartStatement {\n command: \"WHILE\";\n cond: Expr;\n}\n\nexport interface WEND_Statement extends ScopeEndStatement {\n command: \"WEND\";\n}\n\nexport interface END_Statement extends ScopeEndStatement {\n command: \"END\";\n}\n\nexport interface INPUT_Statement extends Statement {\n command: \"INPUT\";\n prompt: Expr;\n args: IndOp[];\n timeout?: Expr;\n elapsed?: IndOp;\n}\n\nexport interface ENTER_Statement extends INPUT_Statement {\n timeout: Expr;\n elapsed: IndOp;\n}\n\nexport interface DATA_Statement extends Statement {\n command: \"DATA\";\n datums: Literal[];\n}\n\nexport interface READ_Statement extends Statement {\n command: \"READ\";\n args: IndOp[];\n}\n\nexport interface RESTORE_Statement extends Statement {\n command: \"RESTORE\";\n label: Expr;\n}\n\nexport interface DEF_Statement extends Statement {\n command: \"DEF\";\n lexpr: IndOp;\n def: Expr;\n}\n\nexport interface SUB_Statement extends ScopeStartStatement {\n command: \"SUB\";\n lexpr: IndOp;\n}\n\nexport interface CALL_Statement {\n command: \"CALL\";\n call: IndOp;\n}\n\nexport interface OPTION_Statement extends Statement {\n command: \"OPTION\";\n optname: string;\n optargs: string[];\n}\n\nexport interface GET_Statement extends Statement { // applesoft only?\n command: \"GET\";\n lexpr: IndOp;\n}\n\nexport interface CHANGE_Statement extends Statement {\n command: \"CHANGE\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface CONVERT_Statement extends Statement {\n command: \"CONVERT\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface NoArgStatement extends Statement {\n command: string;\n}\n\nexport interface BASICProgram {\n opts: BASICOptions;\n stmts: Statement[];\n labels: { [label: string]: number }; // label -> PC\n}\n\nclass Token implements SourceLocated {\n str: string;\n type: TokenType;\n $loc: SourceLocation;\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n '%': {f:'mod',p:140},\n 'MOD': {f:'mod',p:140},\n '\\\\': {f:'idiv',p:150},\n '*': {f:'mul',p:200},\n '/': {f:'div',p:200},\n '^': {f:'pow',p:300},\n '**': {f:'pow',p:300},\n};\n\nfunction getOperator(op: string) {\n return OPERATORS[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case TokenType.Operator:\n case TokenType.DoubleStar:\n case TokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Remark\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\nfunction stripQuotes(s: string) {\n // TODO: assert\n return s.substr(1, s.length-2);\n}\n\nfunction isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nfunction isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nfunction isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nfunction isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\n\nfunction mergeLocs(a: SourceLocation, b: SourceLocation) : SourceLocation {\n return {\n line:Math.min(a.line, b.line),\n start:Math.min(a.start, b.start),\n end:Math.max(a.end, b.end),\n label:a.label || b.label,\n path:a.path || b.path,\n }\n}\n\n///// BASIC PARSER\n\nexport class BASICParser {\n opts : BASICOptions = DIALECTS['DEFAULT'];\n optionCount : number; // how many OPTION stmts so far?\n maxlinelen : number = 255; // maximum line length (some like HP use 72 chars)\n stmts : Statement[];\n errors: WorkerError[];\n listings: CodeListingMap;\n labels: { [label: string]: number }; // label -> PC\n targets: { [targetlabel: string]: SourceLocation }; // targets of GOTOs etc\n vardefs: { [name: string]: IndOp }; // LET or DIM\n varrefs: { [name: string]: SourceLocation }; // variable references\n fnrefs: { [name: string]: string[] }; // DEF FN call graph\n scopestack: number[];\n elseifcount: number;\n\n path : string;\n lineno : number;\n tokens: Token[];\n eol: Token;\n curlabel: string;\n lasttoken: Token;\n\n constructor() {\n this.optionCount = 0;\n this.lineno = 0;\n this.curlabel = null;\n this.stmts = [];\n this.labels = {};\n this.targets = {};\n this.errors = [];\n this.listings = {};\n this.vardefs = {};\n this.varrefs = {};\n this.fnrefs = {};\n this.scopestack = [];\n this.elseifcount = 0;\n }\n addError(msg: string, loc?: SourceLocation) {\n var tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({path:loc.path, line:loc.line, label:this.curlabel, start:loc.start, end:loc.end, msg:msg});\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n throw new CompileError(msg, loc);\n }\n dialectError(what: string, loc?: SourceLocation) {\n this.compileError(`${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc);\n }\n dialectErrorNoSupport(what: string, loc?: SourceLocation) {\n this.compileError(`You can't use ${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc); // TODO\n }\n consumeToken(): Token {\n var tok = this.lasttoken = (this.tokens.shift() || this.eol);\n return tok;\n }\n expectToken(str: string, msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: string[], msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (strlist.indexOf(tokstr) < 0) {\n this.compileError(msg || `There should be a ${strlist.map((s) => `\"${s}\"`).join(' or ')} here.`);\n }\n return tok;\n }\n peekToken(lookahead?: number): Token {\n var tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eol;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n // this parses either a line number or \"label:\" -- or adds a default label to a line\n parseOptLabel() {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (this.opts.optionalLabels || tok.str == 'OPTION') {\n // is it a \"label :\" and not a keyword like \"PRINT : \"\n if (this.peekToken().str == ':' && !this.supportsCommand(tok.str)) { \n this.consumeToken(); // eat the \":\"\n // fall through to the next case\n } else {\n this.pushbackToken(tok); // nope\n break;\n }\n } else\n this.dialectError(`Each line must begin with a line number`);\n case TokenType.Int:\n this.addLabel(tok.str);\n return;\n // label added, return from function... other cases add default label\n case TokenType.HexOctalInt:\n case TokenType.Float:\n this.compileError(`Line numbers must be positive integers.`);\n break;\n case TokenType.Operator:\n if (this.supportsCommand(tok.str) && this.validKeyword(tok.str)) {\n this.pushbackToken(tok);\n break; // \"?\" is allowed\n }\n default:\n if (this.opts.optionalLabels)\n this.compileError(`A line must start with a line number, command, or label.`);\n else\n this.compileError(`A line must start with a line number.`);\n case TokenType.Remark:\n break;\n }\n // add default label\n this.addLabel('#'+this.lineno);\n }\n getPC() : number {\n return this.stmts.length;\n }\n addStatement(stmt: Statement, cmdtok: Token, endtok?: Token) {\n // set location for statement, adding offset (PC) field\n if (endtok == null) endtok = this.peekToken();\n stmt.$loc = { path: cmdtok.$loc.path, line: cmdtok.$loc.line, start: cmdtok.$loc.start, end: endtok.$loc.start,\n label: this.curlabel,\n offset: this.stmts.length };\n // check IF/THEN WHILE/WEND FOR/NEXT etc\n this.modifyScope(stmt);\n // add to list\n this.stmts.push(stmt);\n }\n addLabel(str: string, offset?: number) {\n if (this.labels[str] != null) this.compileError(`There's a duplicated label named \"${str}\".`);\n this.labels[str] = this.getPC() + (offset || 0);\n this.curlabel = str;\n this.tokens.forEach((tok) => tok.$loc.label = str);\n }\n parseFile(file: string, path: string) : BASICProgram {\n this.path = path;\n var txtlines = file.split(/\\n|\\r\\n?/);\n txtlines.forEach((line) => this.parseLine(line));\n var program = { opts: this.opts, stmts: this.stmts, labels: this.labels };\n this.checkAll(program);\n this.listings[path] = this.generateListing(file, program);\n return program;\n }\n parseLine(line: string) : void {\n try {\n this.tokenize(line);\n this.parse();\n } catch (e) {\n if (!(e instanceof CompileError)) throw e; // ignore compile errors since errors[] list captures them\n }\n }\n _tokenize(line: string) : void {\n // split identifier regex (if token-crunching enabled)\n let splitre = this.opts.optionalWhitespace && new RegExp('('+this.opts.validKeywords.map(s => `${s}`).join('|')+')');\n // iterate over each token via re_toks regex\n var lastTokType = TokenType.CatchAll;\n var m : RegExpMatchArray;\n while (m = re_toks.exec(line)) {\n for (var i = 1; i <= lastTokType; i++) {\n let s : string = m[i];\n if (s != null) {\n let loc = { path: this.path, line: this.lineno, start: m.index, end: m.index+s.length };\n // maybe we don't support unicode in 1975?\n if (this.opts.asciiOnly && !/^[\\x00-\\x7F]*$/.test(s))\n this.dialectErrorNoSupport(`non-ASCII characters`);\n // uppercase all identifiers, and maybe more\n if (i == TokenType.Ident || i == TokenType.HexOctalInt || this.opts.uppercaseOnly) {\n s = s.toUpperCase();\n // DATA statement captures whitespace too\n if (s == 'DATA') lastTokType = TokenType.Whitespace;\n // certain keywords shouldn't split for rest of line\n if (s == 'DATA') splitre = null;\n if (s == 'OPTION') splitre = null;\n // REM means ignore rest of statement\n if (lastTokType == TokenType.CatchAll && s.startsWith('REM')) {\n s = 'REM';\n lastTokType = TokenType.EOL;\n }\n }\n // convert brackets\n if (s == '[' || s == ']') {\n if (!this.opts.squareBrackets) this.dialectErrorNoSupport(`square brackets`);\n if (s == '[') s = '(';\n if (s == ']') s = ')';\n }\n // un-crunch tokens?\n if (splitre && i == TokenType.Ident) {\n var splittoks = s.split(splitre).filter((s) => s != ''); // only non-empties\n if (splittoks.length > 1) {\n splittoks.forEach((ss) => {\n // check to see if leftover might be integer, or identifier\n if (/^[0-9]+$/.test(ss)) i = TokenType.Int;\n else if (/^[A-Z_]\\w*[$]?$/.test(ss)) i = TokenType.Ident;\n else this.compileError(`Try adding whitespace before \"${ss}\".`);\n this.tokens.push({str: ss, type: i, $loc:loc});\n });\n s = null;\n }\n }\n // add token to list\n if (s) this.tokens.push({str: s, type: i, $loc:loc});\n break;\n }\n }\n }\n }\n tokenize(line: string) : void {\n this.lineno++;\n this.tokens = []; // can't have errors until this is set\n this.eol = { type: TokenType.EOL, str: \"\", $loc: { path: this.path, line: this.lineno, start: line.length } };\n if (line.length > this.maxlinelen) this.compileError(`A line should be no more than ${this.maxlinelen} characters long.`);\n this._tokenize(line);\n }\n parse() : void {\n // not empty line?\n if (this.tokens.length) {\n this.parseOptLabel();\n if (this.tokens.length) {\n this.parseCompoundStatement();\n }\n var next = this.peekToken();\n if (!isEOS(next)) this.compileError(`Expected end of line or ':'`, next.$loc);\n this.curlabel = null;\n }\n }\n parseCompoundStatement() : void {\n if (this.opts.multipleStmtsPerLine) {\n this.parseList(this.parseStatement, ':');\n } else {\n this.parseList(this.parseStatement, '\\0');\n if (this.peekToken().str == ':') this.dialectErrorNoSupport(`multiple statements on a line`);\n }\n }\n validKeyword(keyword: string) : string {\n return (this.opts.validKeywords && this.opts.validKeywords.indexOf(keyword) < 0) ? null : keyword;\n }\n validFunction(funcname: string) : string {\n return (this.opts.validFunctions && this.opts.validFunctions.indexOf(funcname) < 0) ? null : funcname;\n }\n supportsCommand(cmd: string) : () => Statement {\n if (cmd == '?') return this.stmt__PRINT;\n else return this['stmt__' + cmd];\n }\n parseStatement(): Statement | null {\n // eat extra \":\" (should have separate property for this)\n if (this.opts.optionalWhitespace && this.peekToken().str == ':') return null;\n // get the command word\n var cmdtok = this.consumeToken();\n var cmd = cmdtok.str;\n var stmt : Statement;\n switch (cmdtok.type) {\n case TokenType.Remark:\n if (cmdtok.str.startsWith(\"'\") && !this.opts.tickComments)\n this.dialectErrorNoSupport(`tick comments`);\n return null;\n case TokenType.Operator:\n // \"?\" is alias for \"PRINT\" on some platforms\n if (cmd == this.validKeyword('?')) cmd = 'PRINT';\n case TokenType.Ident:\n // ignore remarks\n if (cmd == 'REM') return null;\n // look for \"GO TO\" and \"GO SUB\"\n if (cmd == 'GO' && this.peekToken().str == 'TO') {\n this.consumeToken();\n cmd = 'GOTO';\n } else if (cmd == 'GO' && this.peekToken().str == 'SUB') {\n this.consumeToken();\n cmd = 'GOSUB';\n }\n // lookup JS function for command\n var fn = this.supportsCommand(cmd);\n if (fn) {\n if (this.validKeyword(cmd) == null)\n this.dialectErrorNoSupport(`the ${cmd} statement`);\n stmt = fn.bind(this)();\n break;\n } else if (this.peekToken().str == '=' || this.peekToken().str == '(') {\n if (!this.opts.optionalLet)\n this.dialectError(`Assignments must have a preceding LET`);\n // 'A = expr' or 'A(X) = expr'\n this.pushbackToken(cmdtok);\n stmt = this.stmt__LET();\n break;\n } else {\n this.compileError(`I don't understand the command \"${cmd}\".`);\n }\n case TokenType.EOL:\n if (this.opts.optionalWhitespace) return null;\n default:\n this.compileError(`There should be a command here.`);\n return null;\n }\n // add statement to list\n if (stmt != null) this.addStatement(stmt, cmdtok);\n return stmt;\n }\n // check scope stuff (if compiledBlocks is true)\n modifyScope(stmt: Statement) {\n if (this.opts.compiledBlocks) {\n var cmd = stmt.command;\n if (cmd == 'FOR' || cmd == 'WHILE' || cmd == 'SUB') {\n this.scopestack.push(this.getPC()); // has to be before adding statment to list\n } else if (cmd == 'NEXT') {\n this.popScope(stmt as NEXT_Statement, 'FOR');\n } else if (cmd == 'WEND') {\n this.popScope(stmt as WEND_Statement, 'WHILE');\n }\n }\n }\n popScope(close: WEND_Statement|NEXT_Statement|END_Statement, open: string) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's a ${close.command} without a matching ${open}.`, close.$loc);\n else if (popstmt.command != open)\n this.compileError(`There's a ${close.command} paired with ${popstmt.command}, but it should be paired with ${open}.`, close.$loc, popstmt.$loc);\n else if (close.command == 'NEXT' && !this.opts.optionalNextVar \n && close.lexpr.name != (popstmt as FOR_Statement).lexpr.name)\n this.compileError(`This NEXT statement is matched with the wrong FOR variable (${close.lexpr.name}).`, close.$loc, popstmt.$loc);\n // set start + end locations\n close.startpc = popidx;\n popstmt.endpc = this.getPC(); // has to be before adding statment to list\n }\n popIfThenScope(nextpc?: number) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's an END IF without a matching IF or ELSE.`);\n if (popstmt.command == 'ELSE') {\n popstmt.endpc = this.getPC();\n this.popIfThenScope(popidx + 1); // IF goes to ELSE+1\n } else if (popstmt.command == 'IF') {\n popstmt.endpc = nextpc != null ? nextpc : this.getPC();\n } else {\n this.compileError(`There's an END IF paired with a ${popstmt.command}, not IF or ELSE.`, this.lasttoken.$loc, popstmt.$loc);\n }\n }\n parseVarSubscriptOrFunc(): IndOp {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n let args = null;\n if (this.peekToken().str == '(') {\n this.expectToken('(');\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n this.compileError(`There should be a variable name here.`);\n break;\n }\n }\n parseLexpr(): IndOp {\n var lexpr = this.parseVarSubscriptOrFunc();\n this.vardefs[lexpr.name] = lexpr;\n this.validateVarName(lexpr);\n return lexpr;\n }\n parseForNextLexpr() : IndOp {\n var lexpr = this.parseLexpr();\n if (lexpr.args || lexpr.name.endsWith('$'))\n this.compileError(`A FOR ... NEXT loop can only use numeric variables.`, lexpr.$loc);\n return lexpr;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n parseLexprList(): IndOp[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n parseLabelList(): Expr[] {\n return this.parseList(this.parseLabel, ',');\n }\n parseLabel() : Expr {\n // parse full expr?\n if (this.opts.computedGoto) {\n // parse expression, but still add to list of label targets if constant\n var expr = this.parseExpr();\n if (isLiteral(expr)) this.targets[expr.value] = this.lasttoken.$loc;\n return expr;\n } else {\n // parse a single number or ident label\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (!this.opts.optionalLabels)\n this.dialectError(`All labels must be line numbers`)\n case TokenType.Int:\n var label = tok.str;\n this.targets[label] = tok.$loc;\n return {valtype:'label', value:label};\n default:\n var what = this.opts.optionalLabels ? \"label or line number\" : \"line number\";\n this.compileError(`There should be a ${what} here.`);\n }\n }\n }\n parseDatumList(): Literal[] {\n return this.parseList(this.parseDatum, ',');\n }\n parseDatum(): Literal {\n var tok = this.consumeToken();\n // get rid of leading whitespace\n while (tok.type == TokenType.Whitespace)\n tok = this.consumeToken();\n if (isEOS(tok)) this.compileError(`There should be a datum here.`);\n // parse constants\n if (tok.type <= TokenType.HexOctalInt) {\n return this.parseValue(tok);\n }\n if (tok.str == '-' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return { valtype:'number', value: -this.parseValue(tok).value };\n }\n if (tok.str == '+' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return this.parseValue(tok);\n }\n // concat all stuff including whitespace\n // TODO: should trim whitespace only if not quoted string\n var s = '';\n while (!isEOS(tok) && tok.str != ',') {\n s += this.parseValue(tok).value;\n tok = this.consumeToken();\n }\n this.pushbackToken(tok);\n return { valtype:'string', value: s }; // trim leading and trailing whitespace\n }\n parseValue(tok: Token): Literal {\n switch (tok.type) {\n case TokenType.HexOctalInt:\n if (!this.opts.hexOctalConsts)\n this.dialectErrorNoSupport(`hex/octal constants`);\n let base = tok.str.startsWith('H') ? 16 : 8;\n return { valtype:'number', value: parseInt(tok.str.substr(1), base) };\n case TokenType.Int:\n case TokenType.Float:\n return { valtype:'number', value: this.parseNumber(tok.str) };\n case TokenType.String:\n return { valtype:'string', value: stripQuotes(tok.str) };\n default:\n return { valtype:'string', value: tok.str }; // only used in DATA statement\n }\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.HexOctalInt:\n case TokenType.Int:\n case TokenType.Float:\n case TokenType.String:\n return this.parseValue(tok);\n case TokenType.Ident:\n if (tok.str == 'NOT') {\n let expr = this.parsePrimary();\n return { valtype:'number', op: this.opts.bitwiseLogic ? 'bnot' : 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case TokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n return { valtype:'number', op: 'neg', expr: expr };\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n this.compileError(`The expression is incomplete.`);\n return;\n }\n }\n parseNumber(str: string) : number {\n var n = parseFloat(str);\n if (isNaN(n))\n this.compileError(`The number ${str} is not a valid floating-point number.`);\n if (this.opts.checkOverflow && !isFinite(n))\n this.compileError(`The number ${str} is too big to fit into a floating-point value.`);\n return n;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n if (this.opts.validOperators && this.opts.validOperators.indexOf(op.str) < 0)\n this.dialectErrorNoSupport(`the \"${op.str}\" operator`);\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (!this.opts.bitwiseLogic && op.str == 'AND') opfn = 'land';\n if (!this.opts.bitwiseLogic && op.str == 'OR') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExprWithType(expecttype: ValueType): Expr {\n var expr = this.parseExpr();\n if (expr.valtype != expecttype)\n this.compileError(`There should be a ${expecttype} here, but this expression evaluates to a ${expr.valtype}.`, expr.$loc);\n return expr;\n }\n validateVarName(lexpr: IndOp) {\n switch (this.opts.varNaming) {\n case 'A': // TINY BASIC, no strings\n if (!/^[A-Z]$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a single letter`);\n break;\n case 'A1':\n if (lexpr.args == null && !/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n if (lexpr.args != null && !/^[A-Z]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`array names other than a single letter`);\n break;\n case 'A1$':\n if (!/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n break;\n case 'AA':\n if (lexpr.args == null && !/^[A-Z][A-Z0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional letter or digit`);\n break;\n case '*':\n break;\n }\n }\n visitExpr(expr: Expr, callback: (expr:Expr) => void) {\n if (isBinOp(expr)) {\n this.visitExpr(expr.left, callback);\n this.visitExpr(expr.right, callback);\n }\n if (isUnOp(expr)) {\n this.visitExpr(expr.expr, callback);\n }\n if (isLookup(expr) && expr.args != null) {\n for (var arg of expr.args)\n this.visitExpr(arg, callback);\n }\n callback(expr);\n }\n // type-checking\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : ValueType {\n if (left.valtype == 'string' || right.valtype == 'string') {\n if (fnname == 'add') {\n if (this.opts.stringConcat) return 'string' // concat strings\n else this.dialectErrorNoSupport(`the \"+\" operator to concatenate strings`, optok.$loc);\n } else if (fnname.length != 2) // only relops are 2 chars long!\n this.compileError(`You can't do math on strings until they're converted to numbers.`, optok.$loc);\n }\n return 'number';\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : ValueType {\n args = args || [];\n // first check the built-in functions\n var defs = BUILTIN_MAP[fnname];\n if (defs != null) {\n if (!this.validFunction(fnname)) this.dialectErrorNoSupport(`the ${fnname} function`, loc);\n for (var def of defs) {\n if (args.length == def.args.length)\n return def.result; // TODO: check arg types\n }\n // TODO: check func arg types\n this.compileError(`The ${fnname} function takes ${def.args.length} arguments, but ${args.length} are given.`, loc);\n }\n // no function found, assume it's an array ref\n // TODO: validateVarName() later?\n this.varrefs[fnname] = loc;\n return fnname.endsWith('$') ? 'string' : 'number';\n }\n\n //// STATEMENTS\n\n stmt__LET(): LET_Statement {\n var lexprs = [ this.parseLexpr() ];\n this.expectToken(\"=\");\n // look for A=B=expr (TODO: doesn't work on arrays)\n while (this.opts.chainAssignments && this.peekToken().type == TokenType.Ident && this.peekToken(1).str == '=') {\n lexprs.push(this.parseLexpr());\n this.expectToken(\"=\");\n }\n var right = this.parseExprWithType(lexprs[0].valtype);\n return { command: \"LET\", lexprs: lexprs, right: right };\n }\n stmt__PRINT(): PRINT_Statement {\n var sep, lastsep;\n var list = [];\n do {\n sep = this.peekToken();\n if (isEOS(sep)) {\n break;\n } else if (sep.str == ';') {\n this.consumeToken();\n lastsep = sep;\n } else if (sep.str == ',') {\n this.consumeToken();\n list.push({value:'\\t'});\n lastsep = sep;\n } else {\n list.push(this.parseExpr());\n lastsep = null;\n }\n } while (true);\n if (!(lastsep && (lastsep.str == ';' || sep.str != ','))) {\n list.push({value:'\\n'});\n }\n return { command: \"PRINT\", args: list };\n }\n stmt__GOTO(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOTO\");\n }\n stmt__GOSUB(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOSUB\");\n }\n __GO(cmd: \"GOTO\"|\"GOSUB\"): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n var expr = this.parseLabel();\n // GOTO (expr) OF (labels...)\n if (this.peekToken().str == this.validKeyword('OF')) {\n this.expectToken('OF');\n let newcmd : 'ONGOTO'|'ONGOSUB' = (cmd == 'GOTO') ? 'ONGOTO' : 'ONGOSUB';\n return { command: newcmd, expr: expr, labels: this.parseLabelList() };\n } else {\n // regular GOTO or GOSUB\n return { command: cmd, label: expr };\n }\n }\n stmt__IF(): void {\n var cmdtok = this.lasttoken;\n var cond = this.parseExprWithType(\"number\");\n var ifstmt : IF_Statement = { command: \"IF\", cond: cond };\n this.addStatement(ifstmt, cmdtok);\n // we accept GOTO or THEN if line number provided (DEC accepts GO TO)\n var thengoto = this.expectTokens(['THEN','GOTO','GO']);\n if (thengoto.str == 'GO') this.expectToken('TO');\n // multiline IF .. THEN? push it to scope stack\n if (this.opts.multilineIfThen && isEOS(this.peekToken())) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n // is the next statement an ELSE?\n // gotta parse it now because it's an end-of-statement token\n if (this.peekToken().str == 'ELSE') {\n this.expectToken('ELSE');\n ifstmt.endpc = this.getPC() + 1;\n this.stmt__ELSE();\n } else {\n ifstmt.endpc = this.getPC();\n }\n }\n }\n stmt__ELSE(): void {\n var elsestmt : ELSE_Statement = { command: \"ELSE\" };\n this.addStatement(elsestmt, this.lasttoken);\n // multiline ELSE? or ELSE IF?\n var nexttok = this.peekToken();\n if (this.opts.multilineIfThen && isEOS(nexttok)) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else if (this.opts.multilineIfThen && nexttok.str == 'IF') {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n this.parseGotoOrStatements();\n this.elseifcount++;\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n elsestmt.endpc = this.getPC();\n }\n }\n parseGotoOrStatements() {\n var lineno = this.peekToken();\n // assume GOTO if number given after THEN\n if (lineno.type == TokenType.Int) {\n this.parseLabel();\n var gotostmt : GOTO_Statement = { command:'GOTO', label: {valtype:'label', value:lineno.str} }\n this.addStatement(gotostmt, lineno);\n } else {\n // parse rest of IF clause\n this.parseCompoundStatement();\n }\n }\n stmt__FOR() : FOR_Statement {\n var lexpr = this.parseForNextLexpr();\n this.expectToken('=');\n var init = this.parseExprWithType(\"number\");\n this.expectToken('TO');\n var targ = this.parseExprWithType(\"number\");\n if (this.peekToken().str == 'STEP') {\n this.consumeToken();\n var step = this.parseExprWithType(\"number\");\n }\n return { command:'FOR', lexpr:lexpr, initial:init, target:targ, step:step };\n }\n stmt__NEXT() : NEXT_Statement {\n var lexpr = null;\n // NEXT var might be optional\n if (!this.opts.optionalNextVar || !isEOS(this.peekToken())) {\n lexpr = this.parseForNextLexpr();\n // convert ',' to ':' 'NEXT'\n if (this.opts.multipleNextVars && this.peekToken().str == ',') {\n this.consumeToken(); // consume ','\n this.tokens.unshift({type:TokenType.Ident, str:'NEXT', $loc:this.peekToken().$loc});\n this.tokens.unshift({type:TokenType.Operator, str:':', $loc:this.peekToken().$loc});\n }\n }\n return { command:'NEXT', lexpr:lexpr };\n }\n stmt__WHILE(): WHILE_Statement {\n var cond = this.parseExprWithType(\"number\");\n return { command:'WHILE', cond:cond };\n }\n stmt__WEND(): WEND_Statement {\n return { command:'WEND' };\n }\n stmt__DIM() : DIM_Statement {\n var lexprs = this.parseLexprList();\n lexprs.forEach((arr) => {\n if (arr.args == null || arr.args.length == 0) \n this.compileError(`An array defined by DIM must have at least one dimension.`)\n else if (arr.args.length > this.opts.maxDimensions) \n this.dialectErrorNoSupport(`arrays with more than ${this.opts.maxDimensions} dimensionals`);\n for (var arrdim of arr.args) {\n if (arrdim.valtype != 'number')\n this.compileError(`Array dimensions must be numeric.`, arrdim.$loc);\n if (isLiteral(arrdim) && typeof arrdim.value === 'number' && arrdim.value < this.opts.defaultArrayBase)\n this.compileError(`An array dimension cannot be less than ${this.opts.defaultArrayBase}.`, arrdim.$loc);\n }\n });\n return { command:'DIM', args:lexprs };\n }\n stmt__INPUT() : INPUT_Statement {\n var prompt = this.consumeToken();\n var promptstr;\n if (prompt.type == TokenType.String) {\n this.expectTokens([';', ',']);\n promptstr = stripQuotes(prompt.str);\n } else {\n this.pushbackToken(prompt);\n promptstr = \"\";\n }\n return { command:'INPUT', prompt:{ valtype:'string', value: promptstr }, args:this.parseLexprList() };\n }\n /* for HP BASIC only */\n stmt__ENTER() : INPUT_Statement {\n var timeout = this.parseExpr();\n this.expectToken(',');\n var elapsed = this.parseLexpr(); // TODO: this has to go somewheres\n this.expectToken(',');\n return { command:'INPUT', prompt:null, args:this.parseLexprList(), timeout:timeout, elapsed:elapsed };\n }\n // TODO: DATA statement doesn't read unquoted strings\n stmt__DATA() : DATA_Statement {\n return { command:'DATA', datums:this.parseDatumList() };\n }\n stmt__READ() : READ_Statement {\n return { command:'READ', args:this.parseLexprList() };\n }\n stmt__RESTORE() : RESTORE_Statement {\n var label = null;\n if (this.opts.restoreWithLabel && !isEOS(this.peekToken()))\n label = this.parseLabel();\n return { command:'RESTORE', label:label };\n }\n stmt__RETURN() {\n return { command:'RETURN' };\n }\n stmt__STOP() {\n return { command:'STOP' };\n }\n stmt__END() {\n if (this.opts.multilineIfThen && this.scopestack.length) {\n let endtok = this.expectTokens(['IF','SUB']);\n if (endtok.str == 'IF') {\n this.popIfThenScope();\n while (this.elseifcount--) this.popIfThenScope(); // pop additional ELSE IF blocks?\n this.elseifcount = 0;\n } else if (endtok.str == 'SUB') {\n this.addStatement( { command: 'RETURN' }, endtok );\n this.popScope( { command: 'END' }, 'SUB'); // fake command to avoid null\n }\n } else {\n return { command:'END' };\n }\n }\n stmt__ON() : ONGO_Statement {\n var expr = this.parseExprWithType(\"number\");\n var gotok = this.consumeToken();\n var cmd = {GOTO:'ONGOTO', THEN:'ONGOTO', GOSUB:'ONGOSUB'}[gotok.str]; // THEN only for DEC basic?\n if (!cmd) this.compileError(`There should be a GOTO or GOSUB here.`);\n var labels = this.parseLabelList();\n return { command:cmd as any, expr:expr, labels:labels };\n }\n stmt__DEF() : DEF_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n if (lexpr.args && lexpr.args.length > this.opts.maxDefArgs)\n this.compileError(`There can be no more than ${this.opts.maxDefArgs} arguments to a function or subscript.`, lexpr.$loc);\n if (!lexpr.name.startsWith('FN')) this.compileError(`Functions defined with DEF must begin with the letters \"FN\".`, lexpr.$loc)\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.expectToken(\"=\");\n var func = this.parseExpr();\n // build call graph to detect cycles\n this.visitExpr(func, (expr:Expr) => {\n if (isLookup(expr) && expr.name.startsWith('FN')) {\n if (!this.fnrefs[lexpr.name])\n this.fnrefs[lexpr.name] = [];\n this.fnrefs[lexpr.name].push(expr.name);\n }\n });\n this.checkCallGraph(lexpr.name, new Set());\n return { command:'DEF', lexpr:lexpr, def:func };\n }\n stmt__SUB() : SUB_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.addLabel(lexpr.name, 1); // offset +1 to skip SUB command\n return { command:'SUB', lexpr:lexpr };\n }\n stmt__CALL() : CALL_Statement {\n return { command:'CALL', call:this.parseVarSubscriptOrFunc() };\n }\n markVarDefs(lexpr: IndOp) {\n this.vardefs[lexpr.name] = lexpr;\n if (lexpr.args != null)\n for (let arg of lexpr.args) {\n if (isLookup(arg) && arg.args == null)\n this.vardefs[arg.name] = arg;\n else\n this.compileError(`A definition can only define symbols, not expressions.`);\n }\n }\n // detect cycles in call graph starting at function 'name'\n checkCallGraph(name: string, visited: Set<string>) {\n if (visited.has(name)) this.compileError(`There was a cycle in the function definition graph for ${name}.`);\n visited.add(name);\n var refs = this.fnrefs[name] || [];\n for (var ref of refs)\n this.checkCallGraph(ref, visited); // recurse\n visited.delete(name);\n }\n stmt__POP() : NoArgStatement {\n return { command:'POP' };\n }\n stmt__GET() : GET_Statement {\n var lexpr = this.parseLexpr();\n return { command:'GET', lexpr:lexpr };\n }\n stmt__CLEAR() : NoArgStatement {\n return { command:'CLEAR' };\n }\n stmt__RANDOMIZE() : NoArgStatement {\n return { command:'RANDOMIZE' };\n }\n stmt__CHANGE() : CHANGE_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CHANGE can only convert strings to numeric arrays, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CHANGE', src:src, dest:dest };\n }\n stmt__CONVERT() : CONVERT_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CONVERT can only convert strings to numbers, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CONVERT', src:src, dest:dest };\n }\n // TODO: CHANGE A TO A$ (4th edition, A(0) is len and A(1..) are chars)\n stmt__OPTION() : OPTION_Statement {\n this.optionCount++;\n var tokname = this.consumeToken();\n var optname = tokname.str.toUpperCase();\n if (tokname.type != TokenType.Ident) this.compileError(`There must be a name after the OPTION statement.`)\n var tokarg = this.consumeToken();\n var arg = tokarg.str.toUpperCase();\n switch (optname) {\n case 'DIALECT':\n if (this.optionCount > 1) this.compileError(`OPTION DIALECT must be the first OPTION statement in the file.`, tokname.$loc);\n let dname = arg || \"\";\n if (dname == \"\") this.compileError(`OPTION DIALECT requires a dialect name.`, tokname.$loc);\n let dialect = DIALECTS[dname.toUpperCase()];\n if (dialect) this.opts = dialect;\n else this.compileError(`${dname} is not a valid dialect.`);\n break;\n case 'BASE':\n let base = parseInt(arg);\n if (base == 0 || base == 1) this.opts.defaultArrayBase = base;\n else this.compileError(\"OPTION BASE can only be 0 or 1.\");\n break;\n case 'CPUSPEED':\n if (!(this.opts.commandsPerSec = Math.min(1e7, arg=='MAX' ? Infinity : parseFloat(arg))))\n this.compileError(`OPTION CPUSPEED takes a positive number or MAX.`);\n break;\n default:\n // maybe it's one of the options?\n let propname = Object.getOwnPropertyNames(this.opts).find((n) => n.toUpperCase() == optname);\n if (propname == null) this.compileError(`${optname} is not a valid option.`, tokname.$loc);\n if (arg == null) this.compileError(`OPTION ${optname} requires a parameter.`);\n switch (typeof this.opts[propname]) {\n case 'boolean' : this.opts[propname] = arg.toUpperCase().startsWith(\"T\") || (arg as any)>0; return;\n case 'number' : this.opts[propname] = parseFloat(arg); return;\n case 'string' : this.opts[propname] = arg; return;\n case 'object' :\n if (Array.isArray(this.opts[propname]) && arg == 'ALL') {\n this.opts[propname] = null;\n return;\n }\n this.compileError(`OPTION ${optname} ALL is the only option supported.`);\n }\n break;\n }\n return { command:'OPTION', optname:optname, optargs:[arg]}\n }\n \n // for workermain\n generateListing(file: string, program: BASICProgram) {\n var srclines = [];\n var laststmt : Statement;\n program.stmts.forEach((stmt, idx) => {\n laststmt = stmt;\n srclines.push(stmt.$loc);\n });\n if (this.opts.endStmtRequired && (laststmt == null || laststmt.command != 'END'))\n this.dialectError(`All programs must have a final END statement`);\n return { lines: srclines };\n }\n getListings() : CodeListingMap {\n return this.listings;\n }\n\n // LINT STUFF\n checkAll(program : BASICProgram) {\n this.checkLabels();\n this.checkScopes();\n this.checkVarRefs();\n }\n checkLabels() {\n for (let targ in this.targets) {\n if (this.labels[targ] == null) {\n var what = this.opts.optionalLabels && isNaN(parseInt(targ)) ? \"label named\" : \"line number\";\n this.addError(`There isn't a ${what} ${targ}.`, this.targets[targ]);\n }\n }\n }\n checkScopes() {\n if (this.opts.compiledBlocks && this.scopestack.length) {\n var open = this.stmts[this.scopestack.pop()];\n var close = {FOR:\"NEXT\", WHILE:\"WEND\", IF:\"END IF\", SUB:\"END SUB\"};\n this.compileError(`Don't forget to add a matching ${close[open.command]} statement.`, open.$loc);\n }\n }\n checkVarRefs() {\n if (!this.opts.defaultValues) {\n for (var varname in this.varrefs) {\n if (this.vardefs[varname] == null)\n this.compileError(`The variable ${varname} isn't defined anywhere in the program.`, this.varrefs[varname]);\n }\n }\n }\n}\n\n///// BASIC DIALECTS\n\nexport const ECMA55_MINIMAL : BASICOptions = {\n dialectName: \"ECMA55\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO' // 'SUB'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : true,\n}\n\nexport const DARTMOUTH_4TH_EDITION : BASICOptions = {\n dialectName: \"DARTMOUTH4\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : true,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'CHANGE','MAT','RANDOM','RESTORE$','RESTORE*',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN',\n 'TRN','INV','DET','NUM','ZER', // NUM = # of strings input for MAT INPUT\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : false,\n compiledBlocks : true,\n}\n\n// TODO: only integers supported\nexport const TINY_BASIC : BASICOptions = {\n dialectName: \"TINY\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 0,\n defaultValues : true,\n stringConcat : false,\n maxDimensions : 0,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'PRINT','IF','THEN','GOTO','INPUT','LET','GOSUB','RETURN','CLEAR','END'\n ],\n validFunctions : [\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/',\n ],\n printZoneLength : 1,\n numericPadding : false,\n checkOverflow : false,\n testInitialFor : false,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : false,\n}\n\nexport const HP_TIMESHARED_BASIC : BASICOptions = {\n dialectName: \"HP2000\",\n asciiOnly : true,\n uppercaseOnly : true, // the terminal is usually uppercase\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1$\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 1,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255, // 72 for literals\n tickComments : false, // TODO: HP BASIC has 'hh char constants\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'ENTER','MAT','CONVERT','OF','IMAGE','USING'\n ],\n validFunctions : [\n 'ABS','ATN','BRK','COS','CTL','EXP','INT','LEN','LIN','LOG','NUM',\n 'POS','RND','SGN','SIN','SPA','SQR','TAB','TAN','TIM','TYP','UPS$', // TODO: POS,\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '#', 'NOT', 'AND', 'OR', 'MIN', 'MAX',\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : false,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true, // not really, but we do parse expressions for GOTO ... OF \n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : true,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n maxArrayElements : 5000,\n // TODO: max line number\n}\n\nexport const DEC_BASIC_11 : BASICOptions = {\n dialectName: \"DEC11\",\n asciiOnly : true,\n uppercaseOnly : true, // translates all lower to upper\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false, // actually \"\\\"\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use &\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'DATA','DEF','DIM','END','FOR','STEP','GOSUB','GOTO','GO','TO',\n 'IF','THEN','INPUT','LET','NEXT','ON','PRINT','RANDOMIZE',\n 'READ','REM','RESET','RESTORE','RETURN','STOP',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB',\n 'ASC','BIN','CHR$','CLK$','DAT$','LEN','OCT','POS','SEG$','STR$','TRM$','VAL',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n}\n\nexport const DEC_BASIC_PLUS : BASICOptions = {\n dialectName: \"DECPLUS\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use \"&\"\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : true, // actually use \"!\"\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'REM','LET','DIM','RANDOM','RANDOMIZE','IF','THEN','ELSE',\n 'FOR','TO','STEP','WHILE','UNTIL','NEXT','DEF','ON','GOTO','GOSUB',\n 'RETURN','CHANGE','READ','DATA','RESTORE','PRINT','USING',\n 'INPUT','LINE','NAME','AS','ERROR','RESUME','CHAIN','STOP','END',\n 'MAT','UNLESS','SLEEP','WAIT',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB','TAN',\n 'POS','TAB','ASCII','CHR$','CVT%$','CVTF$','CVT$%','CVT$F',\n 'LEFT$','RIGHT$','MID$','LEN','INSTR','SPACE$','NUM$','VAL','XLATE',\n 'DATE$','TIME$','TIME','ERR','ERL','SWAP%','RAD$',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '==',\n 'NOT', 'AND', 'OR', 'XOR', 'IMP', 'EQV',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false, // TODO: can chain with \",\" not \"=\"\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n // TODO: WHILE/UNTIL/FOR extra statements, etc\n}\n\nexport const BASICODE : BASICOptions = {\n dialectName: \"BASICODE\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"AA\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', // 'SUB',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CHR$','COS','EXP','INT','LEFT$','LEN','LOG', \n 'MID$','RIGHT$','SGN','SIN','SQR','TAB','TAN','VAL'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const ALTAIR_BASIC41 : BASICOptions = {\n dialectName: \"ALTAIR41\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 128, // \"as many as will fit on a single line\" ... ?\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD',\n 'RANDOMIZE' // not in Altair BASIC, but we add it anyway\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','ERL','ERR',\n 'EXP','FIX','FRE','HEX$','INP','INSTR','INT',\n 'LEFT$','LEN','LOG','LPOS','MID$',\n 'OCT$','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const APPLESOFT_BASIC : BASICOptions = {\n dialectName: \"APPLESOFT\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 88,\n maxDefArgs : 1, // TODO: no string FNs\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CLEAR','LET','DIM','DEF','GOTO','GOSUB','RETURN','ON','POP',\n 'FOR','NEXT','IF','THEN','END','STOP','ONERR','RESUME',\n 'PRINT','INPUT','GET','HOME','HTAB','VTAB',\n 'INVERSE','FLASH','NORMAL','TEXT',\n 'GR','COLOR','PLOT','HLIN','VLIN',\n 'HGR','HGR2','HPLOT','HCOLOR','AT',\n 'DATA','READ','RESTORE',\n 'REM','TRACE','NOTRACE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAN',\n 'LEN','LEFT$','MID$','RIGHT$','STR$','VAL','CHR$','ASC',\n 'FRE','SCRN','PDL','PEEK','POS'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const BASIC80 : BASICOptions = {\n dialectName: \"BASIC80\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 255,\n //maxElements : 32767, // TODO\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'CALL','CHAIN','COMMON','WHILE','WEND','WRITE','RANDOMIZE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','CSNG','CVI','CVS','CVD',\n 'EOF','EXP','FIX','FRE','HEX$','INP','INPUT$','INSTR','INT',\n 'LEFT$','LEN','LOC','LOG','LPOS','MID$','MKI$','MKS$','MKD$',\n 'OCT$','PEEK','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : false, // TODO: message displayed when overflow, division by zero = ok\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const MODERN_BASIC : BASICOptions = {\n dialectName: \"MODERN\",\n asciiOnly : false,\n uppercaseOnly : false,\n optionalLabels : true,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 0, // DIM required\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 2048, // TODO?\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : null, // all\n validFunctions : null, // all\n validOperators : null, // all\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n multilineIfThen : true,\n}\n\n// TODO: integer vars\n// TODO: DEFINT/DEFSTR\n// TODO: excess INPUT ignored, error msg\n// TODO: out of order line numbers\n\ntype BuiltinFunctionDef = [string, ValueType[], ValueType];\n\nconst BUILTIN_DEFS : BuiltinFunctionDef[] = [\n ['ABS', ['number'], 'number' ],\n ['ASC', ['string'], 'number' ],\n ['ATN', ['number'], 'number' ],\n ['CHR$', ['number'], 'string' ],\n ['CINT', ['number'], 'number' ],\n ['COS', ['number'], 'number' ],\n ['COT', ['number'], 'number' ],\n ['CTL', ['number'], 'string' ],\n ['EXP', ['number'], 'number' ],\n ['FIX', ['number'], 'number' ],\n ['HEX$', ['number'], 'string' ],\n ['INSTR', ['number', 'string', 'string'], 'number' ],\n ['INSTR', ['string', 'string'], 'number' ],\n ['INT', ['number'], 'number' ],\n ['LEFT$', ['string', 'number'], 'string' ],\n ['LEN', ['string'], 'number' ],\n ['LIN', ['number'], 'string' ],\n ['LOG', ['number'], 'number' ],\n ['LOG10', ['number'], 'number' ],\n ['MID$', ['string', 'number'], 'string'],\n ['MID$', ['string', 'number', 'number'], 'string'],\n ['OCT$', ['number'], 'string' ],\n ['PI', [], 'number'],\n ['POS', ['number'], 'number' ], // arg ignored\n ['POS', ['string','string'], 'number' ], // HP POS\n ['RIGHT$', ['string', 'number'], 'string' ],\n ['RND', [], 'number' ],\n ['RND', ['number'], 'number' ],\n ['ROUND', ['number'], 'number' ],\n ['SGN', ['number'], 'number' ],\n ['SIN', ['number'], 'number' ],\n ['SPACE$', ['number'], 'string' ],\n ['SPC', ['number'], 'string' ],\n ['SQR', ['number'], 'number' ],\n ['STR$', ['number'], 'string' ],\n ['STRING$', ['number', 'number'], 'string'],\n ['STRING$', ['number', 'string'], 'string'],\n ['TAB', ['number'], 'string' ],\n ['TAN', ['number'], 'number' ],\n ['TIM', ['number'], 'number' ], // only HP BASIC?\n ['TIMER', [], 'number' ],\n ['UPS$', ['string'], 'string' ],\n ['VAL', ['string'], 'number' ],\n ['LPAD$', ['string', 'number'], 'string' ],\n ['RPAD$', ['string', 'number'], 'string' ],\n ['NFORMAT$', ['number', 'number'], 'string' ],\n];\n\nvar BUILTIN_MAP : { [name:string] : {args:ValueType[], result:ValueType}[] } = {};\nBUILTIN_DEFS.forEach( (def, idx) => {\n let [name, args, result] = def;\n if (!BUILTIN_MAP[name]) BUILTIN_MAP[name] = [];\n BUILTIN_MAP[name].push({args: args, result: result});\n});\n\nexport const DIALECTS = {\n \"DEFAULT\": MODERN_BASIC,\n \"DARTMOUTH\": DARTMOUTH_4TH_EDITION,\n \"DARTMOUTH4\": DARTMOUTH_4TH_EDITION,\n \"ALTAIR\": ALTAIR_BASIC41,\n \"ALTAIR4\": ALTAIR_BASIC41,\n \"ALTAIR41\": ALTAIR_BASIC41,\n \"TINY\": TINY_BASIC,\n \"ECMA55\": ECMA55_MINIMAL,\n \"MINIMAL\": ECMA55_MINIMAL,\n \"HP\": HP_TIMESHARED_BASIC,\n \"HPB\": HP_TIMESHARED_BASIC,\n \"HPTSB\": HP_TIMESHARED_BASIC,\n \"HP2000\": HP_TIMESHARED_BASIC,\n \"HPBASIC\": HP_TIMESHARED_BASIC,\n \"HPACCESS\": HP_TIMESHARED_BASIC,\n \"DEC11\": DEC_BASIC_11,\n \"DEC\": DEC_BASIC_PLUS,\n \"DECPLUS\": DEC_BASIC_PLUS,\n \"BASICPLUS\": DEC_BASIC_PLUS,\n \"BASICODE\": BASICODE,\n \"APPLESOFT\": APPLESOFT_BASIC,\n \"BASIC80\": BASIC80,\n \"MODERN\": MODERN_BASIC,\n};\n", "import { Segment, CodeListingMap, WorkerResult, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, setupRequireFunction, load, emglobal, getWorkFileAsString, loadNative, gatherFiles, staleFiles, msvcErrorMatcher, moduleInstFn, setupFS, populateFiles, execMain, putWorkFile, anyTargetChanged, parseListing, print_fn, makeErrorMatcher, populateExtraFiles } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\nimport * as basic_compiler from '../../common/basic/compiler';\nimport { getRootBasePlatform, parseXMLPoorly } from \"../../common/util\";\n\nexport function translateShowdown(step: BuildStep): BuildStepResult {\n setupRequireFunction();\n load(\"showdown.min\");\n var showdown = emglobal['showdown'];\n var converter = new showdown.Converter({\n tables: 'true',\n smoothLivePreview: 'true',\n requireSpaceBeforeHeadingText: 'true',\n emoji: 'true',\n });\n var code = getWorkFileAsString(step.path);\n var html = converter.makeHtml(code);\n delete emglobal['require'];\n return {\n output: html\n };\n}\n\nexport function compileInform6(step: BuildStep): BuildStepResult {\n loadNative(\"inform\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.inf\" });\n var objpath = step.prefix + \".z5\";\n if (staleFiles(step, [objpath])) {\n var errorMatcher = msvcErrorMatcher(errors);\n var lstout = \"\";\n var match_fn = (s: string) => {\n if (s.indexOf(\"Error:\") >= 0) {\n errorMatcher(s);\n } else {\n lstout += s;\n lstout += \"\\n\";\n }\n }\n // TODO: step.path must end in '.inf' or error\n var args = ['-afjnops', '-v5', '-Cu', '-E1', '-k', '+/share/lib', step.path];\n var inform: EmscriptenModule = emglobal.inform({\n instantiateWasm: moduleInstFn('inform'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = inform.FS;\n setupFS(FS, 'inform');\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, inform, args);\n if (errors.length)\n return { errors: errors };\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n // parse debug XML\n var symbolmap = {};\n var segments: Segment[] = [];\n var entitymap = {\n // number -> string\n 'object': {}, 'property': {}, 'attribute': {}, 'constant': {}, 'global-variable': {}, 'routine': {},\n };\n var dbgout = FS.readFile(\"gameinfo.dbg\", { encoding: 'utf8' });\n var xmlroot = parseXMLPoorly(dbgout);\n //console.log(xmlroot);\n var segtype = \"ram\";\n xmlroot.children.forEach((node) => {\n switch (node.type) {\n case 'global-variable':\n case 'routine':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n symbolmap[ident] = address;\n entitymap[node.type][address] = ident;\n break;\n case 'object':\n case 'property':\n case 'attribute':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var value = parseInt(node.children.find((c, v) => c.type == 'value').text);\n //entitymap[node.type][ident] = value;\n entitymap[node.type][value] = ident;\n //symbolmap[ident] = address | 0x1000000;\n break;\n case 'story-file-section':\n var name = node.children.find((c, v) => c.type == 'type').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n var endAddress = parseInt(node.children.find((c, v) => c.type == 'end-address').text);\n if (name == \"grammar table\") segtype = \"rom\";\n segments.push({ name: name, start: address, size: endAddress - address, type: segtype });\n }\n });\n // parse listing\n var listings: CodeListingMap = {};\n // 35 +00015 <*> call_vs long_19 location long_424 -> sp \n var lines = parseListing(lstout, /\\s*(\\d+)\\s+[+]([0-9a-f]+)\\s+([<*>]*)\\s*(\\w+)\\s+(.+)/i, -1, 2, 4);\n var lstpath = step.prefix + '.lst';\n listings[lstpath] = { lines: [], asmlines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments,\n debuginfo: entitymap,\n };\n }\n}\n\nexport function compileBASIC(step: BuildStep): WorkerResult {\n var jsonpath = step.path + \".json\";\n gatherFiles(step);\n if (staleFiles(step, [jsonpath])) {\n var parser = new basic_compiler.BASICParser();\n var code = getWorkFileAsString(step.path);\n try {\n var ast = parser.parseFile(code, step.path);\n } catch (e) {\n console.log(e);\n if (parser.errors.length == 0) throw e;\n }\n if (parser.errors.length) {\n return { errors: parser.errors };\n }\n // put AST into JSON (sans source locations) to see if it has changed\n var json = JSON.stringify(ast, (key, value) => { return (key == '$loc' ? undefined : value) });\n putWorkFile(jsonpath, json);\n if (anyTargetChanged(step, [jsonpath])) return {\n output: ast,\n listings: parser.getListings(),\n };\n }\n}\n\nexport function compileWiz(step: BuildStep): WorkerResult {\n loadNative(\"wiz\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.wiz\" });\n var destpath = step.prefix + (params.wiz_rom_ext || \".bin\");\n var errors: WorkerError[] = [];\n if (staleFiles(step, [destpath])) {\n var wiz: EmscriptenModule = emglobal.wiz({\n instantiateWasm: moduleInstFn('wiz'),\n noInitialRun: true,\n print: print_fn,\n //test.wiz:2: error: expected statement, but got identifier `test`\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):\\s*(.+)/, 2, 3, step.path, 1),\n });\n var FS = wiz.FS;\n setupFS(FS, 'wiz');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/common';\n var args = [\n '-o', destpath,\n '-I', FWDIR + '/' + (params.wiz_inc_dir || getRootBasePlatform(step.platform)),\n '-s', 'wla',\n '--color=none',\n step.path];\n args.push('--system', params.wiz_sys_type || params.arch);\n execMain(step, wiz, args);\n if (errors.length)\n return { errors: errors };\n var binout = FS.readFile(destpath, { encoding: 'binary' });\n putWorkFile(destpath, binout);\n var dbgout = FS.readFile(step.prefix + '.sym', { encoding: 'utf8' });\n var symbolmap = {};\n for (var s of dbgout.split(\"\\n\")) {\n var toks = s.split(/ /);\n // 00:4008 header.basic_start\n if (toks && toks.length >= 2) {\n var tokrange = toks[0].split(':');\n var start = parseInt(tokrange[1], 16);\n var sym = toks[1];\n symbolmap[sym] = start;\n }\n }\n return {\n output: binout, //.slice(0),\n errors: errors,\n symbolmap: symbolmap,\n };\n }\n}\n\n", "\nimport { convertDataToUint8Array, getFilenamePrefix, getRootBasePlatform, safeident } from \"../../common/util\";\nimport { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { re_crlf, BuildStepResult, anyTargetChanged, execMain, gatherFiles, msvcErrorMatcher, populateEntry, populateExtraFiles, populateFiles, print_fn, putWorkFile, setupFS, staleFiles, BuildStep, emglobal, loadNative, moduleInstFn, fixParamsWithDefines, store, makeErrorMatcher, getWorkFileAsString } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\n\n/*\n000000r 1 .segment \"CODE\"\n000000r 1 .proc\t_rasterWait: near\n000000r 1 ; int main() { return mul2(2); }\n000000r 1 .dbg line, \"main.c\", 3\n000014r 1 \t.dbg\t func, \"main\", \"00\", extern, \"_main\"\n000000r 1 A2 00 ldx #$00\n00B700 1 BOOT2:\n00B700 1 A2 01 ldx #1 ;track\n00B725 1 00 IBLASTDRVN: .byte 0\n00B726 1 xx xx IBSECSZ: .res 2\n00BA2F 1 2A 2B E8 2C HEX \"2A2BE82C2D2E2F303132F0F133343536\"\n*/\nfunction parseCA65Listing(asmfn: string, code: string, symbols, segments, params, dbg: boolean, listings?: CodeListingMap) {\n var segofs = 0;\n var offset = 0;\n var dbgLineMatch = /^([0-9A-F]+)([r]?)\\s+(\\d+)\\s+[.]dbg\\s+(\\w+), \"([^\"]+)\", (.+)/;\n var funcLineMatch = /\"(\\w+)\", (\\w+), \"(\\w+)\"/;\n var insnLineMatch = /^([0-9A-F]+)([r]?)\\s{1,2}(\\d+)\\s{1,2}([0-9A-Frx ]{11})\\s+(.*)/;\n var segMatch = /[.]segment\\s+\"(\\w+)\"/i;\n var origlines = [];\n var lines = origlines;\n var linenum = 0;\n let curpath = asmfn || '';\n // TODO: only does .c functions, not all .s files\n for (var line of code.split(re_crlf)) {\n var dbgm = dbgLineMatch.exec(line);\n if (dbgm && dbgm[1]) {\n var dbgtype = dbgm[4];\n offset = parseInt(dbgm[1], 16);\n curpath = dbgm[5];\n // new file?\n if (curpath && listings) {\n let l = listings[curpath];\n if (!l) l = listings[curpath] = {lines:[]};\n lines = l.lines;\n }\n if (dbgtype == 'func') {\n var funcm = funcLineMatch.exec(dbgm[6]);\n if (funcm) {\n var funcofs = symbols[funcm[3]];\n if (typeof funcofs === 'number') {\n segofs = funcofs - offset;\n //console.log(funcm[3], funcofs, '-', offset);\n }\n }\n }\n }\n if (dbg && dbgm && dbgtype == 'line') {\n //console.log(dbgm[5], dbgm[6], offset, segofs);\n lines.push({\n path: dbgm[5],\n line: parseInt(dbgm[6]),\n offset: offset + segofs,\n insns: null\n });\n }\n let linem = insnLineMatch.exec(line);\n let topfile = linem && linem[3] == '1';\n if (topfile) {\n let insns = linem[4]?.trim() || '';\n // skip extra insns for macro expansions\n if (!(insns != '' && linem[5] == '')) {\n linenum++;\n }\n if (linem[1]) {\n var offset = parseInt(linem[1], 16);\n if (insns.length) {\n //console.log(dbg, curpath, linenum, offset, segofs, insns);\n if (!dbg) {\n lines.push({\n path: curpath,\n line: linenum,\n offset: offset + segofs,\n insns: insns,\n iscode: true // TODO: can't really tell unless we parse it\n });\n }\n } else {\n var sym = null;\n var label = linem[5];\n if (label?.endsWith(':')) {\n sym = label.substring(0, label.length-1);\n } else if (label?.toLowerCase().startsWith('.proc')) {\n sym = label.split(' ')[1];\n }\n if (sym && !sym.startsWith('@')) {\n var symofs = symbols[sym];\n if (typeof symofs === 'number') {\n segofs = symofs - offset;\n //console.log(sym, segofs, symofs, '-', offset);\n }\n }\n }\n }\n }\n }\n return origlines;\n}\n\nexport function assembleCA65(step: BuildStep): BuildStepResult {\n loadNative(\"ca65\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var CA65: EmscriptenModule = emglobal.ca65({\n instantiateWasm: moduleInstFn('ca65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+): (.+)/, 2, 3, step.path, 1),\n });\n var FS = CA65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n var args = ['-v', '-g', '-I', '/share/asminc', '-o', objpath, '-l', lstpath, step.path];\n args.unshift.apply(args, [\"-D\", \"__8BITWORKSHOP__=1\"]);\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__=1\"]);\n }\n execMain(step, CA65, args);\n if (errors.length) {\n let listings : CodeListingMap = {};\n // TODO? change extension to .lst\n //listings[step.path] = { lines:[], text:getWorkFileAsString(step.path) };\n return { errors, listings };\n }\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"ld65\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLD65(step: BuildStep): BuildStepResult {\n loadNative(\"ld65\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LD65: EmscriptenModule = emglobal.ld65({\n instantiateWasm: moduleInstFn('ld65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) { errors.push({ msg: s, line: 0 }); }\n });\n var FS = LD65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // populate .cfg file, if it is a custom one\n if (store.hasFile(params.cfgfile)) {\n populateEntry(FS, params.cfgfile, store.getFileEntry(params.cfgfile), null);\n }\n var libargs = params.libargs || [];\n var cfgfile = params.cfgfile;\n var args = ['--cfg-path', '/share/cfg',\n '--lib-path', '/share/lib',\n '-C', cfgfile,\n '-Ln', 'main.vice',\n //'--dbgfile', 'main.dbg', // TODO: get proper line numbers\n '-o', 'main',\n '-m', 'main.map'].concat(step.args, libargs);\n //console.log(args);\n execMain(step, LD65, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n var viceout = FS.readFile(\"main.vice\", { encoding: 'utf8' });\n // correct binary for PCEngine\n if (step.platform == 'pce' && aout.length > 0x2000) {\n // move 8 KB from end to front\n let newrom = new Uint8Array(aout.length);\n newrom.set(aout.slice(aout.length - 0x2000), 0);\n newrom.set(aout.slice(0, aout.length - 0x2000), 0x2000);\n aout = newrom;\n }\n //var dbgout = FS.readFile(\"main.dbg\", {encoding:'utf8'});\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n putWorkFile(\"main.vice\", viceout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\", \"main.vice\"]))\n return;\n // parse symbol map (TODO: omit segments, constants)\n var symbolmap = {};\n for (var s of viceout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'al') {\n let ident = toks[2].substr(1);\n if (ident.length != 5 || !ident.startsWith('L')) { // no line numbers\n let ofs = parseInt(toks[1], 16);\n symbolmap[ident] = ofs;\n }\n }\n }\n var segments = [];\n // TODO: CHR, banks, etc\n let re_seglist = /(\\w+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)/;\n let parseseglist = false;\n let m;\n for (let s of mapout.split('\\n')) {\n if (parseseglist && (m = re_seglist.exec(s))) {\n let seg = m[1];\n let start = parseInt(m[2], 16);\n let size = parseInt(m[4], 16);\n let type = '';\n // TODO: better id of ram/rom\n if (seg.startsWith('CODE') || seg == 'STARTUP' || seg == 'RODATA' || seg.endsWith('ROM')) type = 'rom';\n else if (seg == 'ZP' || seg == 'DATA' || seg == 'BSS' || seg.endsWith('RAM')) type = 'ram';\n segments.push({ name: seg, start, size, type });\n }\n if (s == 'Segment list:') parseseglist = true;\n if (s == '') parseseglist = false;\n }\n // build listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n lstout = lstout.split('\\n\\n')[1] || lstout; // remove header\n putWorkFile(fn, lstout);\n //const asmpath = fn.replace(/\\.lst$/, '.ca65'); // TODO! could be .s\n let isECS = step.debuginfo?.systems?.Init != null; // TODO\n if (isECS) {\n var asmlines = [];\n var srclines = parseCA65Listing(fn, lstout, symbolmap, segments, params, true, listings);\n listings[fn] = {\n lines: [],\n text: lstout\n }\n } else {\n var asmlines = parseCA65Listing(fn, lstout, symbolmap, segments, params, false);\n var srclines = parseCA65Listing('', lstout, symbolmap, segments, params, true);\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n }\n }\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nfunction processIncbin(code: string) {\n let re3 = /^\\s*#embed\\s+\"(.+?)\"/gm;\n // find #embed \"filename.bin\" and replace with C array data\n return code.replace(re3, (m, m1) => {\n let filename = m1;\n let filedata = store.getFileData(filename);\n let bytes = convertDataToUint8Array(filedata);\n if (!bytes) throw new Error('#embed: file not found: \"' + filename + '\"');\n let out = '';\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i].toString() + ',';\n }\n return out;\n });\n}\n\nexport function compileCC65(step: BuildStep): BuildStepResult {\n loadNative(\"cc65\");\n var params = step.params;\n // stderr\n var re_err1 = /(.*?):(\\d+): (.+)/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errors.push({\n line: errline,\n msg: matches[3],\n path: matches[1]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var CC65: EmscriptenModule = emglobal.cc65({\n instantiateWasm: moduleInstFn('cc65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: match_fn,\n });\n var FS = CC65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n code = processIncbin(code);\n }\n return code;\n }\n });\n fixParamsWithDefines(step.path, params);\n var args = [\n '-I', '/share/include',\n '-I', '.',\n \"-D\", \"__8BITWORKSHOP__\",\n ];\n if (params.define) {\n params.define.forEach((x) => args.push('-D' + x));\n }\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n var customArgs = params.extra_compiler_args || ['-T', '-g', '-Oirs', '-Cl', '-W', '-pointer-sign,-no-effect'];\n args = args.concat(customArgs, args);\n args.push(step.path);\n //console.log(args);\n execMain(step, CC65, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "import { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { re_crlf, BuildStep, BuildStepResult, load, msvcErrorMatcher, emglobal, populateFiles, execMain, putWorkFile, anyTargetChanged, re_msvc, gatherFiles, getWorkFileAsString, print_fn, setupFS, setupStdin, staleFiles } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction parseDASMListing(lstpath: string, lsttext: string, listings: CodeListingMap, errors: WorkerError[], unresolved: {}) {\n // TODO: this gets very slow\n // TODO: macros that are on adjacent lines don't get offset addresses\n // 4 08ee\t\t a9 00\t start lda\t#01workermain.js:23:5\n let lineMatch = /\\s*(\\d+)\\s+(\\S+)\\s+([0-9a-f]+)\\s+([?0-9a-f][?0-9a-f ]+)?\\s+(.+)?/i;\n let equMatch = /\\bequ\\b/i;\n let macroMatch = /\\bMAC\\s+(\\S+)?/i;\n let lastline = 0;\n let macros = {};\n let lstline = 0;\n let lstlist = listings[lstpath];\n for (let line of lsttext.split(re_crlf)) {\n lstline++;\n let linem = lineMatch.exec(line + \" \");\n if (linem && linem[1] != null) {\n let linenum = parseInt(linem[1]);\n let filename = linem[2];\n let offset = parseInt(linem[3], 16);\n let insns = linem[4];\n let restline = linem[5];\n if (insns && insns.startsWith('?')) insns = null;\n // don't use listing yet\n if (lstlist && lstlist.lines) {\n lstlist.lines.push({\n line: lstline,\n offset: offset,\n insns: insns,\n iscode: true,\n });\n }\n // inside of a file?\n let lst = listings[filename];\n if (lst) {\n var lines = lst.lines;\n // look for MAC statement\n let macmatch = macroMatch.exec(restline);\n if (macmatch) {\n macros[macmatch[1]] = { line: parseInt(linem[1]), file: linem[2].toLowerCase() };\n }\n else if (insns && restline && !restline.match(equMatch)) {\n lines.push({\n line: linenum,\n offset: offset,\n insns: insns,\n iscode: restline[0] != '.'\n });\n }\n lastline = linenum;\n } else {\n // inside of macro?\n let mac = macros[filename.toLowerCase()];\n // macro invocation in main file\n if (mac && linenum == 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n if (insns && mac) {\n let maclst = listings[mac.file];\n if (maclst && maclst.lines) {\n maclst.lines.push({\n path: mac.file,\n line: mac.line + linenum,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n // TODO: a listing file can't include other files\n } else {\n // inside of macro or include file\n if (insns && linem[3] && lastline > 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: null\n });\n }\n }\n }\n // TODO: better symbol test (word boundaries)\n // TODO: ignore IFCONST and IFNCONST usage\n for (let key in unresolved) {\n let l = restline || line;\n // find the identifier substring\n let pos = l.indexOf(key);\n if (pos >= 0) {\n // strip the comment, if any\n let cmt = l.indexOf(';');\n if (cmt < 0 || cmt > pos) {\n // make sure identifier is flanked by non-word chars\n if (new RegExp(\"\\\\b\" + key + \"\\\\b\").exec(l)) {\n errors.push({\n path: filename,\n line: linenum,\n msg: \"Unresolved symbol '\" + key + \"'\"\n });\n }\n }\n }\n }\n }\n let errm = re_msvc.exec(line);\n if (errm) {\n errors.push({\n path: errm[1],\n line: parseInt(errm[2]),\n msg: errm[4]\n })\n }\n }\n}\n\nexport function assembleDASM(step: BuildStep): BuildStepResult {\n load(\"dasm\");\n var re_usl = /(\\w+)\\s+0000\\s+[?][?][?][?]/;\n var unresolved = {};\n var errors = [];\n var errorMatcher = msvcErrorMatcher(errors);\n function match_fn(s: string) {\n // TODO: what if s is not string? (startsWith is not a function)\n var matches = re_usl.exec(s);\n if (matches) {\n var key = matches[1];\n if (key != 'NO_ILLEGAL_OPCODES') { // TODO\n unresolved[matches[1]] = 0;\n }\n } else if (s.startsWith(\"Warning:\")) {\n errors.push({ line: 0, msg: s.substr(9) });\n } else if (s.startsWith(\"unable \")) {\n errors.push({ line: 0, msg: s });\n } else if (s.startsWith(\"segment: \")) {\n errors.push({ line: 0, msg: \"Segment overflow: \" + s.substring(9) });\n } else if (s.toLowerCase().indexOf('error:') >= 0) {\n errors.push({ line: 0, msg: s.trim() });\n } else {\n errorMatcher(s);\n }\n }\n var Module: EmscriptenModule = emglobal.DASM({\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.sym';\n execMain(step, Module, [step.path, '-f3',\n \"-l\" + lstpath,\n \"-o\" + binpath,\n \"-s\" + sympath]);\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n //listings[lstpath] = {lines:[], text:alst};\n for (let path of step.files) {\n listings[path] = { lines: [] };\n }\n parseDASMListing(lstpath, alst, listings, errors, unresolved);\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n putWorkFile(sympath, asym);\n // return unchanged if no files changed\n // TODO: what if listing or symbols change?\n if (!anyTargetChanged(step, [binpath/*, lstpath, sympath*/]))\n return;\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n var toks = s.split(/\\s+/);\n if (toks && toks.length >= 2 && !toks[0].startsWith('-')) {\n symbolmap[toks[0]] = parseInt(toks[1], 16);\n }\n }\n // for bataribasic (TODO)\n if (step['bblines']) {\n let lst = listings[step.path];\n if (lst) {\n lst.asmlines = lst.lines;\n lst.text = alst;\n lst.lines = [];\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\n\nfunction preprocessBatariBasic(code: string): string {\n load(\"bbpreprocess\");\n var bbout = \"\";\n function addbbout_fn(s) {\n bbout += s;\n bbout += \"\\n\";\n }\n var BBPRE: EmscriptenModule = emglobal.preprocess({\n noInitialRun: true,\n //logReadFiles:true,\n print: addbbout_fn,\n printErr: print_fn,\n noFSInit: true,\n });\n var FS = BBPRE.FS;\n setupStdin(FS, code);\n BBPRE.callMain([]);\n console.log(\"preprocess \" + code.length + \" -> \" + bbout.length + \" bytes\");\n return bbout;\n}\n\nexport function compileBatariBasic(step: BuildStep): BuildStepResult {\n load(\"bb2600basic\");\n var params = step.params;\n // stdout\n var asmout = \"\";\n function addasmout_fn(s) {\n asmout += s;\n asmout += \"\\n\";\n }\n // stderr\n var re_err1 = /[(](\\d+)[)]:?\\s*(.+)/;\n var errors = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[1]);\n errors.push({\n line: errline,\n msg: matches[2]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.bas\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var BB: EmscriptenModule = emglobal.bb2600basic({\n noInitialRun: true,\n //logReadFiles:true,\n print: addasmout_fn,\n printErr: match_fn,\n noFSInit: true,\n TOTAL_MEMORY: 64 * 1024 * 1024,\n });\n var FS = BB.FS;\n populateFiles(step, FS);\n // preprocess, pipe file to stdin\n var code = getWorkFileAsString(step.path);\n code = preprocessBatariBasic(code);\n setupStdin(FS, code);\n setupFS(FS, '2600basic');\n execMain(step, BB, [\"-i\", \"/share\", step.path]);\n if (errors.length)\n return { errors: errors };\n // build final assembly output from include file list\n var includesout = FS.readFile(\"includes.bB\", { encoding: 'utf8' });\n var redefsout = FS.readFile(\"2600basic_variable_redefs.h\", { encoding: 'utf8' });\n var includes = includesout.trim().split(\"\\n\");\n var combinedasm = \"\";\n var splitasm = asmout.split(\"bB.asm file is split here\");\n for (var incfile of includes) {\n var inctext;\n if (incfile == \"bB.asm\")\n inctext = splitasm[0];\n else if (incfile == \"bB2.asm\")\n inctext = splitasm[1];\n else\n inctext = FS.readFile(\"/share/includes/\" + incfile, { encoding: 'utf8' });\n console.log(incfile, inctext.length);\n combinedasm += \"\\n\\n;;;\" + incfile + \"\\n\\n\";\n combinedasm += inctext;\n }\n // TODO: ; bB.asm file is split here\n putWorkFile(destpath, combinedasm);\n putWorkFile(\"2600basic.h\", FS.readFile(\"/share/includes/2600basic.h\"));\n putWorkFile(\"2600basic_variable_redefs.h\", redefsout);\n }\n return {\n nexttool: \"dasm\",\n path: destpath,\n args: [destpath],\n files: [destpath, \"2600basic.h\", \"2600basic_variable_redefs.h\"],\n bblines: true,\n };\n}", "import { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, loadNative, gatherFiles, staleFiles, emglobal, moduleInstFn, populateFiles, execMain, putWorkFile, setupFS, populateExtraFiles, anyTargetChanged, parseListing, print_fn, msvcErrorMatcher, getWorkFileAsString, setupStdin, preprocessMCPP, parseSourceLines } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction hexToArray(s, ofs) {\n var buf = new ArrayBuffer(s.length / 2);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(s.slice(i * 2 + ofs, i * 2 + ofs + 2), 16);\n }\n return arr;\n}\n\nfunction parseIHX(ihx, rom_start, rom_size, errors) {\n var output = new Uint8Array(new ArrayBuffer(rom_size));\n var high_size = 0;\n for (var s of ihx.split(\"\\n\")) {\n if (s[0] == ':') {\n var arr = hexToArray(s, 1);\n var count = arr[0];\n var address = (arr[1] << 8) + arr[2] - rom_start;\n var rectype = arr[3];\n //console.log(rectype,address.toString(16),count,arr);\n if (rectype == 0) {\n for (var i = 0; i < count; i++) {\n var b = arr[4 + i];\n output[i + address] = b;\n }\n if (i + address > high_size) high_size = i + address;\n } else if (rectype == 1) {\n break;\n } else {\n console.log(s); // unknown record type\n }\n }\n }\n // TODO: return ROM anyway?\n if (high_size > rom_size) {\n //errors.push({line:0, msg:\"ROM size too large: 0x\" + high_size.toString(16) + \" > 0x\" + rom_size.toString(16)});\n }\n return output;\n}\n\nexport function assembleSDASZ80(step: BuildStep): BuildStepResult {\n loadNative(\"sdasz80\");\n var objout, lstout, symout;\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".rel\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n //?ASxxxx-Error-<o> in line 1 of main.asm null\n // <o> .org in REL area or directive / mnemonic error\n // ?ASxxxx-Error-<q> in line 1627 of cosmic.asm\n // <q> missing or improper operators, terminators, or delimiters\n var match_asm_re1 = / in line (\\d+) of (\\S+)/; // TODO\n var match_asm_re2 = / <\\w> (.+)/; // TODO\n var errline = 0;\n var errpath = step.path;\n var match_asm_fn = (s: string) => {\n var m = match_asm_re1.exec(s);\n if (m) {\n errline = parseInt(m[1]);\n errpath = m[2];\n } else {\n m = match_asm_re2.exec(s);\n if (m) {\n errors.push({\n line: errline,\n path: errpath,\n msg: m[1]\n });\n }\n }\n }\n var ASZ80: EmscriptenModule = emglobal.sdasz80({\n instantiateWasm: moduleInstFn('sdasz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_asm_fn,\n printErr: match_asm_fn,\n });\n var FS = ASZ80.FS;\n populateFiles(step, FS);\n execMain(step, ASZ80, ['-plosgffwy', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n objout = FS.readFile(objpath, { encoding: 'utf8' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"sdldz80\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n //symout = FS.readFile(\"main.sym\", {encoding:'utf8'});\n}\n\nexport function linkSDLDZ80(step: BuildStep) {\n loadNative(\"sdldz80\");\n var errors = [];\n gatherFiles(step);\n var binpath = \"main.ihx\";\n if (staleFiles(step, [binpath])) {\n //?ASlink-Warning-Undefined Global '__divsint' referenced by module 'main'\n var match_aslink_re = /\\?ASlink-(\\w+)-(.+)/;\n var match_aslink_fn = (s: string) => {\n var matches = match_aslink_re.exec(s);\n if (matches) {\n errors.push({\n line: 0,\n msg: matches[2]\n });\n }\n }\n var params = step.params;\n var LDZ80: EmscriptenModule = emglobal.sdldz80({\n instantiateWasm: moduleInstFn('sdldz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_aslink_fn,\n printErr: match_aslink_fn,\n });\n var FS = LDZ80.FS;\n setupFS(FS, 'sdcc');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // TODO: coleco hack so that -u flag works\n if (step.platform.startsWith(\"coleco\")) {\n FS.writeFile('crt0.rel', FS.readFile('/share/lib/coleco/crt0.rel', { encoding: 'utf8' }));\n FS.writeFile('crt0.lst', '\\n'); // TODO: needed so -u flag works\n }\n var args = ['-mjwxyu',\n '-i', 'main.ihx', // TODO: main?\n '-b', '_CODE=0x' + params.code_start.toString(16),\n '-b', '_DATA=0x' + params.data_start.toString(16),\n '-k', '/share/lib/z80',\n '-l', 'z80'];\n if (params.extra_link_args)\n args.push.apply(args, params.extra_link_args);\n args.push.apply(args, step.args);\n //console.log(args);\n execMain(step, LDZ80, args);\n var hexout = FS.readFile(\"main.ihx\", { encoding: 'utf8' });\n var noiout = FS.readFile(\"main.noi\", { encoding: 'utf8' });\n putWorkFile(\"main.ihx\", hexout);\n putWorkFile(\"main.noi\", noiout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main.ihx\", \"main.noi\"]))\n return;\n // parse binary file\n var binout = parseIHX(hexout, params.rom_start !== undefined ? params.rom_start : params.code_start, params.rom_size, errors);\n if (errors.length) {\n return { errors: errors };\n }\n // parse listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var rstout = FS.readFile(fn.replace('.lst', '.rst'), { encoding: 'utf8' });\n // 0000 21 02 00 [10] 52 \tld\thl, #2\n var asmlines = parseListing(rstout, /^\\s*([0-9A-F]{4})\\s+([0-9A-F][0-9A-F r]*[0-9A-F])\\s+\\[([0-9 ]+)\\]?\\s+(\\d+) (.*)/i, 4, 1, 2, 3);\n var srclines = parseSourceLines(rstout, /^\\s+\\d+ ;<stdin>:(\\d+):/i, /^\\s*([0-9A-F]{4})/i);\n putWorkFile(fn, rstout);\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: rstout\n };\n }\n }\n // parse symbol map\n var symbolmap = {};\n for (var s of noiout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'DEF' && !toks[1].startsWith(\"A$\")) {\n symbolmap[toks[1]] = parseInt(toks[2], 16);\n }\n }\n // build segment map\n var seg_re = /^s__(\\w+)$/;\n var segments = [];\n // TODO: use stack params for stack segment\n for (let ident in symbolmap) {\n let m = seg_re.exec(ident);\n if (m) {\n let seg = m[1];\n let segstart = symbolmap[ident]; // s__SEG\n let segsize = symbolmap['l__' + seg]; // l__SEG\n if (segstart >= 0 && segsize > 0) {\n var type = null;\n if (['INITIALIZER', 'GSINIT', 'GSFINAL'].includes(seg)) type = 'rom';\n else if (seg.startsWith('CODE')) type = 'rom';\n else if (['DATA', 'INITIALIZED'].includes(seg)) type = 'ram';\n if (type == 'rom' || segstart > 0) // ignore HEADER0, CABS0, etc (TODO?)\n segments.push({ name: seg, start: segstart, size: segsize, type: type });\n }\n }\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function compileSDCC(step: BuildStep): BuildStepResult {\n\n gatherFiles(step, {\n mainFilePath: \"main.c\" // not used\n });\n var outpath = step.prefix + \".asm\";\n if (staleFiles(step, [outpath])) {\n var errors = [];\n var params = step.params;\n loadNative('sdcc');\n var SDCC: EmscriptenModule = emglobal.sdcc({\n instantiateWasm: moduleInstFn('sdcc'),\n noInitialRun: true,\n noFSInit: true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n //TOTAL_MEMORY:256*1024*1024,\n });\n var FS = SDCC.FS;\n populateFiles(step, FS);\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, 'sdcc');\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // pipe file to stdin\n setupStdin(FS, code);\n setupFS(FS, 'sdcc');\n var args = ['--vc', '--std-sdcc99', '-mz80', //'-Wall',\n '--c1mode',\n //'--debug',\n //'-S', 'main.c',\n //'--asm=sdasz80',\n //'--reserve-regs-iy',\n '--less-pedantic',\n ///'--fomit-frame-pointer',\n //'--opt-code-speed',\n //'--max-allocs-per-node', '1000',\n //'--cyclomatic',\n //'--nooverlay',\n //'--nogcse',\n //'--nolabelopt',\n //'--noinvariant',\n //'--noinduction',\n //'--nojtbound',\n //'--noloopreverse',\n '-o', outpath];\n // if \"#pragma opt_code\" found do not disable optimziations\n if (!/^\\s*#pragma\\s+opt_code/m.exec(code)) {\n args.push.apply(args, [\n '--oldralloc',\n '--no-peep',\n '--nolospre'\n ]);\n }\n if (params.extra_compile_args) {\n args.push.apply(args, params.extra_compile_args);\n }\n execMain(step, SDCC, args);\n // TODO: preprocessor errors w/ correct file\n if (errors.length /* && nwarnings < msvc_errors.length*/) {\n return { errors: errors };\n }\n // massage the asm output\n var asmout = FS.readFile(outpath, { encoding: 'utf8' });\n asmout = \" .area _HOME\\n .area _CODE\\n .area _INITIALIZER\\n .area _DATA\\n .area _INITIALIZED\\n .area _BSEG\\n .area _BSS\\n .area _HEAP\\n\" + asmout;\n putWorkFile(outpath, asmout);\n }\n return {\n nexttool: \"sdasz80\",\n path: outpath,\n args: [outpath],\n files: [outpath],\n };\n}\n", "\ntype Endian = 'big' | 'little';\n\ntype Symbol = {\n value: number\n}\n\ntype AssemblerVar = {\n bits : number,\n toks : string[],\n endian? : Endian,\n iprel? : boolean,\n ipofs? : number,\n ipmul? : number,\n}\n\ntype AssemblerRuleSlice = {\n a : number; // argument index\n b : number; // bit index\n n : number; // # of bits\n}\n\ntype AssemblerRule = {\n fmt : string,\n bits : (string | number | AssemblerRuleSlice)[],\n // added at runtime\n re? : RegExp,\n prefix? : string,\n varlist? : string[]\n}\n\ntype AssemblerVarList = {[name:string] : AssemblerVar};\n\ntype AssemblerLine = {line:number, offset:number, nbits:number, insns?:string};\n\ntype AssemblerFixup = {\n sym:string,\n ofs:number,\n size:number;\n srcofs:number,\n dstofs:number,\n dstlen:number,\n line:number,\n iprel:boolean,\n ipofs:number,\n ipmul:number,\n endian:Endian\n};\n\ntype AssemblerSpec = {\n name : string,\n width : number,\n vars : AssemblerVarList,\n rules : AssemblerRule[]\n}\n\ntype AssemblerInstruction = {opcode:number, nbits : number};\ntype AssemblerErrorResult = {error:string};\ntype AssemblerLineResult = AssemblerErrorResult | AssemblerInstruction;\n\ntype AssemblerError = {msg:string, line:number};\n\ntype AssemblerState = {\n ip: number,\n line: number,\n origin: number,\n codelen: number,\n intermediate: any,\n output: number[],\n lines: AssemblerLine[],\n errors: AssemblerError[],\n fixups: AssemblerFixup[]\n}\n\nconst isError = (o: AssemblerLineResult): o is AssemblerErrorResult => (<AssemblerErrorResult>o).error !== undefined\n\nfunction hex(v:number, nd:number) {\n try {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n }\n var s = v.toString(16).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nfunction stringToData(s:string) : number[] {\n var data = [];\n for (var i=0; i<s.length; i++) {\n data[i] = s.charCodeAt(i);\n }\n return data;\n}\n\n\nexport class Assembler {\n spec : AssemblerSpec;\n ip = 0;\n origin = 0;\n linenum = 0;\n symbols : {[name:string] : Symbol} = {};\n errors : AssemblerError[] = [];\n outwords : number[] = [];\n asmlines : AssemblerLine[] = [];\n fixups : AssemblerFixup[] = [];\n width = 8;\n codelen = 0;\n aborted = false;\n \n constructor(spec? : AssemblerSpec) {\n this.spec = spec;\n if (spec) {\n this.preprocessRules();\n }\n }\n\n rule2regex(rule : AssemblerRule, vars : AssemblerVarList) {\n var s = rule.fmt;\n if (!s || !(typeof s === 'string'))\n throw Error('Each rule must have a \"fmt\" string field');\n if (!rule.bits || !(rule.bits instanceof Array))\n throw Error('Each rule must have a \"bits\" array field');\n var varlist = [];\n rule.prefix = s.split(/\\s+/)[0];\n s = s.replace(/\\+/g, '\\\\+');\n s = s.replace(/\\*/g, '\\\\*');\n s = s.replace(/\\s+/g, '\\\\s+');\n s = s.replace(/\\[/g, '\\\\[');\n s = s.replace(/\\]/g, '\\\\]');\n s = s.replace(/\\(/g, '\\\\(');\n s = s.replace(/\\)/g, '\\\\)');\n s = s.replace(/\\./g, '\\\\.');\n // TODO: more escapes?\n s = s.replace(/~\\w+/g, (varname:string) => {\n varname = varname.substr(1);\n var v = vars[varname];\n varlist.push(varname);\n if (!v)\n throw Error('Could not find variable definition for \"~' + varname + '\"');\n else if (v.toks)\n return '(\\\\w+)';\n else\n return '([0-9]+|[$][0-9a-f]+|\\\\w+)';\n });\n try {\n rule.re = new RegExp('^'+s+'$', 'i');\n } catch (e) {\n throw Error(\"Bad regex for rule \\\"\" + rule.fmt + \"\\\": /\" + s + \"/ -- \" + e);\n }\n rule.varlist = varlist;\n // TODO: check rule constraints\n return rule;\n }\n\n preprocessRules() {\n if (this.spec.width) {\n this.width = this.spec.width || 8;\n }\n for (var rule of this.spec.rules) {\n this.rule2regex(rule, this.spec.vars);\n }\n }\n warning(msg:string, line?:number) {\n this.errors.push({msg:msg, line:line?line:this.linenum});\n }\n fatal(msg:string, line?:number) {\n this.warning(msg, line);\n this.aborted = true;\n }\n fatalIf(msg?:string, line?:number) {\n if (msg) this.fatal(msg, line);\n }\n addBytes(result:AssemblerInstruction) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:result.nbits\n });\n var op = result.opcode;\n var nb = result.nbits/this.width;\n for (var i=0; i<nb; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = (op >> (nb-1-i)*this.width) & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = op;\n }\n }\n addWords(data:number[]) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:this.width*data.length\n });\n for (var i=0; i<data.length; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = data[i] & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = data[i];\n }\n }\n\n parseData(toks:string[]) : number[] {\n var data = [];\n for (var i=0; i<toks.length; i++) {\n data[i] = this.parseConst(toks[i]);\n }\n return data;\n }\n\n alignIP(align) {\n if (align < 1 || align > this.codelen)\n this.fatal(\"Invalid alignment value\");\n else\n this.ip = Math.floor((this.ip+align-1)/align)*align;\n }\n\n parseConst(s:string, nbits?:number) : number {\n // TODO: check bit length\n if (s && s[0] == '$')\n return parseInt(s.substr(1), 16);\n else\n return parseInt(s);\n }\n\n swapEndian(x: number, nbits: number) {\n var y = 0;\n while (nbits > 0) {\n var n = Math.min(nbits, this.width);\n var mask = (1 << n) - 1;\n y <<= n;\n y |= (x & mask);\n x >>>= n;\n nbits -= n;\n }\n return y;\n }\n\n buildInstruction(rule:AssemblerRule, m:string[]) : AssemblerLineResult {\n var opcode = 0;\n var oplen = 0;\n // iterate over each component of the rule output (\"bits\")\n for (let b of rule.bits) {\n let n,x;\n // is a string? then it's a bit constant\n // TODO\n if (typeof b === \"string\") {\n n = b.length;\n x = parseInt(b,2);\n } else {\n // is it a slice {a,b,n} or just a number?\n var index = typeof b === \"number\" ? b : b.a;\n // it's an indexed variable, look up its variable\n var id = m[index+1];\n var v = this.spec.vars[rule.varlist[index]];\n if (!v) {\n return {error:`Could not find matching identifier for '${m[0]}' index ${index}`};\n }\n n = v.bits;\n var shift = 0;\n if (typeof b !== \"number\") {\n n = b.n;\n shift = b.b;\n }\n // is it an enumerated type? look up the index of its keyword\n if (v.toks) {\n x = v.toks.indexOf(id);\n if (x < 0)\n return {error:\"Can't use '\" + id + \"' here, only one of: \" + v.toks.join(', ')};\n } else {\n // otherwise, parse it as a constant\n x = this.parseConst(id, n);\n // is it a label? add fixup\n if (isNaN(x)) {\n this.fixups.push({\n sym:id, ofs:this.ip, size:v.bits, line:this.linenum,\n dstlen:n, dstofs:oplen, srcofs:shift,\n endian:v.endian,\n iprel:!!v.iprel, ipofs:(v.ipofs+0), ipmul:v.ipmul||1\n });\n x = 0;\n } else {\n var mask = (1<<v.bits)-1;\n if ((x&mask) != x)\n return {error:\"Value \" + x + \" does not fit in \" + v.bits + \" bits\"};\n }\n }\n // if little endian, we need to swap ordering\n if (v.endian == 'little') x = this.swapEndian(x, v.bits);\n // is it an array slice? slice the bits\n if (typeof b !== \"number\") {\n x = (x >>> shift) & ((1 << b.n)-1);\n }\n }\n opcode = (opcode << n) | x;\n oplen += n;\n }\n if (oplen == 0)\n this.warning(\"Opcode had zero length\");\n else if (oplen > 32)\n this.warning(\"Opcodes > 32 bits not supported\");\n else if ((oplen % this.width) != 0)\n this.warning(\"Opcode was not word-aligned (\" + oplen + \" bits)\");\n return {opcode:opcode, nbits:oplen};\n }\n\n loadArch(arch:string) : string {\n if (this.loadJSON) {\n var json = this.loadJSON(arch + \".json\");\n if (json && json.vars && json.rules) {\n this.spec = json;\n this.preprocessRules();\n } else {\n return (\"Could not load arch file '\" + arch + \".json'\");\n }\n }\n }\n\n parseDirective(tokens) {\n var cmd = tokens[0].toLowerCase();\n if (cmd == '.define')\n this.symbols[tokens[1].toLowerCase()] = {value:tokens[2]};\n else if (cmd == '.org')\n this.ip = this.origin = parseInt(tokens[1]);\n else if (cmd == '.len')\n this.codelen = parseInt(tokens[1]);\n else if (cmd == '.width')\n this.width = parseInt(tokens[1]);\n else if (cmd == '.arch')\n this.fatalIf(this.loadArch(tokens[1]));\n else if (cmd == '.include')\n this.fatalIf(this.loadInclude(tokens[1]));\n else if (cmd == '.module')\n this.fatalIf(this.loadModule(tokens[1]));\n else if (cmd == '.data')\n this.addWords(this.parseData(tokens.slice(1)));\n else if (cmd == '.string')\n this.addWords(stringToData(tokens.slice(1).join(' ')));\n else if (cmd == '.align')\n this.alignIP(this.parseConst(tokens[1]));\n else\n this.warning(\"Unrecognized directive: \" + tokens);\n }\n\n assemble(line:string) : AssemblerInstruction {\n this.linenum++;\n // remove comments\n line = line.replace(/[;].*/g, '').trim();\n // is it a directive?\n if (line[0] == '.') {\n var tokens = line.split(/\\s+/);\n this.parseDirective(tokens);\n return;\n }\n // make it lowercase\n line = line.toLowerCase();\n // find labels\n line = line.replace(/(\\w+):/, (_label, label) => {\n this.symbols[label] = {value:this.ip};\n return ''; // replace label with blank\n });\n line = line.trim();\n if (line == '')\n return; // empty line\n // look at each rule in order\n if (!this.spec) { this.fatal(\"Need to load .arch first\"); return; }\n var lastError;\n for (var rule of this.spec.rules) {\n var m = rule.re.exec(line);\n if (m) {\n var result = this.buildInstruction(rule, m);\n if (!isError(result)) {\n this.addBytes(result);\n return result;\n } else {\n lastError = result.error;\n }\n }\n }\n this.warning(lastError ? lastError : (\"Could not decode instruction: \" + line));\n }\n\n applyFixup(fix: AssemblerFixup, sym: Symbol) {\n var ofs = fix.ofs + Math.floor(fix.dstofs/this.width);\n var mask = ((1<<fix.size)-1);\n var value = this.parseConst(sym.value+\"\", fix.dstlen);\n if (fix.iprel)\n value = (value - fix.ofs) * fix.ipmul - fix.ipofs;\n if (fix.srcofs == 0 && (value > mask || value < -mask))\n this.warning(\"Symbol \" + fix.sym + \" (\" + value + \") does not fit in \" + fix.dstlen + \" bits\", fix.line);\n //console.log(hex(value,8), fix.srcofs, fix.dstofs, fix.dstlen);\n if (fix.srcofs > 0)\n value >>>= fix.srcofs;\n value &= (1 << fix.dstlen) - 1;\n // TODO: make it work for all widths\n if (this.width == 32) {\n var shift = 32 - fix.dstofs - fix.dstlen;\n value <<= shift;\n }\n // TODO: check range\n if (fix.size <= this.width) {\n this.outwords[ofs - this.origin] ^= value;\n } else {\n // swap if we want big endian (we'll apply in LSB first order)\n if (fix.endian == 'big') value = this.swapEndian(value, fix.size);\n // apply multi-byte fixup\n while (value) {\n if (value & this.outwords[ofs - this.origin]) {\n this.warning(\"Instruction bits overlapped: \" + hex(this.outwords[ofs - this.origin],8), hex(value,8));\n } else {\n this.outwords[ofs - this.origin] ^= value & ((1<<this.width)-1);\n }\n value >>>= this.width;\n ofs++;\n }\n }\n }\n\n finish() : AssemblerState {\n // apply fixups\n for (var i=0; i<this.fixups.length; i++) {\n var fix = this.fixups[i];\n var sym = this.symbols[fix.sym];\n if (sym) {\n this.applyFixup(fix, sym);\n } else {\n this.warning(\"Symbol '\" + fix.sym + \"' not found\");\n }\n }\n // update asmlines\n for (var i=0; i<this.asmlines.length; i++) {\n var al = this.asmlines[i];\n al.insns = '';\n for (var j=0; j<al.nbits/this.width; j++) {\n var word = this.outwords[al.offset + j - this.origin];\n if (j>0) al.insns += ' ';\n al.insns += hex(word,this.width/4);\n }\n }\n while (this.outwords.length < this.codelen) {\n this.outwords.push(0);\n }\n this.fixups = [];\n return this.state();\n }\n\n assembleFile(text) : AssemblerState {\n var lines = text.split(/\\n/g);\n for (var i=0; i<lines.length && !this.aborted; i++) {\n try {\n this.assemble(lines[i]);\n } catch (e) {\n console.log(e);\n this.fatal(\"Exception during assembly: \" + e);\n }\n }\n return this.finish();\n }\n\n state() : AssemblerState {\n return {ip:this.ip, line:this.linenum, origin:this.origin, codelen:this.codelen,\n intermediate:{}, // TODO: listing, symbols?\n output:this.outwords,\n lines:this.asmlines,\n errors:this.errors,\n fixups:this.fixups};\n }\n \n // methods to implement in subclass\n \n loadJSON : (path : string) => any;\n loadInclude : (path : string) => string;\n loadModule : (path : string) => string;\n}\n\n", "import { SourceLocation } from \"../workertypes\";\n\nexport interface HDLModuleRunner {\n state: any; // live state or proxy object\n eval() : void;\n tick() : void;\n tick2(iters: number) : void;\n powercycle() : void;\n isFinished() : boolean;\n isStopped() : boolean;\n getGlobals() : {};\n saveState() : {};\n loadState(state: {}) : void;\n dispose() : void;\n getFileData : (filename : string) => string|Uint8Array;\n}\n\nexport interface HDLModuleTrace extends HDLModuleRunner {\n trace: any;\n resetTrace() : void;\n nextTrace() : void;\n}\n\n///\n\nexport interface HDLLogicType extends HDLSourceObject {\n left: number;\n right: number;\n signed: boolean;\n}\n\nexport interface HDLUnpackArray extends HDLSourceObject {\n subtype: HDLDataType;\n low: HDLConstant;\n high: HDLConstant;\n}\n\nexport interface HDLNativeType extends HDLSourceObject {\n jstype: string;\n}\n\nexport type HDLDataType = HDLLogicType | HDLUnpackArray | HDLNativeType;\n\nexport function isLogicType(arg:any): arg is HDLLogicType {\n return typeof arg.left === 'number' && typeof arg.right === 'number';\n}\n\nexport function isArrayType(arg:any): arg is HDLUnpackArray {\n return arg.subtype != null && arg.low != null && arg.high != null\n && typeof arg.low.cvalue === 'number' && typeof arg.high.cvalue === 'number';\n}\n\nexport class HDLFile {\n id: string;\n filename: string;\n isModule: boolean;\n}\n\nexport interface HDLSourceLocation extends SourceLocation {\n hdlfile: HDLFile;\n end_line?: number;\n}\n\nexport interface HDLSourceObject {\n $loc?: HDLSourceLocation;\n}\n\nexport interface HDLDataTypeObject extends HDLSourceObject {\n dtype: HDLDataType;\n}\n\nexport function hasDataType(arg: any) : arg is HDLDataTypeObject {\n return typeof arg.dtype === 'object';\n}\n\nexport interface HDLModuleDef extends HDLSourceObject {\n name: string;\n origName: string;\n blocks: HDLBlock[];\n instances: HDLInstanceDef[];\n vardefs: { [id:string] : HDLVariableDef };\n}\n\nexport interface HDLVariableDef extends HDLDataTypeObject {\n name: string;\n origName: string;\n isInput: boolean;\n isOutput: boolean;\n isParam: boolean;\n constValue?: HDLConstant;\n initValue?: HDLBlock;\n}\n\nexport function isVarDecl(arg:any): arg is HDLVariableDef {\n return typeof arg.isParam !== 'undefined';\n}\n\nexport interface HDLConstant extends HDLDataTypeObject {\n cvalue: number;\n bigvalue: bigint;\n}\n\nexport function isConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.cvalue === 'number';\n}\n\nexport function isBigConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.bigvalue === 'bigint';\n}\n\nexport interface HDLHierarchyDef extends HDLSourceObject {\n name: string;\n module: HDLModuleDef;\n parent: HDLHierarchyDef;\n children: HDLHierarchyDef[];\n}\n\nexport interface HDLInstanceDef extends HDLSourceObject {\n name: string;\n origName: string;\n module: HDLModuleDef;\n ports: HDLPort[];\n}\n\nexport interface HDLVarRef extends HDLDataTypeObject {\n refname: string;\n //TODO? vardef: HDLVariableDef;\n}\n\nexport function isVarRef(arg:any): arg is HDLVarRef {\n return arg.refname != null;\n}\n\nexport interface HDLUnop extends HDLDataTypeObject {\n op: string;\n left: HDLExpr;\n}\n\nexport interface HDLExtendop extends HDLUnop {\n width: number;\n widthminv: number;\n}\n\nexport function isUnop(arg:any): arg is HDLUnop {\n return arg.op != null && arg.left != null && arg.right == null;\n}\n\nexport interface HDLBinop extends HDLUnop {\n right: HDLExpr;\n}\n\nexport function isBinop(arg:any): arg is HDLBinop {\n return arg.op != null && arg.left != null && arg.right != null && arg.cond == null;\n}\n\nexport interface HDLTriop extends HDLBinop {\n cond: HDLExpr;\n}\n\nexport function isTriop(arg:any): arg is HDLTriop {\n return arg.op != null && arg.cond != null;\n}\n\nexport interface HDLWhileOp extends HDLDataTypeObject {\n op: 'while';\n precond: HDLExpr;\n loopcond: HDLExpr;\n body: HDLExpr;\n inc: HDLExpr;\n}\n\nexport function isWhileop(arg:any): arg is HDLWhileOp {\n return arg.op === 'while' && arg.loopcond != null;\n}\n\nexport interface HDLBlock extends HDLSourceObject {\n blocktype: string;\n name: string;\n exprs: HDLExpr[];\n}\n\nexport function isBlock(arg:any): arg is HDLBlock {\n return arg.blocktype != null;\n}\n\nexport interface HDLAlwaysBlock extends HDLBlock {\n senlist: HDLSensItem[];\n}\n\nexport interface HDLSensItem extends HDLSourceObject {\n edgeType : \"POS\" | \"NEG\";\n expr: HDLExpr;\n}\n\nexport interface HDLPort extends HDLSourceObject {\n name: string;\n expr: HDLExpr;\n}\n\nexport interface HDLFuncCall extends HDLDataTypeObject {\n funcname: string;\n args: HDLExpr[];\n}\n\nexport function isFuncCall(arg:any): arg is HDLFuncCall {\n return typeof arg.funcname === 'string';\n}\n\nexport interface HDLArrayItem {\n index: number;\n expr: HDLExpr;\n}\n\nexport function isArrayItem(arg:any): arg is HDLArrayItem {\n return typeof arg.index === 'number' && arg.expr != null;\n}\n\nexport type HDLExpr = HDLVarRef | HDLUnop | HDLBinop | HDLTriop | HDLBlock | HDLVariableDef | HDLFuncCall | HDLConstant;\n\nexport interface HDLUnit {\n files: { [id: string]: HDLFile };\n dtypes: { [id: string]: HDLDataType };\n modules: { [id: string]: HDLModuleDef };\n hierarchies: { [id: string]: HDLHierarchyDef };\n}\n\nexport type HDLValue = number | bigint | Uint8Array | Uint16Array | Uint32Array | HDLValue[];\n\n", "\nimport { parseXMLPoorly, XMLNode } from \"../util\";\nimport { HDLAlwaysBlock, HDLArrayItem, HDLBinop, HDLBlock, HDLConstant, HDLDataType, HDLDataTypeObject, HDLExpr, HDLExtendop, HDLFile, HDLFuncCall, HDLHierarchyDef, HDLInstanceDef, HDLLogicType, HDLModuleDef, HDLNativeType, HDLPort, HDLSensItem, HDLSourceLocation, HDLSourceObject, HDLTriop, HDLUnit, HDLUnop, HDLUnpackArray, HDLValue, HDLVariableDef, HDLVarRef, HDLWhileOp, isArrayType, isBinop, isBlock, isConstExpr, isFuncCall, isLogicType, isTriop, isUnop, isVarDecl, isVarRef } from \"./hdltypes\";\n\n/**\n * Whaa?\n * \n * Each hierarchy takes (uint32[] -> uint32[])\n * - convert to/from js object\n * - JS or WASM\n * - Fixed-size packets\n * - state is another uint32[]\n * Find optimal packing of bits\n * Find clocks\n * Find pivots (reset, state) concat them together\n * Dependency cycles\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\n\n export class CompileError extends Error implements HDLSourceObject {\n $loc: HDLSourceLocation;\n constructor($loc: HDLSourceLocation, msg: string) {\n super(msg);\n this.$loc = $loc;\n Object.setPrototypeOf(this, CompileError.prototype);\n }\n}\n\nexport class VerilogXMLParser implements HDLUnit {\n\n files: { [id: string]: HDLFile } = {};\n dtypes: { [id: string]: HDLDataType } = {};\n modules: { [id: string]: HDLModuleDef } = {};\n hierarchies: { [id: string]: HDLHierarchyDef } = {};\n\n cur_node : XMLNode;\n cur_module : HDLModuleDef;\n cur_loc : HDLSourceLocation;\n cur_loc_str : string;\n cur_deferred = [];\n\n constructor() {\n // TODO: other types?\n this.dtypes['QData'] = {left:63, right:0, signed:false};\n this.dtypes['IData'] = {left:31, right:0, signed:false};\n this.dtypes['SData'] = {left:15, right:0, signed:false};\n this.dtypes['CData'] = {left:7, right:0, signed:false};\n this.dtypes['byte'] = {left:7, right:0, signed:true};\n this.dtypes['shortint'] = {left:15, right:0, signed:true};\n this.dtypes['int'] = {left:31, right:0, signed:true};\n this.dtypes['integer'] = {left:31, right:0, signed:true};\n this.dtypes['longint'] = {left:63, right:0, signed:true};\n this.dtypes['time'] = {left:63, right:0, signed:false};\n }\n\n defer(fn: () => void) {\n this.cur_deferred.unshift(fn);\n }\n\n defer2(fn: () => void) {\n this.cur_deferred.push(fn);\n }\n\n run_deferred() {\n this.cur_deferred.forEach((fn) => fn());\n this.cur_deferred = [];\n }\n\n name2js(s: string) {\n if (s == null) throw new CompileError(this.cur_loc, `no name`);\n return s.replace(/[^a-z0-9_]/gi, '$');\n }\n\n findChildren(node: XMLNode, type: string, required: boolean) : XMLNode[] {\n var arr = node.children.filter((n) => n.type == type);\n if (arr.length == 0 && required) throw new CompileError(this.cur_loc, `no child of type ${type}`);\n return arr;\n }\n\n parseSourceLocation(node: XMLNode): HDLSourceLocation {\n var loc = node.attrs['loc'];\n if (loc) {\n if (loc == this.cur_loc_str) {\n return this.cur_loc; // cache last parsed $loc object\n } else {\n var [fileid, line, col, end_line, end_col] = loc.split(',');\n var $loc = {\n hdlfile: this.files[fileid],\n path: this.files[fileid].filename,\n line: parseInt(line),\n start: parseInt(col)-1,\n end_line: parseInt(end_line),\n end: parseInt(end_col)-1,\n }\n this.cur_loc = $loc;\n this.cur_loc_str = loc;\n return $loc;\n }\n } else {\n return null;\n }\n }\n\n open_module(node: XMLNode) {\n var module: HDLModuleDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n blocks: [],\n instances: [],\n vardefs: {},\n }\n if (this.cur_module) throw new CompileError(this.cur_loc, `nested modules not supported`);\n this.cur_module = module;\n return module;\n }\n\n deferDataType(node: XMLNode, def: HDLDataTypeObject) {\n var dtype_id = node.attrs['dtype_id'];\n if (dtype_id != null) {\n this.defer(() => {\n def.dtype = this.dtypes[dtype_id];\n if (!def.dtype) {\n throw new CompileError(this.cur_loc, `Unknown data type ${dtype_id} for ${node.type}`);\n }\n })\n }\n }\n\n parseConstValue(s: string) : number | bigint {\n const re_const = /(\\d+)'([s]?)h([0-9a-f]+)/i;\n var m = re_const.exec(s);\n if (m) {\n var numstr = m[3];\n if (numstr.length <= 8)\n return parseInt(numstr, 16);\n else\n return BigInt('0x' + numstr);\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant \"${s}\"`);\n }\n }\n \n resolveVar(s: string, mod: HDLModuleDef) : HDLVariableDef {\n var def = mod.vardefs[s];\n if (def == null) throw new CompileError(this.cur_loc, `could not resolve variable \"${s}\"`);\n return def;\n }\n\n resolveModule(s: string) : HDLModuleDef {\n var mod = this.modules[s];\n if (mod == null) throw new CompileError(this.cur_loc, `could not resolve module \"${s}\"`);\n return mod;\n }\n\n //\n\n visit_verilator_xml(node: XMLNode) {\n }\n\n visit_package(node: XMLNode) { // TODO?\n }\n\n visit_module(node: XMLNode) {\n this.findChildren(node, 'var', false).forEach((n) => {\n if (isVarDecl(n.obj)) {\n this.cur_module.vardefs[n.obj.name] = n.obj;\n }\n })\n this.modules[this.cur_module.name] = this.cur_module;\n this.cur_module = null;\n }\n\n visit_var(node: XMLNode) : HDLVariableDef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var vardef: HDLVariableDef = {\n $loc: this.parseSourceLocation(node),\n name: name,\n origName: node.attrs['origName'],\n isInput: node.attrs['dir'] == 'input',\n isOutput: node.attrs['dir'] == 'output',\n isParam: node.attrs['param'] == 'true',\n dtype: null,\n }\n this.deferDataType(node, vardef);\n var const_nodes = this.findChildren(node, 'const', false);\n if (const_nodes.length) {\n vardef.constValue = const_nodes[0].obj;\n }\n var init_nodes = this.findChildren(node, 'initarray', false);\n if (init_nodes.length) {\n vardef.initValue = init_nodes[0].obj;\n }\n return vardef;\n }\n\n visit_const(node: XMLNode) : HDLConstant {\n var name = node.attrs['name'];\n var cvalue = this.parseConstValue(name); \n var constdef: HDLConstant = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n cvalue: typeof cvalue === 'number' ? cvalue : null,\n bigvalue: typeof cvalue === 'bigint' ? cvalue : null,\n }\n this.deferDataType(node, constdef);\n return constdef;\n }\n\n visit_varref(node: XMLNode) : HDLVarRef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var varref: HDLVarRef = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n refname: name\n }\n this.deferDataType(node, varref);\n var mod = this.cur_module;\n /*\n this.defer2(() => {\n varref.vardef = this.resolveVar(name, mod);\n });\n */\n return varref;\n }\n\n visit_sentree(node: XMLNode) {\n // TODO\n }\n\n visit_always(node: XMLNode) : HDLAlwaysBlock {\n // TODO\n var sentree : HDLSensItem[];\n var expr : HDLExpr;\n if (node.children.length == 2) {\n sentree = node.children[0].obj as HDLSensItem[];\n expr = node.children[1].obj as HDLExpr;\n // TODO: check sentree\n } else {\n sentree = null;\n expr = node.children[0].obj as HDLExpr;\n }\n var always: HDLAlwaysBlock = {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: null,\n senlist: sentree,\n exprs: [expr],\n };\n this.cur_module.blocks.push(always);\n return always;\n }\n\n visit_begin(node: XMLNode) : HDLBlock {\n var exprs = [];\n node.children.forEach((n) => exprs.push(n.obj));\n return {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: node.attrs['name'],\n exprs: exprs,\n }\n }\n\n visit_initarray(node: XMLNode) : HDLBlock {\n return this.visit_begin(node);\n }\n\n visit_inititem(node: XMLNode) : HDLArrayItem {\n this.expectChildren(node, 1, 1);\n return {\n index: parseInt(node.attrs['index']),\n expr: node.children[0].obj\n }\n }\n\n visit_cfunc(node: XMLNode) : HDLBlock {\n if (this.cur_module == null) { // TODO?\n //console.log('no module open, skipping', node);\n return;\n }\n var block = this.visit_begin(node);\n block.exprs = [];\n node.children.forEach((n) => block.exprs.push(n.obj));\n this.cur_module.blocks.push(block);\n return block;\n }\n\n visit_cuse(node: XMLNode) { // TODO?\n }\n\n visit_instance(node: XMLNode) : HDLInstanceDef {\n var instance : HDLInstanceDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n ports: [],\n module: null,\n }\n node.children.forEach((child) => {\n instance.ports.push(child.obj);\n })\n this.cur_module.instances.push(instance);\n this.defer(() => {\n instance.module = this.resolveModule(node.attrs['defName']);\n })\n return instance;\n }\n\n visit_iface(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_intfref(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_port(node: XMLNode) : HDLPort {\n this.expectChildren(node, 1, 1);\n var varref: HDLPort = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n expr: node.children[0].obj\n }\n return varref;\n }\n\n visit_netlist(node: XMLNode) {\n }\n\n visit_files(node: XMLNode) {\n }\n\n visit_module_files(node: XMLNode) {\n node.children.forEach((n) => {\n if (n.obj) {\n var file = this.files[(n.obj as HDLFile).id];\n if (file) file.isModule = true;\n }\n });\n }\n\n visit_file(node: XMLNode) {\n return this.visit_file_or_module(node, false);\n }\n\n // TODO\n visit_scope(node: XMLNode) {\n }\n\n visit_topscope(node: XMLNode) {\n }\n\n visit_file_or_module(node: XMLNode, isModule: boolean) : HDLFile {\n var file : HDLFile = {\n id: node.attrs['id'],\n filename: node.attrs['filename'],\n isModule: isModule,\n }\n this.files[file.id] = file;\n return file;\n }\n\n visit_cells(node: XMLNode) {\n this.expectChildren(node, 1, 9999);\n var hier = node.children[0].obj as HDLHierarchyDef;\n if (hier != null) {\n var hiername = hier.name;\n this.hierarchies[hiername] = hier;\n }\n }\n\n visit_cell(node: XMLNode) : HDLHierarchyDef {\n var hier = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n module: null,\n parent: null,\n children: node.children.map((n) => n.obj),\n }\n if (node.children.length > 0)\n throw new CompileError(this.cur_loc, `multiple non-flattened modules not yet supported`);\n node.children.forEach((n) => (n.obj as HDLHierarchyDef).parent = hier);\n this.defer(() => {\n hier.module = this.resolveModule(node.attrs['submodname']);\n })\n return hier;\n }\n\n visit_basicdtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n var dtype: HDLDataType;\n var dtypename = node.attrs['name'];\n switch (dtypename) {\n case 'logic':\n case 'integer': // TODO?\n case 'bit':\n let dlogic: HDLLogicType = {\n $loc: this.parseSourceLocation(node),\n left: parseInt(node.attrs['left'] || \"0\"),\n right: parseInt(node.attrs['right'] || \"0\"),\n signed: node.attrs['signed'] == 'true'\n }\n dtype = dlogic;\n break;\n case 'string':\n let dstring: HDLNativeType = {\n $loc: this.parseSourceLocation(node),\n jstype: 'string'\n }\n dtype = dstring;\n break;\n default:\n dtype = this.dtypes[dtypename];\n if (dtype == null) {\n throw new CompileError(this.cur_loc, `unknown data type ${dtypename}`);\n }\n }\n this.dtypes[id] = dtype;\n return dtype;\n }\n\n visit_refdtype(node: XMLNode) {\n }\n\n visit_enumdtype(node: XMLNode) {\n }\n\n visit_enumitem(node: XMLNode) {\n }\n\n visit_packarraydtype(node: XMLNode): HDLDataType {\n // TODO: packed?\n return this.visit_unpackarraydtype(node);\n }\n\n visit_memberdtype(node: XMLNode) {\n throw new CompileError(null, `structs not supported`);\n }\n\n visit_constdtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_paramtypedtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_unpackarraydtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n let sub_dtype_id = node.attrs['sub_dtype_id'];\n let range = node.children[0].obj as HDLBinop;\n if (isConstExpr(range.left) && isConstExpr(range.right)) {\n var dtype: HDLUnpackArray = {\n $loc: this.parseSourceLocation(node),\n subtype: null,\n low: range.left,\n high: range.right,\n }\n this.dtypes[id] = dtype;\n this.defer(() => {\n dtype.subtype = this.dtypes[sub_dtype_id];\n if (!dtype.subtype) throw new CompileError(this.cur_loc, `Unknown data type ${sub_dtype_id} for array`);\n })\n return dtype;\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant exprs in array`)\n }\n }\n\n visit_senitem(node: XMLNode) : HDLSensItem {\n var edgeType = node.attrs['edgeType'];\n if (edgeType != \"POS\" && edgeType != \"NEG\")\n throw new CompileError(this.cur_loc, \"POS/NEG required\")\n return {\n $loc: this.parseSourceLocation(node),\n edgeType: edgeType,\n expr: node.obj\n }\n }\n\n visit_text(node: XMLNode) {\n }\n\n visit_cstmt(node: XMLNode) {\n }\n\n visit_cfile(node: XMLNode) {\n }\n\n visit_typetable(node: XMLNode) {\n }\n\n visit_constpool(node: XMLNode) {\n }\n\n visit_comment(node: XMLNode) {\n }\n\n expectChildren(node: XMLNode, low: number, high: number) {\n if (node.children.length < low || node.children.length > high)\n throw new CompileError(this.cur_loc, `expected between ${low} and ${high} children`);\n }\n\n __visit_unop(node: XMLNode) : HDLUnop {\n this.expectChildren(node, 1, 1);\n var expr: HDLUnop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_extend(node: XMLNode) : HDLUnop {\n var unop = this.__visit_unop(node) as HDLExtendop;\n unop.width = parseInt(node.attrs['width']);\n unop.widthminv = parseInt(node.attrs['widthminv']);\n if (unop.width != 32) throw new CompileError(this.cur_loc, `extends width ${unop.width} != 32`)\n return unop;\n }\n\n visit_extends(node: XMLNode) : HDLUnop {\n return this.visit_extend(node);\n }\n\n __visit_binop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 2, 2);\n var expr: HDLBinop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n right: node.children[1].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_if(node: XMLNode) : HDLTriop {\n this.expectChildren(node, 2, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: 'if',\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2] && node.children[2].obj as HDLExpr,\n }\n return expr;\n }\n\n // while and for loops\n visit_while(node: XMLNode) : HDLWhileOp {\n this.expectChildren(node, 2, 4);\n var expr: HDLWhileOp = {\n $loc: this.parseSourceLocation(node),\n op: 'while',\n dtype: null,\n precond: node.children[0].obj as HDLExpr,\n loopcond: node.children[1].obj as HDLExpr,\n body: node.children[2] && node.children[2].obj as HDLExpr,\n inc: node.children[3] && node.children[3].obj as HDLExpr,\n }\n return expr;\n }\n\n __visit_triop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 3, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n __visit_func(node: XMLNode) : HDLFuncCall {\n var expr = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n funcname: node.attrs['func'] || ('$' + node.type),\n args: node.children.map(n => n.obj as HDLExpr)\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_not(node: XMLNode) { return this.__visit_unop(node); }\n visit_negate(node: XMLNode) { return this.__visit_unop(node); }\n visit_redand(node: XMLNode) { return this.__visit_unop(node); }\n visit_redor(node: XMLNode) { return this.__visit_unop(node); }\n visit_redxor(node: XMLNode) { return this.__visit_unop(node); }\n visit_initial(node: XMLNode) { return this.__visit_unop(node); }\n visit_ccast(node: XMLNode) { return this.__visit_unop(node); }\n visit_creset(node: XMLNode) { return this.__visit_unop(node); }\n visit_creturn(node: XMLNode) { return this.__visit_unop(node); }\n\n visit_contassign(node: XMLNode) { return this.__visit_binop(node); }\n visit_assigndly(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpre(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpost(node: XMLNode) { return this.__visit_binop(node); }\n visit_assign(node: XMLNode) { return this.__visit_binop(node); }\n visit_arraysel(node: XMLNode) { return this.__visit_binop(node); }\n visit_wordsel(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_eq(node: XMLNode) { return this.__visit_binop(node); }\n visit_neq(node: XMLNode) { return this.__visit_binop(node); }\n visit_lte(node: XMLNode) { return this.__visit_binop(node); }\n visit_gte(node: XMLNode) { return this.__visit_binop(node); }\n visit_lt(node: XMLNode) { return this.__visit_binop(node); }\n visit_gt(node: XMLNode) { return this.__visit_binop(node); }\n visit_and(node: XMLNode) { return this.__visit_binop(node); }\n visit_or(node: XMLNode) { return this.__visit_binop(node); }\n visit_xor(node: XMLNode) { return this.__visit_binop(node); }\n visit_add(node: XMLNode) { return this.__visit_binop(node); }\n visit_sub(node: XMLNode) { return this.__visit_binop(node); }\n visit_concat(node: XMLNode) { return this.__visit_binop(node); } // TODO?\n visit_shiftl(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftr(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftrs(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_mul(node: XMLNode) { return this.__visit_binop(node); }\n visit_div(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddiv(node: XMLNode) { return this.__visit_binop(node); }\n visit_muls(node: XMLNode) { return this.__visit_binop(node); }\n visit_divs(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddivs(node: XMLNode) { return this.__visit_binop(node); }\n visit_gts(node: XMLNode) { return this.__visit_binop(node); }\n visit_lts(node: XMLNode) { return this.__visit_binop(node); }\n visit_gtes(node: XMLNode) { return this.__visit_binop(node); }\n visit_ltes(node: XMLNode) { return this.__visit_binop(node); }\n // TODO: more?\n\n visit_range(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_cond(node: XMLNode) { return this.__visit_triop(node); }\n visit_condbound(node: XMLNode) { return this.__visit_triop(node); }\n visit_sel(node: XMLNode) { return this.__visit_triop(node); }\n\n visit_changedet(node: XMLNode) : HDLBinop {\n if (node.children.length == 0)\n return null; //{ op: \"changedet\", dtype:null, left:null, right:null }\n else\n return this.__visit_binop(node);\n }\n\n visit_ccall(node: XMLNode) { return this.__visit_func(node); }\n visit_finish(node: XMLNode) { return this.__visit_func(node); }\n visit_stop(node: XMLNode) { return this.__visit_func(node); }\n visit_rand(node: XMLNode) { return this.__visit_func(node); }\n visit_time(node: XMLNode) { return this.__visit_func(node); }\n\n visit_display(node: XMLNode) { return null; }\n visit_sformatf(node: XMLNode) { return null; }\n visit_scopename(node: XMLNode) { return null; }\n\n visit_readmem(node: XMLNode) { return this.__visit_func(node); }\n\n //\n\n xml_open(node: XMLNode) {\n this.cur_node = node;\n var method = this[`open_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n }\n }\n \n xml_close(node: XMLNode) {\n this.cur_node = node;\n var method = this[`visit_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n } else {\n throw new CompileError(this.cur_loc, `no visitor for ${node.type}`)\n }\n }\n\n parse(xmls: string) {\n parseXMLPoorly(xmls, this.xml_open.bind(this), this.xml_close.bind(this));\n this.cur_node = null;\n this.run_deferred();\n }\n}\n\n", "\n// TODO: must be a better way to do all this\n\nimport { WorkerError, CodeListingMap, SourceLocation } from \"../../common/workertypes\";\nimport { Assembler } from \"../assembler\";\nimport * as vxmlparser from '../../common/hdl/vxmlparser';\nimport { getWorkFileAsString, BuildStep, BuildStepResult, gatherFiles, loadNative, staleFiles, makeErrorMatcher, emglobal, moduleInstFn, print_fn, populateFiles, execMain, putWorkFile, anyTargetChanged, endtime, getWASMMemory, starttime, populateExtraFiles, setupFS } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction detectModuleName(code: string) {\n var m = /^\\s*module\\s+(\\w+_top)\\b/m.exec(code)\n || /^\\s*module\\s+(top|t)\\b/m.exec(code)\n || /^\\s*module\\s+(\\w+)\\b/m.exec(code);\n return m ? m[1] : null;\n}\n\nfunction detectTopModuleName(code: string) {\n var topmod = detectModuleName(code) || \"top\";\n var m = /^\\s*module\\s+(\\w+?_top)/m.exec(code);\n if (m && m[1]) topmod = m[1];\n return topmod;\n}\n\n// cached stuff (TODO)\nvar jsasm_module_top;\nvar jsasm_module_output;\nvar jsasm_module_key;\n\nfunction compileJSASM(asmcode: string, platform, options, is_inline) {\n var asm = new Assembler(null);\n var includes = [];\n asm.loadJSON = (filename: string) => {\n var jsontext = getWorkFileAsString(filename);\n if (!jsontext) throw Error(\"could not load \" + filename);\n return JSON.parse(jsontext);\n };\n asm.loadInclude = (filename) => {\n if (!filename.startsWith('\"') || !filename.endsWith('\"'))\n return 'Expected filename in \"double quotes\"';\n filename = filename.substr(1, filename.length - 2);\n includes.push(filename);\n };\n var loaded_module = false;\n asm.loadModule = (top_module: string) => {\n // compile last file in list\n loaded_module = true;\n var key = top_module + '/' + includes;\n if (jsasm_module_key != key) {\n jsasm_module_key = key;\n jsasm_module_output = null;\n }\n jsasm_module_top = top_module;\n var main_filename = includes[includes.length - 1];\n // TODO: take out .asm dependency\n var voutput = compileVerilator({ platform: platform, files: includes, path: main_filename, tool: 'verilator' });\n if (voutput)\n jsasm_module_output = voutput;\n return null; // no error\n }\n var result = asm.assembleFile(asmcode);\n if (loaded_module && jsasm_module_output) {\n // errors? return them\n if (jsasm_module_output.errors && jsasm_module_output.errors.length)\n return jsasm_module_output;\n // return program ROM array\n var asmout = result.output;\n // TODO: unify\n result.output = jsasm_module_output.output;\n // TODO: typecheck this garbage\n (result as any).output.program_rom = asmout;\n // TODO: not cpu_platform__DOT__program_rom anymore, make const\n (result as any).output.program_rom_variable = jsasm_module_top + \"$program_rom\";\n (result as any).listings = {};\n (result as any).listings[options.path] = { lines: result.lines };\n return result;\n } else {\n return result;\n }\n}\n\nexport function compileJSASMStep(step: BuildStep): BuildStepResult {\n gatherFiles(step);\n var code = getWorkFileAsString(step.path);\n var platform = step.platform || 'verilog';\n return compileJSASM(code, platform, step, false);\n}\n\nfunction compileInlineASM(code: string, platform, options, errors, asmlines) {\n code = code.replace(/__asm\\b([\\s\\S]+?)\\b__endasm\\b/g, function (s, asmcode, index) {\n var firstline = code.substr(0, index).match(/\\n/g).length;\n var asmout = compileJSASM(asmcode, platform, options, true);\n if (asmout.errors && asmout.errors.length) {\n for (var i = 0; i < asmout.errors.length; i++) {\n asmout.errors[i].line += firstline;\n errors.push(asmout.errors[i]);\n }\n return \"\";\n } else if (asmout.output) {\n let s = \"\";\n var out = asmout.output;\n for (var i = 0; i < out.length; i++) {\n if (i > 0) {\n s += \",\";\n if ((i & 0xff) == 0) s += \"\\n\";\n }\n s += 0 | out[i];\n }\n if (asmlines) {\n var al = asmout.lines;\n for (var i = 0; i < al.length; i++) {\n al[i].line += firstline;\n asmlines.push(al[i]);\n }\n }\n return s;\n }\n });\n return code;\n}\n\nexport function compileVerilator(step: BuildStep): BuildStepResult {\n loadNative(\"verilator_bin\");\n var platform = step.platform || 'verilog';\n var errors: WorkerError[] = [];\n gatherFiles(step);\n // compile verilog if files are stale\n if (staleFiles(step, [xmlPath])) {\n // TODO: %Error: Specified --top-module 'ALU' isn't at the top level, it's under another cell 'cpu'\n // TODO: ... Use \"/* verilator lint_off BLKSEQ */\" and lint_on around source to disable this message.\n var match_fn = makeErrorMatcher(errors, /%(.+?): (.+?):(\\d+)?[:]?\\s*(.+)/i, 3, 4, step.path, 2);\n var verilator_mod: EmscriptenModule = emglobal.verilator_bin({\n instantiateWasm: moduleInstFn('verilator_bin'),\n noInitialRun: true,\n noExitRuntime: true,\n print: print_fn,\n printErr: match_fn,\n wasmMemory: getWASMMemory(), // reuse memory\n //INITIAL_MEMORY:256*1024*1024,\n });\n var code = getWorkFileAsString(step.path);\n var topmod = detectTopModuleName(code);\n var FS = verilator_mod.FS;\n var listings: CodeListingMap = {};\n // process inline assembly, add listings where found\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n let asmlines = [];\n code = compileInlineASM(code, platform, step, errors, asmlines);\n if (asmlines.length) {\n listings[path] = { lines: asmlines };\n }\n }\n return code;\n }\n });\n starttime();\n var xmlPath = `obj_dir/V${topmod}.xml`;\n try {\n var args = [\"--cc\", \"-O3\",\n \"-DEXT_INLINE_ASM\", \"-DTOPMOD__\" + topmod, \"-D__8BITWORKSHOP__\",\n \"-Wall\",\n \"-Wno-DECLFILENAME\", \"-Wno-UNUSED\", \"-Wno-EOFNEWLINE\", \"-Wno-PROCASSWIRE\",\n \"--x-assign\", \"fast\", \"--noassert\", \"--pins-sc-biguint\",\n \"--debug-check\", // for XML output\n \"--top-module\", topmod, step.path]\n execMain(step, verilator_mod, args);\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"Compiler internal error: \" + e });\n }\n endtime(\"compile\");\n // remove boring errors\n errors = errors.filter(function (e) { return !/Exiting due to \\d+/.exec(e.msg); }, errors);\n errors = errors.filter(function (e) { return !/Use [\"][/][*]/.exec(e.msg); }, errors);\n if (errors.length) {\n return { errors: errors };\n }\n starttime();\n var xmlParser = new vxmlparser.VerilogXMLParser();\n try {\n var xmlContent = FS.readFile(xmlPath, { encoding: 'utf8' });\n var xmlScrubbed = xmlContent.replace(/ fl=\".+?\" loc=\".+?\"/g, '');\n // TODO: this squelches the .asm listing\n //listings[step.prefix + '.xml'] = {lines:[],text:xmlContent};\n putWorkFile(xmlPath, xmlScrubbed); // don't detect changes in source position\n if (!anyTargetChanged(step, [xmlPath]))\n return;\n xmlParser.parse(xmlContent);\n } catch (e) {\n console.log(e, e.stack);\n if (e.$loc != null) {\n let $loc = e.$loc as SourceLocation;\n errors.push({ msg: \"\" + e, path: $loc.path, line: $loc.line });\n } else {\n errors.push({ line: 0, msg: \"\" + e });\n }\n return { errors: errors, listings: listings };\n } finally {\n endtime(\"parse\");\n }\n return {\n output: xmlParser,\n errors: errors,\n listings: listings,\n };\n }\n}\n\n// TODO: test\nexport function compileYosys(step: BuildStep): BuildStepResult {\n loadNative(\"yosys\");\n var code = step.code;\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /ERROR: (.+?) in line (.+?[.]v):(\\d+)[: ]+(.+)/i, 3, 4, step.path);\n starttime();\n var yosys_mod: EmscriptenModule = emglobal.yosys({\n instantiateWasm: moduleInstFn('yosys'),\n noInitialRun: true,\n print: print_fn,\n printErr: match_fn,\n });\n endtime(\"create module\");\n var topmod = detectTopModuleName(code);\n var FS = yosys_mod.FS;\n FS.writeFile(topmod + \".v\", code);\n starttime();\n try {\n execMain(step, yosys_mod, [\"-q\", \"-o\", topmod + \".json\", \"-S\", topmod + \".v\"]);\n } catch (e) {\n console.log(e);\n endtime(\"compile\");\n return { errors: errors };\n }\n endtime(\"compile\");\n //TODO: filename in errors\n if (errors.length) return { errors: errors };\n try {\n var json_file = FS.readFile(topmod + \".json\", { encoding: 'utf8' });\n var json = JSON.parse(json_file);\n console.log(json);\n return { output: json, errors: errors }; // TODO\n } catch (e) {\n console.log(e);\n return { errors: errors };\n }\n}\n\nexport function compileSilice(step: BuildStep): BuildStepResult {\n loadNative(\"silice\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.ice\" });\n var destpath = step.prefix + '.v';\n var errors: WorkerError[] = [];\n var errfile: string;\n var errline: number;\n if (staleFiles(step, [destpath])) {\n //[preprocessor] 97] attempt to concatenate a nil value (global 'addrW')\n var match_fn = (s: string) => {\n s = (s as any).replaceAll(/\\033\\[\\d+\\w/g, '');\n var mf = /file:\\s*(\\w+)/.exec(s);\n var ml = /line:\\s+(\\d+)/.exec(s);\n var preproc = /\\[preprocessor\\] (\\d+)\\] (.+)/.exec(s);\n if (mf) errfile = mf[1];\n else if (ml) errline = parseInt(ml[1]);\n else if (preproc) {\n errors.push({ path: step.path, line: parseInt(preproc[1]), msg: preproc[2] });\n }\n else if (errfile && errline && s.length > 1) {\n if (s.length > 2) {\n errors.push({ path: errfile + \".ice\", line: errline, msg: s });\n } else {\n errfile = null;\n errline = null;\n }\n }\n else console.log(s);\n }\n var silice: EmscriptenModule = emglobal.silice({\n instantiateWasm: moduleInstFn('silice'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = silice.FS;\n setupFS(FS, 'Silice');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/frameworks';\n var args = [\n '-D', 'NTSC=1',\n '--frameworks_dir', FWDIR,\n '-f', `/8bitworkshop.v`,\n '-o', destpath,\n step.path];\n execMain(step, silice, args);\n if (errors.length)\n return { errors: errors };\n var vout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, vout);\n }\n return {\n nexttool: \"verilator\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "import { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, load, emglobal, print_fn, populateFiles, execMain, putWorkFile, parseListing, loadNative, gatherFiles, staleFiles, moduleInstFn, getWorkFileAsString, preprocessMCPP, fixParamsWithDefines, msvcErrorMatcher, populateExtraFiles, anyTargetChanged, parseSourceLines } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\";\n\n// http://datapipe-blackbeltsystems.com/windows/flex/asm09.html\nexport function assembleXASM6809(step: BuildStep): BuildStepResult {\n load(\"xasm6809\");\n var alst = \"\";\n var lasterror = null;\n var errors = [];\n function match_fn(s) {\n alst += s;\n alst += \"\\n\";\n if (lasterror) {\n var line = parseInt(s.slice(0, 5)) || 0;\n errors.push({\n line: line,\n msg: lasterror\n });\n lasterror = null;\n }\n else if (s.startsWith(\"***** \")) {\n lasterror = s.slice(6);\n }\n }\n var Module: EmscriptenModule = emglobal.xasm6809({\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: print_fn\n });\n var FS = Module.FS;\n //setupFS(FS);\n populateFiles(step, FS, {\n mainFilePath: 'main.asm'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst'; // in stdout\n execMain(step, Module, [\"-c\", \"-l\", \"-s\", \"-y\", \"-o=\" + binpath, step.path]);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(binpath, { encoding: 'binary' });\n if (aout.length == 0) {\n errors.push({ line: 0, msg: \"Empty output file\" });\n return { errors: errors };\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n // TODO: symbol map\n //mond09 0000 \n var symbolmap = {};\n //00005 W 0003 [ 8] A6890011 lda >PALETTE,x\n //00012 0011 0C0203 fcb 12,2,3\n var asmlines = parseListing(alst, /^\\s*([0-9]+) .+ ([0-9A-F]+)\\s+\\[([0-9 ]+)\\]\\s+([0-9A-F]+) (.*)/i, 1, 2, 4, 3);\n var listings: CodeListingMap = {};\n listings[step.prefix + '.lst'] = { lines: asmlines, text: alst };\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\nexport function compileCMOC(step: BuildStep): BuildStepResult {\n loadNative(\"cmoc\");\n var params = step.params;\n // stderr\n var re_err1 = /^[/]*([^:]*):(\\d+): (.+)$/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[2]),\n msg: matches[3],\n path: matches[1] || step.path\n });\n } else {\n console.log(s);\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var args = ['-S', '-Werror', '-V',\n '-I/share/include',\n '-I.',\n step.path];\n var CMOC: EmscriptenModule = emglobal.cmoc({\n instantiateWasm: moduleInstFn('cmoc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors }\n }\n else code = preproc.code;\n // set up filesystem\n var FS = CMOC.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, CMOC, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n if (step.params.set_stack_end)\n asmout = asmout.replace('stack space in bytes', `\\n lds #${step.params.set_stack_end}\\n`)\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"lwasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleLWASM(step: BuildStep): BuildStepResult {\n loadNative(\"lwasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n const isRaw = step.path.endsWith('.asm');\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var args = ['-9', '-I/share/asminc', '-o' + objpath, '-l' + lstpath, step.path];\n args.push(isRaw ? '-r' : '--obj');\n var LWASM: EmscriptenModule = emglobal.lwasm({\n instantiateWasm: moduleInstFn('lwasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = LWASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n execMain(step, LWASM, args);\n if (errors.length)\n return { errors: errors };\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n if (isRaw) {\n return {\n output: objout\n };\n }\n }\n return {\n linktool: \"lwlink\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLWLINK(step: BuildStep): BuildStepResult {\n loadNative(\"lwlink\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LWLINK: EmscriptenModule = emglobal.lwlink({\n instantiateWasm: moduleInstFn('lwlink'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) {\n if (s.startsWith(\"Warning:\"))\n console.log(s);\n else\n errors.push({ msg: s, line: 0 });\n }\n });\n var FS = LWLINK.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n var libargs = params.extra_link_args || [];\n var args = [\n '-L.',\n '--entry=program_start',\n '--raw',\n '--output=main',\n '--map=main.map'].concat(libargs, step.args);\n console.log(args);\n execMain(step, LWLINK, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\"]))\n return;\n // parse symbol map\n //console.log(mapout);\n var symbolmap = {};\n var segments = [];\n for (var s of mapout.split(\"\\n\")) {\n var toks = s.split(\" \");\n // TODO: use regex\n if (toks[0] == 'Symbol:') {\n let ident = toks[1];\n let ofs = parseInt(toks[4], 16);\n if (ident && ofs >= 0 \n && !ident.startsWith(\"l_\") \n //&& !/^L\\d+$/.test(ident)\n && !ident.startsWith('funcsize_')\n && !ident.startsWith('funcend_')) {\n symbolmap[ident] = ofs;\n }\n }\n else if (toks[0] == 'Section:') {\n let seg = toks[1];\n let segstart = parseInt(toks[5], 16);\n let segsize = parseInt(toks[7], 16);\n segments.push({ name: seg, start: segstart, size: segsize });\n }\n }\n // build listings\n const re_segment = /\\s*SECTION\\s+(\\w+)/i;\n const re_function = /\\s*([0-9a-f]+).+?(\\w+)\\s+EQU\\s+[*]/i;\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n // TODO\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n var asmlines = parseListing(lstout, /^([0-9A-F]+)\\s+([0-9A-F]+)\\s+[(]\\s*(.+?)[)]:(\\d+) (.*)/i, 4, 1, 2, 3, re_function, re_segment);\n for (let l of asmlines) {\n l.offset += symbolmap[l.func] || 0;\n }\n // * Line //threed.c:117: init of variable e\n var srclines = parseSourceLines(lstout, /Line .+?:(\\d+)/i, /^([0-9A-F]{4})/i, re_function, re_segment);\n for (let l of srclines) {\n l.offset += symbolmap[l.func] || 0;\n }\n putWorkFile(fn, lstout);\n // strip out left margin\n lstout = lstout.split('\\n').map(l => l.substring(0,15) + l.substring(56)).join('\\n')\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n };\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, loadNative, makeErrorMatcher, moduleInstFn, parseListing, populateFiles, print_fn, putWorkFile, staleFiles } from \"../workermain\"\n\n\n// http://www.nespowerpak.com/nesasm/\nexport function assembleNESASM(step: BuildStep): BuildStepResult {\n loadNative(\"nesasm\");\n var re_filename = /\\#\\[(\\d+)\\]\\s+(\\S+)/;\n var re_insn = /\\s+(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)/;\n var re_error = /\\s+(.+)/;\n var errors: WorkerError[] = [];\n var state = 0;\n var lineno = 0;\n var filename;\n function match_fn(s) {\n var m;\n switch (state) {\n case 0:\n m = re_filename.exec(s);\n if (m) {\n filename = m[2];\n }\n m = re_insn.exec(s);\n if (m) {\n lineno = parseInt(m[1]);\n state = 1;\n }\n break;\n case 1:\n m = re_error.exec(s);\n if (m) {\n errors.push({ path: filename, line: lineno, msg: m[1] });\n state = 0;\n }\n break;\n }\n }\n var Module: EmscriptenModule = emglobal.nesasm({\n instantiateWasm: moduleInstFn('nesasm'),\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.nes';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.fns';\n execMain(step, Module, [step.path, '-s', \"-l\", \"2\"]);\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n try {\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // 16 00:C004 8E 17 40 STX $4017 ; disable APU frame IRQ\n var asmlines = parseListing(alst, /^\\s*(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)\\s+([0-9A-F ]+?) (.*)/i, 1, 3, 4);\n putWorkFile(lstpath, alst);\n listings[lstpath] = {\n lines: asmlines,\n text: alst\n };\n } catch (e) {\n //\n }\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe missing ENDM or segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(sympath, asym);\n if (alst) putWorkFile(lstpath, alst); // listing optional (use LIST)\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [binpath, sympath]))\n return;\n // parse symbols\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n if (!s.startsWith(';')) {\n var m = /(\\w+)\\s+=\\s+[$]([0-9A-F]+)/.exec(s);\n if (m) {\n symbolmap[m[1]] = parseInt(m[2], 16);\n }\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\n\n/*\n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\nLine | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code \n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\n 1 | 1 zap.asm 1 | Unknown | ?? | | -1 | 00/FFFF | broak \n 2 | 1 zap.asm 2 | Comment | ?? | | -1 | 00/FFFF | * SPACEGAME\n \n => [Error] Impossible to decode address mode for instruction 'BNE KABOOM!' (line 315, file 'zap.asm') : The number of element in 'KABOOM!' is even (should be value [operator value [operator value]...]).\n => [Error] Unknown line 'foo' in source file 'zap.asm' (line 315)\n => Creating Object file 'pcs.bin'\n => Creating Output file 'pcs.bin_S01__Output.txt'\n\n*/\nexport function assembleMerlin32(step: BuildStep): BuildStepResult {\n loadNative(\"merlin32\");\n var errors = [];\n var lstfiles = [];\n gatherFiles(step, { mainFilePath: \"main.lnk\" });\n var objpath = step.prefix + \".bin\";\n if (staleFiles(step, [objpath])) {\n var args = ['-v', step.path];\n var merlin32: EmscriptenModule = emglobal.merlin32({\n instantiateWasm: moduleInstFn('merlin32'),\n noInitialRun: true,\n print: (s: string) => {\n var m = /\\s*=>\\s*Creating Output file '(.+?)'/.exec(s);\n if (m) {\n lstfiles.push(m[1]);\n }\n var errpos = s.indexOf('Error');\n if (errpos >= 0) {\n s = s.slice(errpos + 6).trim();\n var mline = /\\bline (\\d+)\\b/.exec(s);\n var mpath = /\\bfile '(.+?)'/.exec(s);\n errors.push({\n line: parseInt(mline[1]) || 0,\n msg: s,\n path: mpath[1] || step.path,\n });\n }\n },\n printErr: print_fn,\n });\n var FS = merlin32.FS;\n populateFiles(step, FS);\n execMain(step, merlin32, args);\n if (errors.length)\n return { errors: errors };\n\n var errout = null;\n try {\n errout = FS.readFile(\"error_output.txt\", { encoding: 'utf8' });\n } catch (e) {\n //\n }\n\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n lstfiles.forEach((lstfn) => {\n var lst = FS.readFile(lstfn, { encoding: 'utf8' }) as string;\n lst.split('\\n').forEach((line) => {\n var toks = line.split(/\\s*\\|\\s*/);\n if (toks && toks[6]) {\n var toks2 = toks[1].split(/\\s+/);\n var toks3 = toks[6].split(/[:/]/, 4);\n var path = toks2[1];\n if (path && toks2[2] && toks3[1]) {\n var lstline = {\n line: parseInt(toks2[2]),\n offset: parseInt(toks3[1].trim(), 16),\n insns: toks3[2],\n cycles: null,\n iscode: false // TODO\n };\n var lst = listings[path];\n if (!lst) listings[path] = lst = { lines: [] };\n lst.lines.push(lstline);\n //console.log(path,toks2,toks3);\n }\n }\n });\n });\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n// README.md:2:5: parse error, expected: statement or variable assignment, integer variable, variable assignment\nexport function compileFastBasic(step: BuildStep): BuildStepResult {\n // TODO: fastbasic-fp?\n loadNative(\"fastbasic-int\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.fb\" });\n var destpath = step.prefix + '.s';\n var errors = [];\n if (staleFiles(step, [destpath])) {\n var fastbasic: EmscriptenModule = emglobal.fastbasic({\n instantiateWasm: moduleInstFn('fastbasic-int'),\n noInitialRun: true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):(\\d+):\\s*(.+)/, 2, 4, step.path, 1),\n });\n var FS = fastbasic.FS;\n populateFiles(step, FS);\n var libfile = 'fastbasic-int.lib'\n params.libargs = [libfile];\n params.cfgfile = params.fastbasic_cfgfile;\n //params.extra_compile_args = [\"--asm-define\", \"NO_SMCODE\"];\n params.extra_link_files = [libfile, params.cfgfile];\n //fixParamsWithDefines(step.path, params);\n var args = [step.path, destpath];\n execMain(step, fastbasic, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, loadNative, makeErrorMatcher, moduleInstFn, parseListing, populateFiles, print_fn, putWorkFile, staleFiles } from \"../workermain\"\n\n\nexport function assembleZMAC(step: BuildStep): BuildStepResult {\n loadNative(\"zmac\");\n var hexout, lstout, binout;\n var errors = [];\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var lstpath = step.prefix + \".lst\";\n var binpath = step.prefix + \".cim\";\n if (staleFiles(step, [binpath])) {\n /*\n error1.asm(4) : 'l18d4' Undeclared\n JP L18D4\n \n error1.asm(11): warning: 'foobar' treated as label (instruction typo?)\n Add a colon or move to first column to stop this warning.\n 1 errors (see listing if no diagnostics appeared here)\n */\n var ZMAC: EmscriptenModule = emglobal.zmac({\n instantiateWasm: moduleInstFn('zmac'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+)/, 2, 3, step.path),\n });\n var FS = ZMAC.FS;\n populateFiles(step, FS);\n // TODO: don't know why CIM (hexary) doesn't work\n execMain(step, ZMAC, ['-z', '-c', '--oo', 'lst,cim', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n lstout = FS.readFile(\"zout/\" + lstpath, { encoding: 'utf8' });\n binout = FS.readFile(\"zout/\" + binpath, { encoding: 'binary' });\n putWorkFile(binpath, binout);\n putWorkFile(lstpath, lstout);\n if (!anyTargetChanged(step, [binpath, lstpath]))\n return;\n // 230: 1739+7+x 017A 1600 L017A: LD D,00h\n var lines = parseListing(lstout, /\\s*(\\d+):\\s*([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines };\n // parse symbol table\n var symbolmap = {};\n var sympos = lstout.indexOf('Symbol Table:');\n if (sympos > 0) {\n var symout = lstout.slice(sympos + 14);\n symout.split('\\n').forEach(function (l) {\n var m = l.match(/(\\S+)\\s+([= ]*)([0-9a-f]+)/i);\n if (m) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n }\n });\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap\n };\n }\n}\n\n", "import { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, loadNative, gatherFiles, staleFiles, emglobal, moduleInstFn, getWorkFileAsString, preprocessMCPP, populateFiles, fixParamsWithDefines, execMain, putWorkFile, print_fn, msvcErrorMatcher, anyTargetChanged, parseListing } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\n// http://www.techhelpmanual.com/829-program_startup___exit.html\nexport function compileSmallerC(step: BuildStep): BuildStepResult {\n loadNative(\"smlrc\");\n var params = step.params;\n // stderr\n var re_err1 = /^Error in \"[/]*(.+)\" [(](\\d+):(\\d+)[)]/;\n var errors: WorkerError[] = [];\n var errline = 0;\n var errpath = step.path;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errpath = matches[1];\n } else {\n errors.push({\n line: errline,\n msg: s,\n path: errpath,\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var args = ['-seg16',\n //'-nobss',\n '-no-externs',\n step.path, destpath];\n var smlrc: EmscriptenModule = emglobal.smlrc({\n instantiateWasm: moduleInstFn('smlrc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // set up filesystem\n var FS = smlrc.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, smlrc, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"yasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleYASM(step: BuildStep): BuildStepResult {\n loadNative(\"yasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".exe\";\n var lstpath = step.prefix + \".lst\";\n var mappath = step.prefix + \".map\";\n if (staleFiles(step, [objpath])) {\n var args = ['-X', 'vc',\n '-a', 'x86', '-f', 'dosexe', '-p', 'nasm',\n '-D', 'freedos',\n //'-g', 'dwarf2',\n //'-I/share/asminc',\n '-o', objpath, '-l', lstpath, '--mapfile=' + mappath,\n step.path];\n // return yasm/*.ready*/\n var YASM: EmscriptenModule = emglobal.yasm({\n instantiateWasm: moduleInstFn('yasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = YASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, YASM, args);\n if (errors.length)\n return { errors: errors };\n var objout, lstout, mapout;\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n mapout = FS.readFile(mappath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n //putWorkFile(mappath, mapout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n var symbolmap = {};\n var segments = [];\n var lines = parseListing(lstout, /\\s*(\\d+)\\s+([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { hex } from \"../../common/util\";\nimport { WorkerResult, CodeListingMap, WorkerError, SourceLine } from \"../../common/workertypes\";\nimport { anyTargetChanged, BuildStep, BuildStepResult, emglobal, EmscriptenModule, execMain, gatherFiles, getPrefix, getWorkFileAsString, loadNative, makeErrorMatcher, moduleInstFn, populateFiles, putWorkFile, re_crlf, staleFiles } from \"../workermain\"\n\nexport function assembleARMIPS(step: BuildStep): WorkerResult {\n loadNative(\"armips\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = \"main.bin\";\n var lstpath = step.prefix + \".lst\";\n var sympath = step.prefix + \".sym\";\n //test.armips(3) error: Parse error '.arm'\n var error_fn = makeErrorMatcher(errors, /^(.+?)\\((\\d+)\\)\\s+(fatal error|error|warning):\\s+(.+)/, 2, 4, step.path, 1);\n\n if (staleFiles(step, [objpath])) {\n var args = [step.path, '-temp', lstpath, '-sym', sympath, '-erroronwarning'];\n var armips: EmscriptenModule = emglobal.armips({\n instantiateWasm: moduleInstFn('armips'),\n noInitialRun: true,\n print: error_fn,\n printErr: error_fn,\n });\n\n var FS = armips.FS;\n var code = getWorkFileAsString(step.path);\n code = `.arm.little :: .create \"${objpath}\",0 :: ${code}\n .close`;\n putWorkFile(step.path, code);\n populateFiles(step, FS);\n execMain(step, armips, args);\n if (errors.length)\n return { errors: errors };\n\n var objout = FS.readFile(objpath, { encoding: 'binary' }) as Uint8Array;\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' }) as string;\n var lines = lstout.split(re_crlf);\n //00000034 .word 0x11223344 ; /vidfill.armips line 25\n var re_asmline = /^([0-9A-F]+) (.+?); [/](.+?) line (\\d+)/;\n var lastofs = -1;\n for (var line of lines) {\n var m;\n if (m = re_asmline.exec(line)) {\n var path = m[3];\n var path2 = getPrefix(path) + '.lst'; // TODO: don't rename listing\n var lst = listings[path2];\n if (lst == null) { lst = listings[path2] = { lines: [] }; }\n var ofs = parseInt(m[1], 16);\n if (lastofs == ofs) {\n lst.lines.pop(); // get rid of duplicate offset\n } else if (ofs > lastofs) {\n var lastline = lst.lines[lst.lines.length - 1];\n if (lastline && !lastline.insns) {\n var insns = objout.slice(lastofs, ofs).reverse();\n lastline.insns = Array.from(insns).map((b) => hex(b, 2)).join('');\n }\n }\n lst.lines.push({\n path: path,\n line: parseInt(m[4]),\n offset: ofs\n });\n lastofs = ofs;\n }\n }\n //listings[lstpath] = {lines:lstlines, text:lstout};\n\n var symout = FS.readFile(sympath, { encoding: 'utf8' }) as string;\n //0000000C loop2\n //00000034 .dbl:0004\n var re_symline = /^([0-9A-F]+)\\s+(.+)/;\n for (var line of symout.split(re_crlf)) {\n var m;\n if (m = re_symline.exec(line)) {\n symbolmap[m[2]] = parseInt(m[1], 16);\n }\n }\n\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function assembleVASMARM(step: BuildStep): BuildStepResult {\n loadNative(\"vasmarm_std\");\n /// error 2 in line 8 of \"gfxtest.c\": unknown mnemonic <ew>\n /// error 3007: undefined symbol <XXLOOP>\n /// TODO: match undefined symbols\n var re_err1 = /^(fatal error|error|warning)? (\\d+) in line (\\d+) of \"(.+)\": (.+)/;\n var re_err2 = /^(fatal error|error|warning)? (\\d+): (.+)/;\n var re_undefsym = /symbol <(.+?)>/;\n var errors: WorkerError[] = [];\n var undefsyms = [];\n function findUndefinedSymbols(line: string) {\n // find undefined symbols in line\n undefsyms.forEach((sym) => {\n if (line.indexOf(sym) >= 0) {\n errors.push({\n path: curpath,\n line: curline,\n msg: \"Undefined symbol: \" + sym,\n })\n }\n });\n }\n function match_fn(s) {\n let matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[3]),\n path: matches[4],\n msg: matches[5],\n });\n } else {\n matches = re_err2.exec(s);\n if (matches) {\n let m = re_undefsym.exec(matches[3]);\n if (m) {\n undefsyms.push(m[1]);\n } else {\n errors.push({\n line: 0,\n msg: s,\n });\n }\n } else {\n console.log(s);\n }\n }\n }\n\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".bin\";\n var lstpath = step.prefix + \".lst\";\n\n if (staleFiles(step, [objpath])) {\n var args = ['-Fbin', '-m7tdmi', '-x', '-wfail', step.path, '-o', objpath, '-L', lstpath];\n var vasm: EmscriptenModule = emglobal.vasm({\n instantiateWasm: moduleInstFn('vasmarm_std'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n\n var FS = vasm.FS;\n populateFiles(step, FS);\n execMain(step, vasm, args);\n if (errors.length) {\n return { errors: errors };\n }\n\n if (undefsyms.length == 0) {\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n }\n\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n // 00:00000018 023020E0 \t 14: eor r3, r0, r2\n // Source: \"vidfill.vasm\"\n // 00: \".text\" (0-40)\n // LOOP 00:00000018\n // STACK S:20010000\n var symbolmap = {};\n var segments = []; // TODO\n var listings: CodeListingMap = {};\n // TODO: parse listings\n var re_asmline = /^(\\d+):([0-9A-F]+)\\s+([0-9A-F ]+)\\s+(\\d+)([:M])/;\n var re_secline = /^(\\d+):\\s+\"(.+)\"/;\n var re_nameline = /^Source:\\s+\"(.+)\"/;\n var re_symline = /^(\\w+)\\s+(\\d+):([0-9A-F]+)/;\n var re_emptyline = /^\\s+(\\d+)([:M])/;\n var curpath = step.path;\n var curline = 0;\n var sections = {};\n // map file and section indices -> names\n var lines: string[] = lstout.split(re_crlf);\n // parse lines\n var lstlines: SourceLine[] = [];\n for (var line of lines) {\n var m;\n if (m = re_secline.exec(line)) {\n sections[m[1]] = m[2];\n } else if (m = re_nameline.exec(line)) {\n curpath = m[1];\n } else if (m = re_symline.exec(line)) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n } else if (m = re_asmline.exec(line)) {\n if (m[5] == ':') {\n curline = parseInt(m[4]);\n } else {\n // TODO: macro line\n }\n lstlines.push({\n path: curpath,\n line: curline,\n offset: parseInt(m[2], 16),\n insns: m[3].replaceAll(' ', '')\n });\n findUndefinedSymbols(line);\n } else if (m = re_emptyline.exec(line)) {\n curline = parseInt(m[1]);\n findUndefinedSymbols(line);\n } else {\n //console.log(line);\n }\n }\n listings[lstpath] = { lines: lstlines, text: lstout };\n // catch-all if no error generated\n if (undefsyms.length && errors.length == 0) {\n errors.push({\n line: 0,\n msg: 'Undefined symbols: ' + undefsyms.join(', ')\n })\n }\n\n return {\n output: objout, //.slice(0x34),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport type { SourceLocation, SourceLine, WorkerError, SourceLocated } from \"./workertypes\";\n\nexport class CompileError extends Error {\n $loc: SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\nexport function mergeLocs(a: SourceLocation, b: SourceLocation): SourceLocation {\n return {\n line: Math.min(a.line, b.line),\n start: Math.min(a.start, b.start),\n end: Math.max(a.end, b.end),\n label: a.label || b.label,\n path: a.path || b.path,\n }\n}\n\nexport enum TokenType {\n EOF = 'eof',\n EOL = 'eol',\n Ident = 'ident',\n Comment = 'comment',\n Ignore = 'ignore',\n CatchAll = 'catch-all',\n}\n\nexport class Token implements SourceLocated {\n str: string;\n type: string;\n eol: boolean; // end of line?\n $loc: SourceLocation;\n}\n\nexport class TokenRule {\n type: string;\n regex: RegExp;\n}\n\nconst CATCH_ALL_RULES: TokenRule[] = [\n { type: TokenType.CatchAll, regex: /.+?/ }\n]\n\nfunction re_escape(rule: TokenRule): string {\n return `(${rule.regex.source})`;\n}\n\nexport class TokenizerRuleSet {\n rules: TokenRule[];\n regex: RegExp;\n constructor(rules: TokenRule[]) {\n this.rules = rules.concat(CATCH_ALL_RULES);\n var pattern = this.rules.map(re_escape).join('|');\n this.regex = new RegExp(pattern, \"gs\"); // global, dotall\n }\n}\n\nexport class Tokenizer {\n ruleset: TokenizerRuleSet;\n lineindex: number[];\n path: string;\n lineno: number;\n tokens: Token[];\n lasttoken: Token;\n errors: WorkerError[];\n curlabel: string;\n eof: Token;\n errorOnCatchAll = false;\n deferred: (() => void)[] = [];\n\n constructor() {\n this.errors = [];\n this.lineno = 0;\n this.lineindex = [];\n this.tokens = [];\n }\n setTokenRuleSet(ruleset: TokenizerRuleSet) {\n this.ruleset = ruleset;\n }\n setTokenRules(rules: TokenRule[]) {\n this.setTokenRuleSet(new TokenizerRuleSet(rules));\n }\n tokenizeFile(contents: string, path: string) {\n this.path = path;\n let m;\n let re = /\\n|\\r\\n?/g;\n this.lineindex.push(0);\n while (m = re.exec(contents)) {\n this.lineindex.push(m.index);\n }\n this._tokenize(contents);\n this.eof = { type: TokenType.EOF, str: \"\", eol: true, $loc: { path: this.path, line: this.lineno } };\n this.pushToken(this.eof);\n }\n _tokenize(text: string): void {\n // iterate over each token via re_toks regex\n let m: RegExpMatchArray;\n this.lineno = 0;\n while (m = this.ruleset.regex.exec(text)) {\n let found = false;\n // find line #\n while (m.index >= this.lineindex[this.lineno]) {\n this.lineno++;\n }\n // find out which capture group was matched, and thus token type\n let rules = this.ruleset.rules;\n for (let i = 0; i < rules.length; i++) {\n let s: string = m[i + 1];\n if (s != null) {\n found = true;\n let col = m.index - (this.lineindex[this.lineno-1] || -1) - 1;\n let loc = { path: this.path, line: this.lineno, start: col, end: col + s.length };\n let rule = rules[i];\n // add token to list\n switch (rule.type) {\n case TokenType.CatchAll:\n if (this.errorOnCatchAll) {\n this.compileError(`I didn't expect the character \"${m[0]}\" here.`, loc);\n }\n default:\n this.pushToken({ str: s, type: rule.type, $loc: loc, eol: false });\n break;\n case TokenType.EOL:\n // set EOL for last token\n if (this.tokens.length)\n this.tokens[this.tokens.length-1].eol = true;\n case TokenType.Comment:\n case TokenType.Ignore:\n break;\n }\n break;\n }\n }\n if (!found) {\n this.compileError(`Could not parse token: <<${m[0]}>>`)\n }\n }\n }\n pushToken(token: Token) {\n this.tokens.push(token);\n }\n addError(msg: string, loc?: SourceLocation) {\n let tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({ path: loc.path, line: loc.line, label: this.curlabel, start: loc.start, end: loc.end, msg: msg });\n }\n internalError() {\n return this.compileError(\"Internal error.\");\n }\n notImplementedError() {\n return this.compileError(\"Not yet implemented.\");\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) : CompileError {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n let e = new CompileError(msg, loc);\n throw e;\n return e;\n }\n peekToken(lookahead?: number): Token {\n let tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eof;\n }\n consumeToken(): Token {\n let tok = this.lasttoken = (this.tokens.shift() || this.eof);\n return tok;\n }\n ifToken(match: string): Token | undefined {\n if (this.peekToken().str == match) return this.consumeToken();\n }\n expectToken(str: string, msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: readonly string[], msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (!strlist.includes(tokstr)) {\n this.compileError(msg || `These keywords are valid here: ${strlist.join(', ')}`);\n }\n return tok;\n }\n parseModifiers(modifiers: string[]): { [modifier: string]: boolean } {\n let result = {};\n do {\n var tok = this.peekToken();\n if (modifiers.indexOf(tok.str) < 0)\n return result;\n this.consumeToken();\n result[tok.str] = true;\n } while (tok != null);\n }\n expectIdent(msg?: string): Token {\n let tok = this.consumeToken();\n if (tok.type != TokenType.Ident)\n this.compileError(msg || `There should be an identifier here.`);\n return tok;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n isEOF() {\n return this.tokens.length == 0 || this.peekToken().type == 'eof'; // TODO?\n }\n expectEOL(msg?: string) {\n let tok = this.consumeToken();\n if (tok.type != TokenType.EOL)\n this.compileError(msg || `There's too much stuff on this line.`);\n }\n skipBlankLines() {\n this.skipTokenTypes(['eol']);\n }\n skipTokenTypes(types: string[]) {\n while (types.includes(this.peekToken().type))\n this.consumeToken();\n }\n expectTokenTypes(types: string[], msg?: string) {\n let tok = this.consumeToken();\n if (!types.includes(tok.type))\n this.compileError(msg || `There should be a ${types.map((s) => `\"${s}\"`).join(' or ')} here. not a \"${tok.type}\".`);\n return tok;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n runDeferred() {\n while (this.deferred.length) {\n this.deferred.shift()();\n }\n }\n}\n", "\nvar debug = false;\n\nexport interface BoxConstraints {\n left?: number;\n top?: number;\n width: number;\n height: number;\n box?: PlacedBox;\n label?: string;\n}\n\nenum BoxPlacement {\n TopLeft=0, TopRight=1, BottomLeft=2, BottomRight=3\n}\n\nexport interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlacedBox extends Box {\n bin: Bin;\n parents: Box[];\n place: BoxPlacement;\n}\n\nfunction boxesIntersect(a: Box, b: Box) : boolean {\n return !(b.left >= a.right || b.right <= a.left || b.top >= a.bottom || b.bottom <= a.top);\n}\n\nfunction boxesContain(a: Box, b: Box) : boolean {\n return b.left >= a.left && b.top >= a.top && b.right <= a.right && b.bottom <= a.bottom;\n}\n\nexport class Bin {\n boxes: Box[] = [];\n free: Box[] = [];\n extents: Box = {left:0,top:0,right:0,bottom:0};\n\n constructor(public readonly binbounds: Box) {\n this.free.push(binbounds);\n }\n getBoxes(bounds: Box, limit: number, boxes?: Box[]) : Box[] {\n let result = [];\n if (!boxes) boxes = this.boxes;\n for (let box of boxes) {\n //console.log(bounds, box, boxesIntersect(bounds, box))\n if (boxesIntersect(bounds, box)) {\n result.push(box);\n if (result.length >= limit) break;\n }\n }\n return result;\n }\n fits(b: Box) {\n if (!boxesContain(this.binbounds, b)) {\n if (debug) console.log('out of bounds!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n if (this.getBoxes(b, 1).length > 0) {\n if (debug) console.log('intersect!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n return true;\n }\n bestFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n if (b.left != null && b.left < f.left) continue;\n if (b.left != null && b.left + b.width > f.right) continue;\n if (b.top != null && b.top < f.top) continue;\n if (b.top != null && b.top + b.height > f.bottom) continue;\n let dx = (f.right - f.left) - b.width;\n let dy = (f.bottom - f.top) - b.height;\n if (dx >= 0 && dy >= 0) {\n let score = 1 / (1 + dx + dy + f.left * 0.001);\n if (score > bestscore) {\n best = f;\n bestscore = score;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n anyFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n let box : Box = { \n left: b.left != null ? b.left : f.left, \n right: f.left + b.width,\n top: b.top != null ? b.top : f.top,\n bottom: f.top + b.height };\n if (this.fits(box)) {\n let score = 1 / (1 + box.left + box.top);\n if (score > bestscore) {\n best = f;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n add(b: PlacedBox) {\n if (debug) console.log('add', b.left,b.top,b.right,b.bottom);\n if (!this.fits(b)) {\n //console.log('collided with', this.getBoxes(b, 1));\n throw new Error(`bad fit ${b.left} ${b.top} ${b.right} ${b.bottom}`)\n }\n // add box to list\n this.boxes.push(b);\n this.extents.right = Math.max(this.extents.right, b.right);\n this.extents.bottom = Math.max(this.extents.bottom, b.bottom);\n // delete bin\n for (let p of b.parents) {\n let i = this.free.indexOf(p);\n if (i < 0) throw new Error('cannot find parent');\n if (debug) console.log('removed',p.left,p.top,p.right,p.bottom);\n this.free.splice(i, 1);\n // split into new bins\n // make long columns\n this.addFree(p.left, p.top, b.left, p.bottom);\n this.addFree(b.right, p.top, p.right, p.bottom);\n // make top caps\n this.addFree(b.left, p.top, b.right, b.top);\n this.addFree(b.left, b.bottom, b.right, p.bottom);\n }\n }\n addFree(left: number, top: number, right: number, bottom: number) {\n if (bottom > top && right > left) {\n let b = { left, top, right, bottom };\n if (debug) console.log('free',b.left,b.top,b.right,b.bottom);\n this.free.push(b);\n }\n // TODO: merge free boxes?\n }\n}\n\nexport class Packer {\n bins : Bin[] = [];\n boxes : BoxConstraints[] = [];\n defaultPlacement : BoxPlacement = BoxPlacement.TopLeft; //TODO\n\n pack() : boolean {\n for (let bc of this.boxes) {\n let box = this.bestPlacement(bc);\n if (!box) return false;\n box.bin.add(box);\n bc.box = box;\n }\n return true;\n }\n bestPlacement(b: BoxConstraints) : PlacedBox | null {\n for (let bin of this.bins) {\n let parent = bin.bestFit(b);\n let approx = false;\n if (!parent) {\n parent = bin.anyFit(b);\n approx = true;\n if (debug) console.log('anyfit',parent?.left,parent?.top);\n }\n if (parent) {\n let place = this.defaultPlacement;\n let box = {\n left: parent.left,\n top: parent.top,\n right: parent.left + b.width,\n bottom: parent.top + b.height\n };\n if (b.left != null) {\n box.left = b.left;\n box.right = b.left + b.width;\n }\n if (b.top != null) {\n box.top = b.top;\n box.bottom = b.top + b.height;\n }\n if (place == BoxPlacement.BottomLeft || place == BoxPlacement.BottomRight) {\n let h = box.bottom - box.top;\n box.top = parent.bottom - h;\n box.bottom = parent.bottom;\n }\n if (place == BoxPlacement.TopRight || place == BoxPlacement.BottomRight) {\n let w = box.right - box.left;\n box.left = parent.right - w;\n box.right = parent.right;\n }\n if (debug) console.log('place',b.label,box.left,box.top,box.right,box.bottom,parent?.left,parent?.top);\n let parents = [parent];\n // if approx match, might overlap multiple free boxes\n if (approx) parents = bin.getBoxes(box, 100, bin.free);\n return { parents, place, bin, ...box };\n }\n }\n if (debug) console.log('cannot place!', b.left,b.top,b.width,b.height);\n return null;\n }\n toSVG() {\n let s = '';\n let r = {width:100,height:70}\n for (let bin of this.bins) {\n r.width = Math.max(r.width, bin.binbounds.right);\n r.height = Math.max(r.height, bin.binbounds.bottom);\n }\n s += `<svg viewBox=\"0 0 ${r.width} ${r.height}\" xmlns=\"http://www.w3.org/2000/svg\"><style><![CDATA[text {font: 1px sans-serif;}]]></style>`;\n for (let bin of this.bins) {\n let be = bin.extents;\n s += '<g>'\n s += `<rect width=\"${be.right-be.left}\" height=\"${be.bottom-be.top}\" stroke=\"black\" stroke-width=\"0.5\" fill=\"none\"/>`;\n let textx = be.right+1;\n let texty = 0;\n for (let box of this.boxes) {\n let b = box.box;\n if (b) {\n if (b.bin == bin) s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"black\" stroke-width=\"0.25\" fill=\"#ccc\"/>`;\n if (b.top == texty) textx += 10; else textx = be.right+1;\n texty = b.top;\n if (box.label) s += `<text x=\"${textx}\" y=\"${texty}\" height=\"1\">${box.label}</text>`;\n }\n }\n /*\n for (let b of bin.free) {\n s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"red\" stroke-width=\"0.1\" fill=\"none\"/>`;\n }\n */\n s += '</g>'\n }\n s += `</svg>`;\n return s;\n }\n toSVGUrl() {\n return `data:image/svg+xml;base64,${btoa(this.toSVG())}`;\n }\n}\n", "\nimport { Token } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { Bin, Packer } from \"./binpack\";\n\nexport class ECSError extends Error implements SourceLocated {\n $loc: SourceLocation;\n $sources: SourceLocated[] = [];\n\n constructor(msg: string, obj?: SourceLocation | SourceLocated) {\n super(msg);\n Object.setPrototypeOf(this, ECSError.prototype);\n if (obj) this.$loc = (obj as SourceLocated).$loc || (obj as SourceLocation);\n }\n}\n\nfunction mksymbol(c: ComponentType, fieldName: string) {\n return c.name + '_' + fieldName;\n}\nfunction mkscopesymbol(s: EntityScope, c: ComponentType, fieldName: string) {\n return s.name + '_' + c.name + '_' + fieldName;\n}\n\nexport interface Entity extends SourceLocated {\n id: number;\n name?: string;\n etype: EntityArchetype;\n consts: { [component_field: string]: DataValue };\n // TODO: need scope scoping?\n inits: { [scope_component_field: string]: DataValue };\n}\n\nexport interface EntityConst {\n component: ComponentType;\n name: string;\n value: DataValue;\n}\n\nexport interface EntityArchetype {\n components: ComponentType[];\n}\n\nexport interface ComponentType extends SourceLocated {\n name: string;\n fields: DataField[];\n optional?: boolean;\n}\n\nexport interface Query extends SourceLocated {\n include: ComponentType[];\n exclude?: ComponentType[];\n entities?: Entity[];\n limit?: number;\n}\n\nexport class SystemStats {\n tempstartseq: number | undefined;\n tempendseq: number | undefined;\n}\n\nexport interface System extends SourceLocated {\n name: string;\n actions: Action[];\n tempbytes?: number;\n}\n\nexport interface SystemInstanceParameters {\n query?: Query;\n refEntity?: Entity;\n refField?: ComponentFieldPair;\n}\n\nexport interface SystemInstance extends SourceLocated {\n system: System;\n params: SystemInstanceParameters;\n id: number;\n}\n\nexport const SELECT_TYPE = ['once', 'foreach', 'join', 'with', 'if', 'select', 'unroll'] as const;\n\nexport type SelectType = typeof SELECT_TYPE[number];\n\n// TODO?\nexport interface ActionContext {\n system: System\n scope: EntityScope | null\n}\n\nexport class ActionNode implements SourceLocated {\n constructor(\n public readonly owner: ActionContext,\n public readonly $loc: SourceLocation\n ) { }\n\n children?: ActionNode[];\n}\n\nexport class CodeLiteralNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly text: string\n ) {\n super(owner, $loc);\n }\n}\n\nexport class CodePlaceholderNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly args: string[]\n ) {\n super(owner, $loc);\n }\n}\n\nexport interface Action extends SourceLocated {\n event: string;\n expr: Statement;\n critical?: boolean;\n fitbytes?: number;\n}\n\nexport type DataValue = number | boolean | Uint8Array | Uint16Array | Uint32Array;\n\nexport type DataField = { name: string; $loc: SourceLocation } & DataType;\n\nexport type DataType = IntType | ArrayType | RefType;\n\nexport interface IntType {\n dtype: 'int'\n lo: number\n hi: number\n defvalue?: number\n enums?: { [name: string] : number }\n}\n\nexport interface ArrayType {\n dtype: 'array'\n elem: DataType\n index?: DataType\n baseoffset?: number\n}\n\nexport interface RefType {\n dtype: 'ref'\n query: Query\n}\n\ninterface FieldArray {\n component: ComponentType;\n field: DataField;\n elo: number;\n ehi: number;\n access?: FieldAccess[];\n}\n\ninterface FieldAccess {\n symbol: string;\n bit: number;\n width: number;\n}\n\ninterface ConstByte {\n symbol: string;\n bitofs: number;\n}\n\nexport interface ComponentFieldPair {\n c: ComponentType;\n f: DataField;\n}\n\n// Expressions\n\nexport interface ForwardRef extends SourceLocated {\n reftype: RefType | undefined\n token: Token\n}\n\nexport type LExpr = IndOp | EntityFieldOp;\nexport type Statement = InlineCode | BlockExpr | QueryExpr;\nexport type Expr = BinOp | UnOp | Literal | ForwardRef | LExpr | Statement;\nexport type Opcode = string;\n\nexport interface ExprBase extends SourceLocated {\n valtype: DataType;\n}\n\nexport interface Literal extends ExprBase {\n value: DataValue;\n}\n\nexport interface LiteralInt extends Literal {\n value: number;\n valtype: IntType;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface CondOp extends ExprBase {\n cond: Expr;\n iftrue?: Expr;\n iffalse?: Expr;\n}\n\nexport interface BranchOp extends ExprBase {\n branch: BlockExpr;\n}\n\nexport interface EntityFieldOp extends ExprBase {\n entities: Entity[];\n field: DataField;\n}\n\nexport interface EntityContextOp extends ExprBase {\n entities: Entity[];\n}\n\nexport interface InlineCode extends ExprBase {\n code: string;\n}\n\nexport interface BlockExpr extends ExprBase {\n loop?: boolean;\n stmts: Expr[];\n}\n\nexport interface QueryExpr extends BlockExpr {\n select: SelectType\n query: Query\n direction?: 'asc' | 'desc'\n join?: Query\n all?: boolean\n}\n\n\nexport function isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nexport function isLiteralInt(arg: Expr): arg is LiteralInt {\n return isLiteral(arg) && arg.valtype.dtype == 'int';\n}\nexport function isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nexport function isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nexport function isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\nexport function isBlockStmt(arg: Expr): arg is BlockExpr {\n return (arg as any).stmts != null;\n}\nexport function isInlineCode(arg: Expr): arg is InlineCode {\n return (arg as any).code != null;\n}\nexport function isQueryExpr(arg: Expr): arg is QueryExpr {\n return (arg as any).query != null;\n}\n\n\n/// DIALECT\n\nexport class Dialect_CA65 {\n\n ASM_ITERATE_EACH_ASC = `\n ldx #0\n@__each:\n {{%code}}\n inx\n cpx #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_EACH_DESC = `\n ldx #{{%ecount}}-1\n@__each:\n {{%code}}\n dex\n jpl @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_ASC = `\n ldy #0\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n iny\n cpy #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_DESC = `\n ldy #{{%ecount}}-1\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n dey\n jpl @__each\n@__exit:\n`;\n\n ASM_FILTER_RANGE_LO_X = `\n cpx #{{%xofs}}\n jcc @__skipxlo\n {{%code}}\n@__skipxlo:\n`\n\n ASM_FILTER_RANGE_HI_X = `\n cpx #{{%xofs}}+{{%ecount}}\n jcs @__skipxhi\n {{%code}}\n@__skipxhi:\n`\n\n ASM_LOOKUP_REF_X = `\n ldx {{%reffield}}\n {{%code}}\n`\n\n INIT_FROM_ARRAY = `\n ldy #{{%nbytes}}\n: lda {{%src}}-1,y\n sta {{%dest}}-1,y\n dey\n bne :-\n`\n\n comment(s: string) {\n return `\\n;;; ${s}\\n`;\n }\n absolute(ident: string, offset?: number) {\n return this.addOffset(ident, offset || 0);\n }\n addOffset(ident: string, offset: number) {\n if (offset > 0) return `${ident}+${offset}`;\n if (offset < 0) return `${ident}-${-offset}`;\n return ident;\n }\n indexed_x(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',x';\n }\n indexed_y(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',y';\n }\n fieldsymbol(component: ComponentType, field: DataField, bitofs: number) {\n return `${component.name}_${field.name}_b${bitofs}`;\n }\n datasymbol(component: ComponentType, field: DataField, eid: number, bitofs: number) {\n return `${component.name}_${field.name}_e${eid}_b${bitofs}`;\n }\n debug_file(path: string) {\n return `.dbg file, \"${path}\", 0, 0`\n }\n debug_line(path: string, line: number) {\n return `.dbg line, \"${path}\", ${line}`\n }\n startScope(name: string) {\n return `.scope ${name}`\n }\n endScope(name: string) {\n return `.endscope\\n${this.scopeSymbol(name)} = ${name}::__Start`\n }\n scopeSymbol(name: string) {\n return `${name}__Start`;\n }\n align(value: number) {\n return `.align ${value}`;\n }\n alignSegmentStart() {\n return this.label('__ALIGNORIGIN');\n }\n warningIfPageCrossed(startlabel: string) {\n return `\n.assert >(${startlabel}) = >(*), error, \"${startlabel} crosses a page boundary!\"`\n }\n warningIfMoreThan(bytes: number, startlabel: string) {\n return `\n.assert (* - ${startlabel}) <= ${bytes}, error, .sprintf(\"${startlabel} does not fit in ${bytes} bytes, it took %d!\", (* - ${startlabel}))`\n }\n alignIfLessThan(bytes: number) {\n return `\n.if <(* - __ALIGNORIGIN) > 256-${bytes}\n.align $100\n.endif`\n }\n segment(segtype: 'rodata' | 'bss' | 'code') {\n if (segtype == 'bss') {\n return `.zeropage`;\n } else if (segtype == 'rodata') {\n return '.rodata';\n } else {\n return `.code`;\n }\n }\n label(sym: string) {\n return `${sym}:`;\n }\n export(sym: string) {\n return `.export _${sym} = ${sym}`;\n }\n byte(b: number | ConstByte | undefined) {\n if (b === undefined) {\n return `.res 1`\n } else if (typeof b === 'number') {\n if (b < 0 || b > 255) throw new ECSError(`out of range byte ${b}`);\n return `.byte ${b}`\n } else {\n if (b.bitofs == 0) return `.byte <${b.symbol}`\n else if (b.bitofs == 8) return `.byte >${b.symbol}`\n else return `.byte ((${b.symbol} >> ${b.bitofs})&255)`\n }\n }\n tempLabel(inst: SystemInstance) {\n return `${inst.system.name}__${inst.id}__tmp`;\n }\n equate(symbol: string, value: string): string {\n return `${symbol} = ${value}`;\n }\n define(symbol: string, value?: string): string {\n if (value) return `.define ${symbol} ${value}`;\n else return `.define ${symbol}`;\n }\n call(symbol: string) {\n return ` jsr ${symbol}`;\n }\n jump(symbol: string) {\n return ` jmp ${symbol}`;\n }\n return() {\n return ' rts';\n }\n}\n\n// TODO: merge with Dialect?\nexport class SourceFileExport {\n lines: string[] = [];\n\n line(s: string) {\n this.text(s);\n }\n text(s: string) {\n for (let l of s.split('\\n'))\n this.lines.push(l);\n }\n toString() {\n return this.lines.join('\\n');\n }\n}\n\nclass CodeSegment {\n codefrags: string[] = [];\n\n addCodeFragment(code: string) {\n this.codefrags.push(code);\n }\n dump(file: SourceFileExport) {\n for (let code of this.codefrags) {\n file.text(code);\n }\n }\n}\n\nclass DataSegment {\n symbols: { [sym: string]: number } = {};\n equates: { [sym: string]: string } = {};\n ofs2sym = new Map<number, string[]>();\n fieldranges: { [cfname: string]: FieldArray } = {};\n size: number = 0;\n initdata: (number | ConstByte | undefined)[] = [];\n\n allocateBytes(name: string, bytes: number) {\n let ofs = this.symbols[name];\n if (ofs == null) {\n ofs = this.size;\n this.declareSymbol(name, ofs);\n this.size += bytes;\n }\n return ofs;\n }\n declareSymbol(name: string, ofs: number) {\n this.symbols[name] = ofs;\n if (!this.ofs2sym.has(ofs))\n this.ofs2sym.set(ofs, []);\n this.ofs2sym.get(ofs)?.push(name);\n }\n // TODO: ordering should not matter, but it does\n findExistingInitData(bytes: Uint8Array) {\n for (let i=0; i<this.size - bytes.length; i++) {\n for (var j=0; j<bytes.length; j++) {\n if (this.initdata[i+j] !== bytes[j]) break;\n }\n if (j == bytes.length) return i;\n }\n return -1;\n }\n allocateInitData(name: string, bytes: Uint8Array) {\n let ofs = this.findExistingInitData(bytes);\n if (ofs >= 0) {\n this.declareSymbol(name, ofs);\n } else {\n ofs = this.allocateBytes(name, bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n this.initdata[ofs + i] = bytes[i];\n }\n }\n }\n dump(file: SourceFileExport, dialect: Dialect_CA65, doExport: boolean) {\n // TODO: fewer lines\n for (let i = 0; i < this.size; i++) {\n let syms = this.ofs2sym.get(i);\n if (syms) {\n for (let sym of syms) {\n if (doExport) file.line(dialect.export(sym)); // TODO: this is a hack for C export\n file.line(dialect.label(sym));\n }\n }\n file.line(dialect.byte(this.initdata[i]));\n }\n for (let [symbol,value] of Object.entries(this.equates)) {\n file.line(dialect.equate(symbol, value));\n }\n }\n // TODO: move cfname functions in here too\n getFieldRange(component: ComponentType, fieldName: string) {\n return this.fieldranges[mksymbol(component, fieldName)];\n }\n getByteOffset(range: FieldArray, access: FieldAccess, entityID: number) {\n if (entityID < range.elo) throw new ECSError(`entity ID ${entityID} too low for ${access.symbol}`);\n if (entityID > range.ehi) throw new ECSError(`entity ID ${entityID} too high for ${access.symbol}`);\n let ofs = this.symbols[access.symbol];\n if (ofs !== undefined) {\n return ofs + entityID - range.elo;\n }\n throw new ECSError(`cannot find field access for ${access.symbol}`);\n }\n getOriginSymbol() {\n let a = this.ofs2sym.get(0);\n if (!a) throw new ECSError('getOriginSymbol(): no symbol at offset 0'); // TODO\n return a[0];\n }\n}\n\nclass UninitDataSegment extends DataSegment {\n}\n\nclass ConstDataSegment extends DataSegment {\n}\n\n// TODO: none of this makes sense\nfunction getFieldBits(f: IntType) {\n //let n = Math.abs(f.lo) + f.hi + 1;\n let n = f.hi - f.lo + 1;\n return Math.ceil(Math.log2(n));\n}\n\nfunction getFieldLength(f: DataType) {\n if (f.dtype == 'int') {\n return f.hi - f.lo + 1;\n } else {\n return 1; //TODO?\n }\n}\n\nfunction getPackedFieldSize(f: DataType, constValue?: DataValue): number {\n if (f.dtype == 'int') {\n return getFieldBits(f);\n } if (f.dtype == 'array' && f.index) {\n return 0; // TODO? getFieldLength(f.index) * getPackedFieldSize(f.elem);\n } if (f.dtype == 'array' && constValue != null && Array.isArray(constValue)) {\n return constValue.length * getPackedFieldSize(f.elem);\n } if (f.dtype == 'ref') {\n return 8; // TODO: > 256 entities?\n }\n return 0;\n}\n\nclass EntitySet {\n atypes: EntityArchetype[];\n entities: Entity[];\n scope;\n\n constructor(scope: EntityScope, query?: Query, e?: Entity[]) {\n this.scope = scope;\n if (query) {\n if (query.entities) {\n this.entities = query.entities.slice(0);\n } else {\n this.atypes = scope.em.archetypesMatching(query);\n this.entities = scope.entitiesMatching(this.atypes);\n }\n // TODO: desc?\n if (query.limit) {\n this.entities = this.entities.slice(0, query.limit);\n }\n } else if (e) {\n this.entities = e;\n } else {\n throw new ECSError('invalid EntitySet constructor')\n }\n if (!this.atypes) {\n let at = new Set<EntityArchetype>();\n for (let e of this.entities) at.add(e.etype);\n this.atypes = Array.from(at.values());\n }\n }\n contains(c: ComponentType, f: DataField, where: SourceLocated) {\n // TODO: action for error msg\n return this.scope.em.singleComponentWithFieldName(this.atypes, f.name, where);\n }\n intersection(qr: EntitySet) {\n let ents = this.entities.filter(e => qr.entities.includes(e));\n return new EntitySet(this.scope, undefined, ents);\n }\n union(qr: EntitySet) {\n // TODO: remove dups\n let ents = this.entities.concat(qr.entities);\n let atypes = this.atypes.concat(qr.atypes);\n return new EntitySet(this.scope, undefined, ents);\n }\n isContiguous() {\n if (this.entities.length == 0) return true;\n let id = this.entities[0].id;\n for (let i = 1; i < this.entities.length; i++) {\n if (this.entities[i].id != ++id) return false;\n }\n return true;\n }\n}\n\nclass IndexRegister {\n lo: number | null;\n hi: number | null;\n elo: number;\n ehi: number;\n eset: EntitySet | undefined;\n\n constructor(\n public readonly scope: EntityScope,\n eset?: EntitySet\n ) {\n this.elo = 0;\n this.ehi = scope.entities.length - 1;\n this.lo = null;\n this.hi = null;\n if (eset) { this.narrowInPlace(eset); }\n }\n entityCount() {\n return this.ehi - this.elo + 1;\n }\n clone() {\n return Object.assign(new IndexRegister(this.scope), this);\n }\n narrow(eset: EntitySet, action?: SourceLocated) {\n let i = this.clone();\n return i.narrowInPlace(eset, action) ? i : null;\n }\n narrowInPlace(eset: EntitySet, action?: SourceLocated): boolean {\n if (this.scope != eset.scope) throw new ECSError(`scope mismatch`, action);\n if (!eset.isContiguous()) throw new ECSError(`entities are not contiguous`, action);\n if (this.eset) {\n this.eset = this.eset.intersection(eset);\n } else {\n this.eset = eset;\n }\n if (this.eset.entities.length == 0) {\n return false;\n }\n let newelo = this.eset.entities[0].id;\n let newehi = this.eset.entities[this.eset.entities.length - 1].id;\n if (this.lo === null || this.hi === null) {\n this.lo = 0;\n this.hi = newehi - newelo;\n this.elo = newelo;\n this.ehi = newehi;\n } else {\n //if (action) console.log((action as any).event, this.elo, '-', this.ehi, '->', newelo, '..', newehi);\n this.lo += newelo - this.elo;\n this.hi += newehi - this.ehi;\n }\n return true;\n }\n // TODO: removegi\n offset() {\n return this.lo || 0;\n }\n}\n\n// todo: generalize\nclass ActionCPUState {\n working: EntitySet;\n props: {[key: string] : string};\n xreg: IndexRegister | null = null;\n yreg: IndexRegister | null = null;\n}\n\nclass ActionEval {\n em : EntityManager;\n dialect : Dialect_CA65;\n tmplabel = '';\n label : string;\n seq : number;\n //used = new Set<string>(); // TODO\n\n constructor(\n readonly scope: EntityScope,\n readonly instance: SystemInstance,\n readonly action: Action,\n readonly eventargs: string[])\n {\n this.em = scope.em;\n this.dialect = scope.em.dialect;\n this.tmplabel = this.dialect.tempLabel(this.instance);\n //let query = (this.action as ActionWithQuery).query;\n //TODO? if (query && this.entities.length == 0)\n //throw new ECSError(`query doesn't match any entities`, query); // TODO \n this.seq = this.em.seq++;\n this.label = `${this.instance.system.name}__${action.event}__${this.seq}`;\n }\n begin() {\n }\n end() {\n }\n codeToString(): string {\n let code = this.exprToCode(this.action.expr);\n return code;\n }\n private replaceTags(code: string, action: Action, props: { [name: string]: string; }) {\n const tag_re = /\\{\\{(.+?)\\}\\}/g;\n code = code.replace(tag_re, (entire, group: string) => {\n let toks = group.split(/\\s+/);\n if (toks.length == 0)\n throw new ECSError(`empty command`, action);\n let cmd = group.charAt(0);\n let arg0 = toks[0].substring(1).trim();\n let args = [arg0].concat(toks.slice(1));\n switch (cmd) {\n case '!': return this.__emit(args);\n case '$': return this.__local(args);\n case '^': return this.__use(args);\n case '#': return this.__arg(args);\n case '&': return this.__eid(args);\n case '<': return this.__get([arg0, '0']);\n case '>': return this.__get([arg0, '8']);\n default:\n let value = props[toks[0]];\n if (value)\n return value;\n let fn = (this as any)['__' + toks[0]];\n if (fn)\n return fn.bind(this)(toks.slice(1));\n throw new ECSError(`unrecognized command {{${toks[0]}}}`, action);\n }\n });\n return code;\n }\n private replaceLabels(code: string) {\n const label_re = /@(\\w+)\\b/g;\n let seq = this.em.seq++;\n let label = `${this.instance.system.name}__${this.action.event}__${seq}`;\n code = code.replace(label_re, (s: string, a: string) => `${label}__${a}`);\n return code;\n }\n\n __get(args: string[]) {\n return this.getset(args, false);\n }\n __set(args: string[]) {\n return this.getset(args, true);\n }\n getset(args: string[], canwrite: boolean) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n return this.generateCodeForField(fieldName, bitofs, canwrite);\n }\n parseFieldArgs(args: string[]) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n let component = this.em.singleComponentWithFieldName(this.scope.state.working.atypes, fieldName, this.action);\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, this.action);\n return { component, field, bitofs };\n }\n __base(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n return this.dialect.fieldsymbol(component, field, bitofs);\n }\n __data(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`data operates on exactly one entity`, this.action); // TODO?\n let eid = entities[0].id; // TODO?\n return this.dialect.datasymbol(component, field, eid, bitofs);\n }\n __const(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`const operates on exactly one entity`, this.action); // TODO?\n let constVal = entities[0].consts[mksymbol(component, field.name)];\n if (constVal === undefined) throw new ECSError(`field is not constant`, this.action); // TODO?\n if (typeof constVal !== 'number') throw new ECSError(`field is not numeric`, this.action); // TODO?\n return constVal << bitofs;\n }\n __index(args: string[]) {\n // TODO: check select type and if we actually have an index...\n let ident = args[0];\n let index = parseInt(args[1] || '0');\n let entities = this.scope.state.working.entities;\n if (entities.length == 1) {\n return this.dialect.absolute(ident);\n } else {\n return this.dialect.indexed_x(ident, index); //TODO?\n }\n }\n __eid(args: string[]) {\n let e = this.scope.getEntityByName(args[0] || '?');\n if (!e) throw new ECSError(`can't find entity named \"${args[0]}\"`, this.action);\n return e.id.toString();\n }\n __use(args: string[]) {\n return this.scope.includeResource(args[0]);\n }\n __emit(args: string[]) {\n let event = args[0];\n let eventargs = args.slice(1);\n try {\n return this.scope.generateCodeForEvent(event, eventargs);\n } catch (e) {\n if (e.$sources) e.$sources.push(this.action);\n throw e;\n }\n }\n __local(args: string[]) {\n let tempinc = parseInt(args[0]);\n let tempbytes = this.instance.system.tempbytes;\n if (isNaN(tempinc)) throw new ECSError(`bad temporary offset`, this.action);\n if (!tempbytes) throw new ECSError(`this system has no locals`, this.action);\n if (tempinc < 0 || tempinc >= tempbytes) throw new ECSError(`this system only has ${tempbytes} locals`, this.action);\n this.scope.updateTempLiveness(this.instance);\n return `${this.tmplabel}+${tempinc}`;\n }\n __arg(args: string[]) {\n let argindex = parseInt(args[0] || '0');\n let argvalue = this.eventargs[argindex] || '';\n //this.used.add(`arg_${argindex}_${argvalue}`);\n return argvalue;\n }\n __start(args: string[]) {\n let startSymbol = this.dialect.scopeSymbol(args[0]);\n return this.dialect.jump(startSymbol);\n }\n generateCodeForField(fieldName: string, bitofs: number, canWrite: boolean): string {\n const action = this.action;\n const qr = this.scope.state.working;\n\n var component: ComponentType;\n var baseLookup = false;\n var entityLookup = false;\n let entities: Entity[];\n // is qualified field?\n if (fieldName.indexOf('.') > 0) {\n let [entname, fname] = fieldName.split('.');\n let ent = this.scope.getEntityByName(entname);\n if (ent == null) throw new ECSError(`no entity named \"${entname}\" in this scope`, action);\n component = this.em.singleComponentWithFieldName([ent.etype], fname, action);\n fieldName = fname;\n entities = [ent];\n entityLookup = true;\n } else if (fieldName.indexOf(':') > 0) {\n let [cname, fname] = fieldName.split(':');\n component = this.em.getComponentByName(cname);\n if (component == null) throw new ECSError(`no component named \"${cname}\"`, action)\n entities = this.scope.state.working.entities;\n fieldName = fname;\n baseLookup = true;\n } else {\n component = this.em.singleComponentWithFieldName(qr.atypes, fieldName, action);\n entities = this.scope.state.working.entities;\n }\n // find archetypes\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, action);\n let ident = this.dialect.fieldsymbol(component, field, bitofs);\n // see if all entities have the same constant value\n // TODO: should be done somewhere else?\n let constValues = new Set<DataValue>();\n let isConst = false;\n for (let e of entities) {\n let constVal = e.consts[mksymbol(component, fieldName)];\n if (constVal !== undefined) isConst = true;\n constValues.add(constVal); // constVal === undefined is allowed\n }\n // can't write to constant\n if (isConst && canWrite)\n throw new ECSError(`can't write to constant field ${fieldName}`, action);\n // is it a constant?\n if (constValues.size == 1) {\n let value = constValues.values().next().value as DataValue;\n // TODO: what about symbols?\n // TODO: use dialect\n if (typeof value === 'number') {\n return `#${(value >> bitofs) & 0xff}`;\n }\n }\n // TODO: offset > 0?\n // TODO: don't mix const and init data\n let range = this.scope.getFieldRange(component, field.name);\n if (!range) throw new ECSError(`couldn't find field for ${component.name}:${fieldName}, maybe no entities?`); // TODO\n // TODO: dialect\n // TODO: doesnt work for entity.field\n // TODO: array field baseoffset?\n if (baseLookup) {\n return this.dialect.absolute(ident);\n } else if (entities.length == 1) {\n // TODO: qr or this.entites?\n let eidofs = entities[0].id - range.elo; // TODO: negative?\n return this.dialect.absolute(ident, eidofs);\n } else {\n let ir;\n let int;\n let eidofs;\n let xreg = this.scope.state.xreg;\n let yreg = this.scope.state.yreg;\n if (xreg && (int = xreg.eset?.intersection(qr))) {\n //console.log(eidofs,'x',qr.entities[0].id,xreg.elo,int.entities[0].id,xreg.offset(),range.elo);\n ir = xreg.eset;\n //eidofs -= xreg.offset();\n //eidofs -= int.entities[0].id - xreg.elo;\n eidofs = xreg.elo - range.elo;\n // TODO? if (xreg.ehi > range.ehi) throw new ECSError(`field \"${field.name}\" could overflow`, action);\n } else if (yreg && (int = yreg.eset?.intersection(qr))) {\n ir = yreg.eset;\n //eidofs -= yreg.offset();\n eidofs = yreg.elo - range.elo;\n } else {\n ir = null;\n eidofs = 0;\n }\n if (!ir) {\n throw new ECSError(`no intersection for index register`, action);\n }\n if (ir.entities.length == 0) throw new ECSError(`no common entities for index register`, action);\n if (!ir.isContiguous()) throw new ECSError(`entities in query are not contiguous`, action);\n if (ir == this.scope.state.xreg?.eset)\n return this.dialect.indexed_x(ident, eidofs);\n if (ir == this.scope.state.yreg?.eset)\n return this.dialect.indexed_y(ident, eidofs);\n throw new ECSError(`cannot find \"${component.name}:${field.name}\" in state`, action);\n }\n }\n getJoinField(action: Action, atypes: EntityArchetype[], jtypes: EntityArchetype[]): ComponentFieldPair {\n let refs = Array.from(this.scope.iterateArchetypeFields(atypes, (c, f) => f.dtype == 'ref'));\n // TODO: better error message\n if (refs.length == 0) throw new ECSError(`cannot find join fields`, action);\n if (refs.length > 1) throw new ECSError(`cannot join multiple fields (${refs.map(r => r.f.name).join(' ')})`, action);\n // TODO: check to make sure join works\n return refs[0]; // TODO\n /* TODO\n let match = refs.map(ref => this.em.archetypesMatching((ref.f as RefType).query));\n for (let ref of refs) {\n let m = this.em.archetypesMatching((ref.f as RefType).query);\n for (let a of m) {\n if (jtypes.includes(a.etype)) {\n console.log(a,m);\n }\n }\n }\n */\n }\n isSubroutineSized(code: string) {\n // TODO?\n if (code.length > 20000) return false;\n if (code.split('\\n ').length >= 4) return true; // TODO: :^/\n return false;\n }\n exprToCode(expr: Expr) : string {\n if (isQueryExpr(expr)) {\n return this.queryExprToCode(expr);\n }\n if (isBlockStmt(expr)) {\n return this.blockStmtToCode(expr);\n }\n if (isInlineCode(expr)) {\n return this.evalInlineCode(expr.code);\n }\n throw new ECSError(`cannot convert expression to code`, expr);\n }\n evalInlineCode(code: string) {\n let props = this.scope.state.props || {};\n // replace @labels\n code = this.replaceLabels(code);\n // replace {{...}} tags\n // TODO: use nodes instead\n code = this.replaceTags(code, this.action, props);\n return code;\n }\n blockStmtToCode(expr: BlockExpr) {\n return expr.stmts.map(node => this.exprToCode(node)).join('\\n');\n }\n queryExprToCode(qexpr: QueryExpr) : string {\n //console.log('query', this.action.event, qexpr.select, qexpr.query.include);\n let q = this.startQuery(qexpr);\n // TODO: move elsewhere? is \"foreach\" and \"join\" part of the empty set?\n const allowEmpty = ['if','foreach','join'];\n if (q.working.entities.length == 0 && allowEmpty.includes(qexpr.select)) {\n //console.log('empty', this.action.event);\n this.endQuery(q);\n return '';\n } else {\n this.scope.state.working = q.working;\n this.scope.state.props = q.props;\n //console.log('begin', this.action.event, this.scope.state);\n q.code = this.evalInlineCode(q.code);\n let body = this.blockStmtToCode(qexpr);\n this.endQuery(q);\n //console.log('end', this.action.event, this.scope.state);\n body = q.code.replace('%%CODE%%', body);\n return body;\n }\n }\n queryWorkingSet(qexpr: QueryExpr) {\n const scope = this.scope;\n const instance = this.instance;\n let select = qexpr.select;\n let q = qexpr.query;\n let qr = new EntitySet(scope, q);\n // narrow query w/ working set?\n if (!(qexpr.all || q.entities)) {\n let ir = qr.intersection(scope.state.working);\n // if intersection is empty, take the global set\n // if doing otherwise would generate an error (execpt for \"if\")\n // TODO: ambiguous?\n if (ir.entities.length || select == 'if') {\n qr = ir;\n }\n }\n // TODO? error if none?\n if (instance.params.refEntity && instance.params.refField) {\n let rf = instance.params.refField;\n if (rf.f.dtype == 'ref') {\n let rq = rf.f.query;\n qr = qr.intersection(new EntitySet(scope, rq));\n //console.log('with', instance.params, rq, this.qr);\n }\n } else if (instance.params.query) {\n qr = qr.intersection(new EntitySet(scope, instance.params.query));\n }\n return qr;\n }\n updateIndexRegisters(qr: EntitySet, jr: EntitySet | null, select: SelectType) {\n const action = this.action;\n const scope = this.scope;\n const instance = this.instance;\n const state = this.scope.state;\n // TODO: generalize to other cpus/langs\n if (qr.entities.length > 1) {\n switch (select) {\n case 'once':\n break;\n case 'foreach':\n case 'unroll':\n if (state.xreg && state.yreg) throw new ECSError('no more index registers', action);\n if (state.xreg) state.yreg = new IndexRegister(scope, qr);\n else state.xreg = new IndexRegister(scope, qr);\n break;\n case 'join':\n // TODO: Joins don't work in superman (arrays offset?)\n // ignore the join query, use the ref\n if (state.xreg || state.yreg) throw new ECSError('no free index registers for join', action);\n if (jr) state.xreg = new IndexRegister(scope, jr);\n state.yreg = new IndexRegister(scope, qr);\n break;\n case 'if':\n case 'with':\n // TODO: what if not in X because 1 element?\n if (state.xreg && state.xreg.eset) {\n state.xreg = state.xreg.narrow(qr, action);\n } else if (select == 'with') {\n if (instance.params.refEntity && instance.params.refField) {\n if (state.xreg)\n state.xreg.eset = qr;\n else\n state.xreg = new IndexRegister(scope, qr);\n // ???\n }\n }\n break;\n }\n }\n }\n getCodeAndProps(qexpr: QueryExpr, qr: EntitySet, jr: EntitySet|null, \n oldState: ActionCPUState)\n {\n // get properties and code\n const entities = qr.entities;\n const select = qexpr.select;\n let code = '%%CODE%%';\n let props: { [name: string]: string } = {};\n // TODO: detect cycles\n // TODO: \"source\"?\n // TODO: what if only 1 item?\n // TODO: what if join is subset of items?\n if (select == 'join' && jr) {\n //let jentities = this.jr.entities;\n // TODO? \n // TODO? throw new ECSError(`join query doesn't match any entities`, (action as ActionWithJoin).join); // TODO \n //console.log('join', qr, jr);\n if (qr.entities.length) {\n let joinfield = this.getJoinField(this.action, qr.atypes, jr.atypes);\n // TODO: what if only 1 item?\n // TODO: should be able to access fields via Y reg\n code = this.wrapCodeInLoop(code, qexpr, qr.entities, joinfield);\n props['%joinfield'] = this.dialect.fieldsymbol(joinfield.c, joinfield.f, 0); //TODO?\n }\n }\n // select subset of entities\n let fullEntityCount = qr.entities.length; //entities.length.toString();\n // TODO: let loopreduce = !loopents || entities.length < loopents.length;\n //console.log(action.event, entities.length, loopents.length);\n // filter entities from loop?\n // TODO: when to ignore if entities.length == 1 and not in for loop?\n if (select == 'with') {\n // TODO? when to load x?\n if (this.instance.params.refEntity && this.instance.params.refField) {\n let re = this.instance.params.refEntity;\n let rf = this.instance.params.refField;\n code = this.wrapCodeInRefLookup(code);\n // TODO: only fetches 1st entity in list, need offset\n let range = this.scope.getFieldRange(rf.c, rf.f.name);\n let eidofs = re.id - range.elo;\n props['%reffield'] = `${this.dialect.fieldsymbol(rf.c, rf.f, 0)}+${eidofs}`;\n } else {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n }\n if (select == 'if') {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n if (select == 'foreach' && entities.length > 1) {\n code = this.wrapCodeInLoop(code, qexpr, qr.entities);\n }\n if (select == 'unroll' && entities.length > 1) {\n throw new ECSError('unroll is not yet implemented');\n }\n // define properties\n if (entities.length) {\n props['%elo'] = entities[0].id.toString();\n props['%ehi'] = entities[entities.length - 1].id.toString();\n }\n props['%ecount'] = entities.length.toString();\n props['%efullcount'] = fullEntityCount.toString();\n //console.log('working', action.event, working.entities.length, entities.length);\n return { code, props };\n }\n startQuery(qexpr: QueryExpr) {\n const scope = this.scope;\n const action = this.action;\n const select = qexpr.select;\n\n // save old state and make clone\n const oldState = this.scope.state;\n this.scope.state = Object.assign(new ActionCPUState(), oldState);\n\n // get working set for this query\n const qr = this.queryWorkingSet(qexpr);\n \n // is it a join? query that too\n const jr = qexpr.join && qr.entities.length ? new EntitySet(scope, qexpr.join) : null;\n\n // update x, y state\n this.updateIndexRegisters(qr, jr, select);\n\n const { code, props } = this.getCodeAndProps(qexpr, qr, jr, oldState);\n\n // if join, working set is union of both parts\n let working = jr ? qr.union(jr) : qr;\n \n return { working, oldState, props, code };\n }\n endQuery(q : { oldState: ActionCPUState }) {\n this.scope.state = q.oldState;\n }\n wrapCodeInLoop(code: string, qexpr: QueryExpr, ents: Entity[], joinfield?: ComponentFieldPair): string {\n // TODO: check ents\n // TODO: check segment bounds\n // TODO: what if 0 or 1 entitites?\n // TODO: check > 127 or > 255\n let dir = qexpr.direction;\n let s = dir == 'desc' ? this.dialect.ASM_ITERATE_EACH_DESC : this.dialect.ASM_ITERATE_EACH_ASC;\n if (joinfield) s = dir == 'desc' ? this.dialect.ASM_ITERATE_JOIN_DESC : this.dialect.ASM_ITERATE_JOIN_ASC;\n s = s.replace('{{%code}}', code);\n return s;\n }\n wrapCodeInFilter(code: string, qr: EntitySet, oldState: ActionCPUState, props: any) {\n // TODO: :-p filters too often?\n const ents = qr.entities;\n const ents2 = oldState.xreg?.eset?.entities;\n if (ents && ents.length && ents2) {\n let lo = ents[0].id;\n let hi = ents[ents.length - 1].id;\n let lo2 = ents2[0].id;\n let hi2 = ents2[ents2.length - 1].id;\n if (lo != lo2) {\n code = this.dialect.ASM_FILTER_RANGE_LO_X.replace('{{%code}}', code);\n props['%xofs'] = lo - lo2;\n }\n if (hi != hi2) {\n code = this.dialect.ASM_FILTER_RANGE_HI_X.replace('{{%code}}', code);\n }\n }\n return code;\n }\n wrapCodeInRefLookup(code: string) {\n code = this.dialect.ASM_LOOKUP_REF_X.replace('{{%code}}', code);\n return code;\n }\n}\n\nclass EventCodeStats {\n constructor(\n public readonly inst: SystemInstance,\n public readonly action: Action,\n public readonly eventcode: string\n ) { }\n labels : string[] = [];\n count : number = 0;\n}\n\nexport class EntityScope implements SourceLocated {\n $loc: SourceLocation;\n childScopes: EntityScope[] = [];\n instances: SystemInstance[] = [];\n entities: Entity[] = [];\n fieldtypes: { [name: string]: 'init' | 'const' } = {};\n sysstats = new Map<SystemInstance, SystemStats>();\n bss = new UninitDataSegment();\n rodata = new ConstDataSegment();\n code = new CodeSegment();\n componentsInScope = new Set();\n resources = new Set<string>();\n state;\n isDemo = false;\n filePath = '';\n\n eventSeq : number;\n eventCodeStats : { [code:string] : EventCodeStats };\n inCritical = 0;\n\n constructor(\n public readonly em: EntityManager,\n public readonly dialect: Dialect_CA65,\n public readonly name: string,\n public readonly parent: EntityScope | undefined\n ) {\n parent?.childScopes.push(this);\n this.state = new ActionCPUState();\n // TODO: parent scope entities too?\n this.state.working = new EntitySet(this, undefined, this.entities); // working set = all entities\n }\n newEntity(etype: EntityArchetype, name: string): Entity {\n // TODO: add parent ID? lock parent scope?\n // TODO: name identical check?\n if (name && this.getEntityByName(name))\n throw new ECSError(`already an entity named \"${name}\"`);\n let id = this.entities.length;\n etype = this.em.addArchetype(etype);\n let entity: Entity = { id, etype, consts: {}, inits: {} };\n for (let c of etype.components) {\n this.componentsInScope.add(c.name);\n }\n entity.name = name;\n this.entities.push(entity);\n return entity;\n }\n newSystemInstance(inst: SystemInstance) {\n if (!inst) throw new Error();\n inst.id = this.instances.length+1;\n this.instances.push(inst);\n this.em.registerSystemEvents(inst.system);\n return inst;\n }\n newSystemInstanceWithDefaults(system: System) {\n return this.newSystemInstance({ system, params: {}, id:0 });\n }\n getSystemInstanceNamed(name: string) {\n return this.instances.find(sys => sys.system.name == name);\n }\n getEntityByName(name: string) {\n return this.entities.find(e => e.name == name);\n }\n *iterateEntityFields(entities: Entity[]) {\n for (let i = 0; i < entities.length; i++) {\n let e = entities[i];\n for (let c of e.etype.components) {\n for (let f of c.fields) {\n yield { i, e, c, f, v: e.consts[mksymbol(c, f.name)] };\n }\n }\n }\n }\n *iterateArchetypeFields(arch: EntityArchetype[], filter?: (c: ComponentType, f: DataField) => boolean) {\n for (let i = 0; i < arch.length; i++) {\n let a = arch[i];\n for (let c of a.components) {\n for (let f of c.fields) {\n if (!filter || filter(c, f))\n yield { i, c, f };\n }\n }\n }\n }\n *iterateChildScopes() {\n for (let scope of this.childScopes) {\n yield scope;\n }\n }\n entitiesMatching(atypes: EntityArchetype[]) {\n let result: Entity[] = [];\n for (let e of this.entities) {\n for (let a of atypes) {\n // TODO: what about subclasses?\n // TODO: very scary identity ocmpare\n if (e.etype === a) {\n result.push(e);\n break;\n }\n }\n }\n return result;\n }\n hasComponent(ctype: ComponentType) {\n return this.componentsInScope.has(ctype.name);\n }\n buildSegments() {\n // build FieldArray for each component/field pair\n // they will be different for bss/rodata segments\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n // constants and array pointers go into rodata\n let cfname = mksymbol(c, f.name);\n let ftype = this.fieldtypes[cfname];\n let isConst = ftype == 'const';\n let segment = isConst ? this.rodata : this.bss;\n if (v === undefined && isConst)\n throw new ECSError(`no value for const field ${cfname}`, e);\n // determine range of indices for entities\n let array = segment.fieldranges[cfname];\n if (!array) {\n array = segment.fieldranges[cfname] = { component: c, field: f, elo: i, ehi: i };\n } else {\n array.ehi = i;\n if (array.ehi - array.elo + 1 >= 256)\n throw new ECSError(`too many entities have field ${cfname}, limit is 256`);\n }\n // set default values for entity/field\n if (!isConst) {\n if (f.dtype == 'int' && f.defvalue !== undefined) {\n let ecfname = mkscopesymbol(this, c, f.name);\n if (e.inits[ecfname] == null) {\n this.setInitValue(e, c, f, f.defvalue);\n }\n }\n }\n }\n }\n // TODO: cull unused entity fields\n allocateSegment(segment: DataSegment, alloc: boolean, type: 'init' | 'const' | undefined) {\n let fields: FieldArray[] = Object.values(segment.fieldranges);\n // TODO: fields.sort((a, b) => (a.ehi - a.elo + 1) * getPackedFieldSize(a.field));\n for (let f of fields) {\n if (this.fieldtypes[mksymbol(f.component, f.field.name)] == type) {\n //console.log(f.component.name, f.field.name, type);\n let rangelen = (f.ehi - f.elo + 1);\n // TODO: doesn't work for packed arrays too well\n let bits = getPackedFieldSize(f.field);\n // variable size? make it a pointer\n if (bits == 0) bits = 16; // TODO?\n let bytesperelem = Math.ceil(bits / 8);\n // TODO: packing bits\n // TODO: split arrays\n let access = [];\n for (let i = 0; i < bits; i += 8) {\n let symbol = this.dialect.fieldsymbol(f.component, f.field, i);\n access.push({ symbol, bit: i, width: 8 }); // TODO\n if (alloc) {\n segment.allocateBytes(symbol, rangelen); // TODO\n }\n }\n f.access = access;\n }\n }\n }\n allocateROData(segment: DataSegment) {\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let cfname = mksymbol(c, f.name);\n // TODO: what if mix of var, const, and init values?\n if (this.fieldtypes[cfname] == 'const') {\n let range = segment.fieldranges[cfname];\n let entcount = range ? range.ehi - range.elo + 1 : 0;\n if (v == null && f.dtype == 'int') v = 0;\n if (v == null && f.dtype == 'ref') v = 0;\n if (v == null && f.dtype == 'array')\n throw new ECSError(`no default value for array ${cfname}`, e);\n //console.log(c.name, f.name, '#'+e.id, '=', v);\n // this is a constant\n // is it a byte array?\n //TODO? if (ArrayBuffer.isView(v) && f.dtype == 'array') {\n if (v instanceof Uint8Array && f.dtype == 'array') {\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n segment.allocateInitData(datasym, v);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else if (typeof v === 'number') {\n // more than 1 entity, add an array\n // TODO: infer need for array by usage\n /*if (entcount > 1)*/ {\n if (!range.access) throw new ECSError(`no access for field ${cfname}`)\n for (let a of range.access) {\n segment.allocateBytes(a.symbol, entcount);\n let ofs = segment.getByteOffset(range, a, e.id);\n // TODO: this happens if you forget a const field on an object?\n if (e.id < range.elo) throw new ECSError('entity out of range ' + c.name + ' ' + f.name, e);\n if (segment.initdata[ofs] !== undefined) throw new ECSError('initdata already set ' + ofs), e;\n segment.initdata[ofs] = (v >> a.bit) & 0xff;\n }\n }\n } else if (v == null && f.dtype == 'array' && f.index) {\n // TODO\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let databytes = getFieldLength(f.index);\n let offset = this.bss.allocateBytes(datasym, databytes);\n // TODO? this.allocatePointerArray(c, f, datasym, entcount);\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n // TODO: what if we don't need a pointer array?\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else {\n // TODO: bad error message - should say \"wrong type, should be array\"\n throw new ECSError(`unhandled constant ${e.id}:${cfname} -- ${typeof v}`);\n }\n }\n }\n //console.log(segment.initdata)\n }\n allocateInitData(segment: DataSegment) {\n if (segment.size == 0) return '';\n let initbytes = new Uint8Array(segment.size);\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let scfname = mkscopesymbol(this, c, f.name);\n let initvalue = e.inits[scfname];\n if (initvalue !== undefined) {\n let range = segment.getFieldRange(c, f.name);\n if (!range) throw new ECSError(`no init range for ${scfname}`, e); \n if (!range.access) throw new ECSError(`no init range access for ${scfname}`, e);\n if (typeof initvalue === 'number') {\n for (let a of range.access) {\n let offset = segment.getByteOffset(range, a, e.id);\n initbytes[offset] = (initvalue >> a.bit) & ((1 << a.width) - 1);\n }\n } else if (initvalue instanceof Uint8Array) {\n // TODO: 16/32...\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let ofs = this.bss.symbols[datasym];\n initbytes.set(initvalue, ofs);\n } else {\n // TODO: init arrays?\n throw new ECSError(`cannot initialize ${scfname} = ${initvalue}`); // TODO??\n }\n }\n }\n // build the final init buffer\n // TODO: compress 0s?\n let bufsym = this.name + '__INITDATA';\n let bufofs = this.rodata.allocateInitData(bufsym, initbytes);\n let code = this.dialect.INIT_FROM_ARRAY;\n //TODO: function to repalce from dict?\n code = code.replace('{{%nbytes}}', initbytes.length.toString())\n code = code.replace('{{%src}}', bufsym);\n code = code.replace('{{%dest}}', segment.getOriginSymbol());\n return code;\n }\n getFieldRange(c: ComponentType, fn: string) {\n return this.bss.getFieldRange(c, fn) || this.rodata.getFieldRange(c, fn);\n }\n setConstValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'const');\n }\n setInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'init');\n }\n setConstInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue,\n type: 'const'|'init')\n {\n this.checkFieldValue(field, value);\n let fieldName = field.name;\n let cfname = mksymbol(component, fieldName);\n let ecfname = mkscopesymbol(this, component, fieldName);\n if (e.consts[cfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a constant`, e);\n if (e.inits[ecfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a variable`, e);\n if (type == 'const') e.consts[cfname] = value;\n if (type == 'init') e.inits[ecfname] = value;\n this.fieldtypes[cfname] = type;\n }\n isConstOrInit(component: ComponentType, fieldName: string) : 'const' | 'init' {\n return this.fieldtypes[mksymbol(component, fieldName)];\n }\n getConstValue(entity: Entity, fieldName: string) {\n let component = this.em.singleComponentWithFieldName([entity.etype], fieldName, entity);\n let cfname = mksymbol(component, fieldName);\n return entity.consts[cfname];\n }\n checkFieldValue(field: DataField, value: DataValue) {\n if (field.dtype == 'array') {\n if (!(value instanceof Uint8Array))\n throw new ECSError(`This \"${field.name}\" value should be an array.`);\n } else if (typeof value !== 'number') {\n throw new ECSError(`This \"${field.name}\" ${field.dtype} value should be an number.`);\n } else {\n if (field.dtype == 'int') {\n if (value < field.lo || value > field.hi)\n throw new ECSError(`This \"${field.name}\" value is out of range, should be between ${field.lo} and ${field.hi}.`);\n } else if (field.dtype == 'ref') {\n // TODO: allow override if number\n let eset = new EntitySet(this, field.query);\n if (value < 0 || value >= eset.entities.length)\n throw new ECSError(`This \"${field.name}\" value is out of range for this ref type.`);\n }\n }\n }\n generateCodeForEvent(event: string, args?: string[], codelabel?: string): string {\n // find systems that respond to event\n // and have entities in this scope\n let systems = this.em.event2systems[event];\n if (!systems || systems.length == 0) {\n // TODO: error or warning?\n //throw new ECSError(`warning: no system responds to \"${event}\"`);\n console.log(`warning: no system responds to \"${event}\"`);\n return '';\n }\n this.eventSeq++;\n // generate code\n let code = '';\n // is there a label? generate it first\n if (codelabel) { code += this.dialect.label(codelabel) + '\\n'; }\n // if \"start\" event, initialize data segment\n if (event == 'start') {\n code += this.allocateInitData(this.bss);\n }\n // iterate all instances and generate matching events\n let eventCount = 0;\n let instances = this.instances.filter(inst => systems.includes(inst.system));\n for (let inst of instances) {\n let sys = inst.system;\n for (let action of sys.actions) {\n if (action.event == event) {\n eventCount++;\n // TODO: use Tokenizer so error msgs are better\n // TODO: keep event tree\n let codeeval = new ActionEval(this, inst, action, args || []);\n codeeval.begin();\n if (action.critical) this.inCritical++;\n let eventcode = codeeval.codeToString();\n if (action.critical) this.inCritical--;\n if (!this.inCritical && codeeval.isSubroutineSized(eventcode)) {\n let normcode = this.normalizeCode(eventcode, action);\n let estats = this.eventCodeStats[normcode];\n if (!estats) {\n estats = this.eventCodeStats[normcode] = new EventCodeStats(\n inst, action, eventcode);\n }\n estats.labels.push(codeeval.label);\n estats.count++;\n if (action.critical) estats.count++; // always make critical event subroutines\n }\n let s = '';\n s += this.dialect.comment(`start action ${codeeval.label}`);\n s += eventcode;\n s += this.dialect.comment(`end action ${codeeval.label}`);\n code += s;\n // TODO: check that this happens once?\n codeeval.end();\n }\n }\n }\n if (eventCount == 0) {\n console.log(`warning: event ${event} not handled`);\n }\n return code;\n }\n normalizeCode(code: string, action: Action) {\n // TODO: use dialect to help with this\n code = code.replace(/\\b(\\w+__\\w+__)(\\d+)__(\\w+)\\b/g, (z,a,b,c) => a+c);\n return code;\n }\n getSystemStats(inst: SystemInstance) : SystemStats {\n let stats = this.sysstats.get(inst);\n if (!stats) {\n stats = new SystemStats();\n this.sysstats.set(inst, stats);\n }\n return stats;\n }\n updateTempLiveness(inst: SystemInstance) {\n let stats = this.getSystemStats(inst);\n let n = this.eventSeq;\n if (stats.tempstartseq && stats.tempendseq) {\n stats.tempstartseq = Math.min(stats.tempstartseq, n);\n stats.tempendseq = Math.max(stats.tempendseq, n);\n } else {\n stats.tempstartseq = stats.tempendseq = n;\n }\n }\n includeResource(symbol: string): string {\n this.resources.add(symbol);\n return symbol;\n }\n private allocateTempVars() {\n let pack = new Packer();\n let maxTempBytes = 128 - this.bss.size; // TODO: multiple data segs\n let bssbin = new Bin({ left:0, top:0, bottom: this.eventSeq+1, right: maxTempBytes });\n pack.bins.push(bssbin);\n for (let instance of this.instances) {\n let stats = this.getSystemStats(instance);\n if (instance.system.tempbytes && stats.tempstartseq && stats.tempendseq) {\n let v = {\n inst: instance,\n top: stats.tempstartseq,\n bottom: stats.tempendseq+1,\n width: instance.system.tempbytes,\n height: stats.tempendseq - stats.tempstartseq + 1,\n label: instance.system.name\n };\n pack.boxes.push(v);\n }\n }\n if (!pack.pack()) console.log('cannot pack temporary local vars'); // TODO\n //console.log('tempvars', pack);\n if (bssbin.extents.right > 0) {\n let tempofs = this.bss.allocateBytes('TEMP', bssbin.extents.right);\n for (let b of pack.boxes) {\n let inst : SystemInstance = (b as any).inst;\n //console.log(inst.system.name, b.box?.left);\n if (b.box) this.bss.declareSymbol(this.dialect.tempLabel(inst), tempofs + b.box.left);\n //this.bss.equates[this.dialect.tempLabel(inst)] = `TEMP+${b.box?.left}`;\n }\n }\n console.log(pack.toSVGUrl());\n }\n private analyzeEntities() {\n this.buildSegments();\n this.allocateSegment(this.bss, true, 'init'); // initialized vars\n this.allocateSegment(this.bss, true, undefined); // uninitialized vars\n this.allocateSegment(this.rodata, false, 'const'); // constants\n this.allocateROData(this.rodata);\n }\n private isMainScope() {\n return this.parent == null;\n }\n private generateCode() {\n this.eventSeq = 0;\n this.eventCodeStats = {};\n let start;\n let initsys = this.em.getSystemByName('Init');\n if (this.isMainScope() && initsys) {\n this.newSystemInstanceWithDefaults(initsys); //TODO: what if none?\n start = this.generateCodeForEvent('main_init');\n } else {\n start = this.generateCodeForEvent('start');\n }\n start = this.replaceSubroutines(start);\n this.code.addCodeFragment(start);\n for (let sub of Array.from(this.resources.values())) {\n if (!this.getSystemInstanceNamed(sub)) {\n let sys = this.em.getSystemByName(sub);\n if (!sys) throw new ECSError(`cannot find resource named \"${sub}\"`);\n this.newSystemInstanceWithDefaults(sys);\n }\n let code = this.generateCodeForEvent(sub, [], sub);\n this.code.addCodeFragment(code); // TODO: should be rodata?\n }\n //this.showStats();\n }\n replaceSubroutines(code: string) {\n // TODO: bin-packing for critical code\n // TODO: doesn't work with nested subroutines?\n // TODO: doesn't work between scopes\n let allsubs : string[] = [];\n for (let stats of Object.values(this.eventCodeStats)) {\n if (stats.count > 1) {\n if (allsubs.length == 0) {\n allsubs = [\n this.dialect.segment('rodata'),\n this.dialect.alignSegmentStart()\n ]\n } else if (stats.action.fitbytes) {\n allsubs.push(this.dialect.alignIfLessThan(stats.action.fitbytes));\n }\n let subcall = this.dialect.call(stats.labels[0]);\n for (let label of stats.labels) {\n let startdelim = this.dialect.comment(`start action ${label}`).trim();\n let enddelim = this.dialect.comment(`end action ${label}`).trim();\n let istart = code.indexOf(startdelim);\n let iend = code.indexOf(enddelim, istart);\n if (istart >= 0 && iend > istart) {\n code = code.substring(0, istart) + subcall + code.substring(iend + enddelim.length);\n }\n }\n let substart = stats.labels[0];\n let sublines = [\n this.dialect.segment('rodata'),\n this.dialect.label(substart),\n stats.eventcode,\n this.dialect.return(),\n ];\n if (stats.action.critical) {\n sublines.push(this.dialect.warningIfPageCrossed(substart));\n }\n if (stats.action.fitbytes) {\n sublines.push(this.dialect.warningIfMoreThan(stats.action.fitbytes, substart));\n }\n allsubs = allsubs.concat(sublines);\n }\n }\n code += allsubs.join('\\n');\n return code;\n }\n showStats() {\n for (let inst of this.instances) {\n // TODO?\n console.log(inst.system.name, this.getSystemStats(inst));\n }\n }\n private dumpCodeTo(file: SourceFileExport) {\n let shouldExport = this.instances.length == 0;\n let dialect = this.dialect;\n file.line(dialect.startScope(this.name));\n file.line(dialect.segment('bss'));\n this.bss.dump(file, dialect, shouldExport);\n file.line(dialect.segment('code')); // TODO: rodata for aligned?\n this.rodata.dump(file, dialect, shouldExport);\n //file.segment(`${this.name}_CODE`, 'code');\n file.line(dialect.label('__Start'));\n this.code.dump(file);\n for (let subscope of this.childScopes) {\n // TODO: overlay child BSS segments\n subscope.dump(file);\n }\n file.line(dialect.endScope(this.name));\n }\n dump(file: SourceFileExport) {\n this.analyzeEntities();\n this.generateCode();\n this.allocateTempVars();\n this.dumpCodeTo(file);\n }\n}\n\nexport class EntityManager {\n archetypes: { [key: string]: EntityArchetype } = {};\n components: { [name: string]: ComponentType } = {};\n systems: { [name: string]: System } = {};\n topScopes: { [name: string]: EntityScope } = {};\n event2systems: { [event: string]: System[] } = {};\n name2cfpairs: { [cfname: string]: ComponentFieldPair[] } = {};\n mainPath: string = '';\n imported: { [path: string]: boolean } = {};\n seq = 1;\n\n constructor(public readonly dialect: Dialect_CA65) {\n }\n newScope(name: string, parent?: EntityScope) {\n let existing = this.topScopes[name];\n if (existing && !existing.isDemo)\n throw new ECSError(`scope ${name} already defined`, existing);\n let scope = new EntityScope(this, this.dialect, name, parent);\n if (!parent) this.topScopes[name] = scope;\n return scope;\n }\n deferComponent(name: string) {\n this.components[name] = { name, fields: [] };\n }\n defineComponent(ctype: ComponentType) {\n let existing = this.components[ctype.name];\n // we can defer component definitions, just declare a component with 0 fields?\n if (existing && existing.fields.length > 0)\n throw new ECSError(`component ${ctype.name} already defined`, existing);\n if (existing) {\n existing.fields = ctype.fields;\n ctype = existing;\n }\n for (let field of ctype.fields) {\n let list = this.name2cfpairs[field.name];\n if (!list) list = this.name2cfpairs[field.name] = [];\n list.push({ c: ctype, f: field });\n }\n this.components[ctype.name] = ctype;\n return ctype;\n }\n defineSystem(system: System) {\n let existing = this.systems[system.name];\n if (existing) throw new ECSError(`system ${system.name} already defined`, existing);\n return this.systems[system.name] = system;\n }\n registerSystemEvents(system: System) {\n for (let a of system.actions) {\n let event = a.event;\n let list = this.event2systems[event];\n if (list == null) list = this.event2systems[event] = [];\n if (!list.includes(system)) list.push(system);\n }\n }\n addArchetype(atype: EntityArchetype): EntityArchetype {\n let key = atype.components.map(c => c.name).join(',');\n if (this.archetypes[key])\n return this.archetypes[key];\n else\n return this.archetypes[key] = atype;\n }\n componentsMatching(q: Query, etype: EntityArchetype) {\n let list = [];\n for (let c of etype.components) {\n if (q.exclude?.includes(c)) {\n return [];\n }\n // TODO: 0 includes == all entities?\n if (q.include.length == 0 || q.include.includes(c)) {\n list.push(c);\n }\n }\n return list.length == q.include.length ? list : [];\n }\n archetypesMatching(q: Query) {\n let result = new Set<EntityArchetype>();\n for (let etype of Object.values(this.archetypes)) {\n let cmatch = this.componentsMatching(q, etype);\n if (cmatch.length > 0) {\n result.add(etype);\n }\n }\n return Array.from(result.values());\n }\n componentsWithFieldName(atypes: EntityArchetype[], fieldName: string) {\n // TODO???\n let comps = new Set<ComponentType>();\n for (let at of atypes) {\n for (let c of at.components) {\n for (let f of c.fields) {\n if (f.name == fieldName)\n comps.add(c);\n }\n }\n }\n return Array.from(comps);\n }\n getComponentByName(name: string): ComponentType {\n return this.components[name];\n }\n getSystemByName(name: string): System {\n return this.systems[name];\n }\n singleComponentWithFieldName(atypes: EntityArchetype[], fieldName: string, where: SourceLocated) {\n let cfpairs = this.name2cfpairs[fieldName];\n if (!cfpairs) throw new ECSError(`cannot find field named \"${fieldName}\"`, where);\n let filtered = cfpairs.filter(cf => atypes.find(a => a.components.includes(cf.c)));\n if (filtered.length == 0) {\n throw new ECSError(`cannot find component with field \"${fieldName}\" in this context`, where);\n }\n if (filtered.length > 1) {\n throw new ECSError(`ambiguous field name \"${fieldName}\"`, where);\n }\n return filtered[0].c;\n }\n toJSON() {\n return JSON.stringify({\n components: this.components,\n systems: this.systems\n })\n }\n exportToFile(file: SourceFileExport) {\n for (let event of Object.keys(this.event2systems)) {\n file.line(this.dialect.equate(`EVENT__${event}`, '1'))\n }\n for (let scope of Object.values(this.topScopes)) {\n if (!scope.isDemo || scope.filePath == this.mainPath) {\n scope.dump(file);\n }\n }\n }\n *iterateScopes() {\n for (let scope of Object.values(this.topScopes)) {\n yield scope;\n scope.iterateChildScopes();\n }\n }\n getDebugTree() : {} {\n let scopes = this.topScopes;\n let components = this.components;\n let fields = this.name2cfpairs;\n let systems = this.systems;\n let events = this.event2systems;\n let entities : {[key:string]:Entity} = {};\n for (let scope of Array.from(this.iterateScopes())) {\n for (let e of scope.entities)\n entities[e.name || '#'+e.id.toString()] = e;\n }\n return { scopes, components, fields, systems, events, entities };\n }\n\n // expression stuff\n\n evalExpr(expr: Expr, scope: EntityScope | null) : Expr {\n if (isLiteral(expr)) return expr;\n if (isBinOp(expr) || isUnOp(expr)) {\n var fn = (this as any)['evalop__' + expr.op];\n if (!fn) throw new ECSError(`no eval function for \"${expr.op}\"`);\n }\n if (isBinOp(expr)) {\n expr.left = this.evalExpr(expr.left, scope);\n expr.right = this.evalExpr(expr.right, scope);\n let e = fn(expr.left, expr.right);\n return e || expr;\n }\n if (isUnOp(expr)) {\n expr.expr = this.evalExpr(expr.expr, scope);\n let e = fn(expr.expr);\n return e || expr;\n }\n return expr;\n }\n evalop__neg(arg: Expr) : Expr | undefined {\n if (isLiteralInt(arg)) {\n let valtype : IntType = { dtype:'int',\n lo: -arg.valtype.hi,\n hi: arg.valtype.hi };\n return { valtype, value: -arg.value };\n }\n }\n evalop__add(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo + right.valtype.lo, \n hi: left.valtype.hi + right.valtype.hi };\n return { valtype, value: left.value + right.value };\n }\n }\n evalop__sub(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo - right.valtype.hi, \n hi: left.valtype.hi - right.valtype.lo };\n return { valtype, value: left.value - right.value };\n }\n }\n}\n", "\nimport { SourceLocation } from \"../workertypes\";\nimport { DataValue, ECSError } from \"./ecs\";\n\nexport interface DecoderResult {\n properties: {[name: string] : DataValue}\n}\n\nabstract class LineDecoder {\n curline: number = 0; // for debugging, zero-indexed\n lines : string[][]; // array of token arrays\n\n constructor(\n text: string\n ) {\n // split the text into lines and into tokens\n this.lines = text.split('\\n').map(s => s.trim()).filter(s => !!s).map(s => s.split(/\\s+/));\n }\n\n decodeBits(s: string, n: number, msbfirst: boolean) {\n if (s.length != n) throw new ECSError(`Expected ${n} characters`);\n let b = 0;\n for (let i=0; i<n; i++) {\n let bit;\n let ch = s.charAt(i);\n if (ch == 'x' || ch == 'X' || ch == '1') bit = 1;\n else if (ch == '.' || ch == '0') bit = 0;\n else throw new ECSError('need x or . (or 0 or 1)');\n if (bit) {\n if (msbfirst) b |= 1 << (n-1-i);\n else b |= 1 << i;\n }\n }\n return b;\n }\n\n assertTokens(toks: string[], count: number) {\n if (toks.length != count) throw new ECSError(`Expected ${count} tokens on line.`);\n }\n\n hex(s: string) {\n let v = parseInt(s, 16);\n if (isNaN(v)) throw new ECSError(`Invalid hex value: ${s}`)\n return v;\n }\n\n getErrorLocation($loc: SourceLocation): SourceLocation {\n // TODO: blank lines mess this up\n $loc.line += this.curline + 1;\n return $loc;\n }\n\n abstract parse() : DecoderResult;\n}\n\nexport class VCSSpriteDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n let colormapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 2);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n colormapdata[i] = this.hex(toks[1]);\n }\n return {\n properties: {\n bitmapdata, colormapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSBitmapDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n }\n return {\n properties: {\n bitmapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSPlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let pf = new Uint32Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n let pf0 = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n let pf1 = this.decodeBits(toks[0].substring(4,12), 8, true);\n let pf2 = this.decodeBits(toks[0].substring(12,20), 8, false);\n pf[i] = (pf0 << 0) | (pf1 << 8) | (pf2 << 16);\n }\n return {\n properties: {\n pf\n }\n }\n }\n}\n\n\nexport class VCSVersatilePlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let data = new Uint8Array(height * 2);\n data.fill(0x3f);\n // pf0 pf1 pf2 colupf colubk ctrlpf trash\n const regs = [0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x3f];\n let prev = [0,0,0,0,0,0,0];\n let cur = [0,0,0,0,0,0,0];\n for (let i=0; i<height; i++) {\n let dataofs = height*2 - i*2;\n this.curline = i;\n let toks = this.lines[this.curline];\n if (toks.length == 2) {\n data[dataofs - 1] = this.hex(toks[0]);\n data[dataofs - 2] = this.hex(toks[1]);\n continue;\n }\n this.assertTokens(toks, 4);\n cur[0] = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n cur[1] = this.decodeBits(toks[0].substring(4,12), 8, true);\n cur[2] = this.decodeBits(toks[0].substring(12,20), 8, false);\n if (toks[1] != '..') cur[3] = this.hex(toks[1]);\n if (toks[2] != '..') cur[4] = this.hex(toks[2]);\n if (toks[3] != '..') cur[5] = this.hex(toks[3]);\n let changed = [];\n for (let j=0; j<cur.length; j++) {\n if (cur[j] != prev[j])\n changed.push(j);\n }\n if (changed.length > 1) {\n console.log(changed, cur, prev);\n throw new ECSError(`More than one register change in line ${i+1}: [${changed}]`);\n }\n let chgidx = changed.length ? changed[0] : regs.length-1;\n data[dataofs - 1] = regs[chgidx];\n data[dataofs - 2] = cur[chgidx];\n prev[chgidx] = cur[chgidx];\n }\n return {\n properties: {\n data\n }\n }\n }\n}\n\nexport class VCSBitmap48Decoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmap0 = new Uint8Array(height);\n let bitmap1 = new Uint8Array(height);\n let bitmap2 = new Uint8Array(height);\n let bitmap3 = new Uint8Array(height);\n let bitmap4 = new Uint8Array(height);\n let bitmap5 = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmap0[i] = this.decodeBits(toks[0].slice(0,8), 8, true);\n bitmap1[i] = this.decodeBits(toks[0].slice(8,16), 8, true);\n bitmap2[i] = this.decodeBits(toks[0].slice(16,24), 8, true);\n bitmap3[i] = this.decodeBits(toks[0].slice(24,32), 8, true);\n bitmap4[i] = this.decodeBits(toks[0].slice(32,40), 8, true);\n bitmap5[i] = this.decodeBits(toks[0].slice(40,48), 8, true);\n }\n return {\n properties: {\n bitmap0, bitmap1, bitmap2, bitmap3, bitmap4, bitmap5,\n height: height-1\n }\n }\n }\n}\n\nexport function newDecoder(name: string, text: string) : LineDecoder | undefined {\n let cons = (DECODERS as any)[name];\n if (cons) return new cons(text);\n}\n\nconst DECODERS = {\n 'vcs_sprite': VCSSpriteDecoder,\n 'vcs_bitmap': VCSBitmapDecoder,\n 'vcs_playfield': VCSPlayfieldDecoder,\n 'vcs_versatile': VCSVersatilePlayfieldDecoder,\n 'vcs_bitmap48': VCSBitmap48Decoder,\n}\n", "\nimport { mergeLocs, Token, Tokenizer, TokenType } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { newDecoder } from \"./decoder\";\nimport { Action, ActionContext, ArrayType, CodeLiteralNode, CodePlaceholderNode, ComponentType, DataField, DataType, DataValue, ECSError, Entity, EntityArchetype, EntityManager, EntityScope, IntType, Query, RefType, SelectType, SELECT_TYPE, SourceFileExport, System, SystemInstance, SystemInstanceParameters, ComponentFieldPair, Expr, ExprBase, ForwardRef, isLiteral, EntityFieldOp, LExpr, Statement, QueryExpr } from \"./ecs\";\n\nexport enum ECSTokenType {\n Ellipsis = 'ellipsis',\n Operator = 'operator',\n Relational = 'relational',\n QuotedString = 'quoted-string',\n Integer = 'integer',\n CodeFragment = 'code-fragment',\n Placeholder = 'placeholder',\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n};\n\nfunction getOperator(op: string) {\n return (OPERATORS as any)[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case ECSTokenType.Operator:\n case ECSTokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Comment\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\n///\n\nexport class ECSCompiler extends Tokenizer {\n\n currentScope: EntityScope | null = null;\n currentContext: ActionContext | null = null;\n includeDebugInfo = false;\n\n constructor(\n public readonly em: EntityManager,\n public readonly isMainFile: boolean) {\n super();\n //this.includeEOL = true;\n this.setTokenRules([\n { type: ECSTokenType.Ellipsis, regex: /\\.\\./ },\n { type: ECSTokenType.QuotedString, regex: /\".*?\"/ },\n { type: ECSTokenType.CodeFragment, regex: /---.*?---/ },\n { type: ECSTokenType.Integer, regex: /0[xX][A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /\\$[A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /[%][01]+/ },\n { type: ECSTokenType.Integer, regex: /\\d+/ },\n { type: ECSTokenType.Relational, regex: /[=<>][=<>]?/ },\n { type: ECSTokenType.Operator, regex: /[.#,:(){}\\[\\]\\-\\+]/ },\n { type: TokenType.Ident, regex: /[A-Za-z_][A-Za-z0-9_]*/ },\n { type: TokenType.Ignore, regex: /\\/\\/.*?[\\n\\r]/ },\n { type: TokenType.Ignore, regex: /\\/\\*.*?\\*\\// },\n { type: TokenType.EOL, regex: /[\\n\\r]+/ },\n { type: TokenType.Ignore, regex: /\\s+/ },\n ]);\n this.errorOnCatchAll = true;\n }\n\n annotate<T extends SourceLocated>(fn: () => T) {\n let start = this.peekToken();\n let obj = fn();\n let end = this.lasttoken;\n let $loc = end ? mergeLocs(start.$loc, end.$loc) : start.$loc;\n if (obj) (obj as SourceLocated).$loc = $loc;\n return obj;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n while (!this.isEOF()) {\n let top = this.parseTopLevel();\n if (top) {\n let t = top;\n this.annotate(() => t); // TODO? typescript bug?\n }\n }\n this.runDeferred();\n }\n\n getImportFile: (path: string) => string;\n\n importFile(path: string) {\n if (!this.em.imported[path]) { // already imported?\n let text = this.getImportFile && this.getImportFile(path);\n if (!text) this.compileError(`I can't find the import file \"${path}\".`);\n this.em.imported[path] = true;\n let comp = new ECSCompiler(this.em, false);\n comp.includeDebugInfo = this.includeDebugInfo; // TODO: clone compiler\n try {\n comp.parseFile(text, path);\n } catch (e) {\n for (var err of comp.errors) this.errors.push(err);\n throw e;\n }\n }\n }\n\n parseTopLevel() {\n //this.skipBlankLines();\n let tok = this.expectTokens(['component', 'system', 'scope', 'resource', 'import', 'demo', 'comment']);\n if (tok.str == 'component') {\n return this.em.defineComponent(this.parseComponentDefinition());\n }\n if (tok.str == 'system') {\n return this.em.defineSystem(this.parseSystem());\n }\n if (tok.str == 'scope') {\n return this.parseScope();\n }\n if (tok.str == 'resource') {\n return this.em.defineSystem(this.parseResource());\n }\n if (tok.str == 'import') {\n let tok = this.expectTokenTypes([ECSTokenType.QuotedString]);\n let path = tok.str.substring(1, tok.str.length - 1);\n return this.importFile(path);\n }\n if (tok.str == 'demo') {\n if (this.isMainFile) {\n let scope = this.parseScope();\n scope.isDemo = true;\n this.expectToken('demo');\n return scope;\n } else {\n this.skipDemo(); // don't even parse it, just skip it\n return;\n }\n }\n if (tok.str == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n return;\n }\n this.compileError(`Unexpected top-level keyword: ${tok.str}`);\n }\n\n skipDemo() {\n var tok;\n while ((tok = this.consumeToken()) && !this.isEOF()) {\n if (tok.str == 'end' && this.peekToken().str == 'demo') {\n this.consumeToken();\n return;\n }\n }\n throw new ECSError(`Expected \"end demo\" after a \"demo\" declaration.`);\n }\n\n parseComponentDefinition(): ComponentType {\n let name = this.expectIdent().str;\n let fields = [];\n this.em.deferComponent(name);\n while (this.peekToken().str != 'end') {\n fields.push(this.parseComponentField());\n }\n this.expectToken('end');\n return { name, fields };\n }\n\n parseComponentField(): DataField {\n let name = this.expectIdent();\n this.expectToken(':', 'I expected either a \":\" or \"end\" here.'); // TODO\n let type = this.parseDataType();\n return { name: name.str, $loc: name.$loc, ...type };\n }\n\n parseDataType(): DataType {\n if (this.peekToken().type == 'integer') {\n let lo = this.parseIntegerConstant();\n this.expectToken('..');\n let hi = this.parseIntegerConstant();\n this.checkLowerLimit(lo, -0x80000000, \"lower int range\");\n this.checkUpperLimit(hi, 0x7fffffff, \"upper int range\");\n this.checkUpperLimit(hi-lo, 0xffffffff, \"int range\");\n this.checkLowerLimit(hi, lo, \"int range\");\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n // TODO: check types\n return { dtype: 'int', lo, hi, defvalue } as IntType;\n }\n if (this.peekToken().str == '[') {\n return { dtype: 'ref', query: this.parseQuery() } as RefType;\n }\n if (this.ifToken('array')) {\n let index: IntType | undefined = undefined;\n if (this.peekToken().type == ECSTokenType.Integer) {\n index = this.parseDataType() as IntType;\n }\n this.expectToken('of');\n let elem = this.parseDataType();\n let baseoffset;\n if (this.ifToken('baseoffset')) {\n baseoffset = this.parseIntegerConstant();\n this.checkLowerLimit(baseoffset, -32768, \"base offset\");\n this.checkUpperLimit(baseoffset, 32767, \"base offset\");\n }\n return { dtype: 'array', index, elem, baseoffset } as ArrayType;\n }\n if (this.ifToken('enum')) {\n this.expectToken('[');\n let enumtoks = this.parseList(this.parseEnumIdent, ',');\n this.expectToken(']');\n if (enumtoks.length == 0) this.compileError(`must define at least one enum`);\n let lo = 0;\n let hi = enumtoks.length-1;\n this.checkLowerLimit(hi, 0, \"enum count\");\n this.checkUpperLimit(hi, 255, \"enum count\");\n let enums : {[name:string]:number} = {};\n for (let i=0; i<=hi; i++)\n enums[enumtoks[i].str] = i;\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n return { dtype: 'int', lo, hi, defvalue, enums } as IntType;\n }\n throw this.compileError(`I expected a data type here.`);\n }\n\n parseEnumIdent() {\n let tok = this.expectTokenTypes([TokenType.Ident]);\n return tok;\n }\n parseEnumValue(tok: Token, field: IntType) {\n if (!field.enums) throw new ECSError(`field is not an enum`);\n let value = field.enums[tok.str];\n if (value == null) throw new ECSError(`unknown enum \"${tok.str}\"`);\n return value;\n }\n\n parseDataValue(field: DataField): DataValue | ForwardRef {\n let tok = this.peekToken();\n // TODO: move to expr\n if (tok.type == TokenType.Ident && field.dtype == 'int') {\n return this.parseEnumValue(this.consumeToken(), field);\n }\n if (tok.type == TokenType.Ident) {\n let entity = this.currentScope?.getEntityByName(tok.str);\n if (!entity)\n this.compileError('no entity named \"${tok.str}\"');\n else {\n this.consumeToken();\n this.expectToken('.');\n let fieldName = this.expectIdent().str;\n let constValue = this.currentScope?.getConstValue(entity, fieldName);\n if (constValue == null)\n throw new ECSError(`\"${fieldName}\" is not defined as a constant`, entity);\n else\n return constValue;\n }\n }\n if (tok.str == '[') {\n // TODO: 16-bit?\n return new Uint8Array(this.parseDataArray());\n }\n if (tok.str == '#') {\n this.consumeToken();\n let reftype = field.dtype == 'ref' ? field as RefType : undefined;\n return this.parseEntityForwardRef(reftype);\n }\n // TODO?\n return this.parseIntegerConstant();\n // TODO: throw this.compileError(`I expected a ${field.dtype} here.`);\n }\n\n parseEntityForwardRef(reftype?: RefType): ForwardRef {\n let token = this.expectIdent();\n return { reftype, token };\n }\n\n parseDataArray() {\n this.expectToken('[');\n let arr = this.parseList(this.parseIntegerConstant, ',');\n this.expectToken(']');\n return arr;\n }\n\n expectInteger(): number {\n let s = this.consumeToken().str;\n let i: number;\n if (s.startsWith('$'))\n i = parseInt(s.substring(1), 16); // hex $...\n else if (s.startsWith('%'))\n i = parseInt(s.substring(1), 2); // binary %...\n else\n i = parseInt(s); // default base 10 or 16 (0x...)\n if (isNaN(i)) this.compileError('There should be an integer here.');\n return i;\n }\n\n parseSystem(): System {\n let name = this.expectIdent().str;\n let actions: Action[] = [];\n let system: System = { name, actions };\n let cmd;\n while ((cmd = this.expectTokens(['on', 'locals', 'end']).str) != 'end') {\n if (cmd == 'on') {\n let action = this.annotate(() => this.parseAction(system));\n actions.push(action);\n } else if (cmd == 'locals') {\n system.tempbytes = this.parseIntegerConstant();\n } else {\n this.compileError(`Unexpected system keyword: ${cmd}`);\n }\n }\n return system;\n }\n\n parseResource(): System {\n let name = this.expectIdent().str;\n let tempbytes;\n if (this.peekToken().str == 'locals') {\n this.consumeToken();\n tempbytes = this.parseIntegerConstant();\n }\n let system: System = { name, tempbytes, actions: [] };\n let expr = this.annotate(() => this.parseBlockStatement());\n let action: Action = { expr, event: name };\n system.actions.push(action);\n return system;\n }\n\n parseAction(system: System): Action {\n // TODO: unused events?\n const event = this.expectIdent().str;\n this.expectToken('do');\n let fitbytes = undefined;\n let critical = undefined;\n if (this.ifToken('critical')) critical = true;\n if (this.ifToken('fit')) fitbytes = this.parseIntegerConstant();\n let expr = this.annotate(() => this.parseBlockStatement());\n //query, join, select, direction, \n let action : Action = { expr, event, fitbytes, critical };\n return action as Action;\n }\n\n parseQuery() {\n let q: Query = { include: [] };\n let start = this.expectToken('[');\n this.parseList(() => this.parseQueryItem(q), ',');\n this.expectToken(']');\n // TODO: other params\n q.$loc = mergeLocs(start.$loc, this.lasttoken.$loc);\n return q;\n }\n\n parseQueryItem(q: Query) {\n let prefix = this.peekToken();\n if (prefix.type != TokenType.Ident) {\n this.consumeToken();\n }\n if (prefix.type == TokenType.Ident) {\n let cref = this.parseComponentRef();\n q.include.push(cref);\n } else if (prefix.str == '-') {\n let cref = this.parseComponentRef();\n if (!q.exclude) q.exclude = [];\n q.exclude.push(cref);\n } else if (prefix.str == '#') {\n const scope = this.currentScope;\n if (scope == null) {\n throw this.compileError('You can only reference specific entities inside of a scope.');\n }\n let eref = this.parseEntityForwardRef();\n this.deferred.push(() => {\n let refvalue = this.resolveEntityRef(scope, eref);\n if (!q.entities) q.entities = [];\n q.entities.push(scope.entities[refvalue]);\n });\n } else {\n this.compileError(`Query components may be preceded only by a '-'.`);\n }\n }\n\n parseEventName() {\n return this.expectIdent().str;\n }\n\n parseEventList() {\n return this.parseList(this.parseEventName, \",\");\n }\n\n parseCode(): string { // TODOActionNode[] {\n // TODO: add $loc\n let tok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = tok.str.substring(3, tok.str.length - 3);\n // TODO: add after parsing maybe?\n let lines = code.split('\\n');\n if (this.includeDebugInfo) this.addDebugInfo(lines, tok.$loc.line);\n code = lines.join('\\n');\n\n //let acomp = new ECSActionCompiler(context);\n //let nodes = acomp.parseFile(code, this.path);\n // TODO: return nodes\n return code;\n }\n\n addDebugInfo(lines: string[], startline: number) {\n const re = /^\\s*(;|\\/\\/|$)/; // ignore comments and blank lines\n for (let i = 0; i < lines.length; i++) {\n if (!lines[i].match(re))\n lines[i] = this.em.dialect.debug_line(this.path, startline + i) + '\\n' + lines[i];\n }\n }\n\n parseScope(): EntityScope {\n let name = this.expectIdent().str;\n let scope = this.em.newScope(name, this.currentScope || undefined);\n scope.filePath = this.path;\n this.currentScope = scope;\n let cmd;\n while ((cmd = this.expectTokens(['end', 'using', 'entity', 'scope', 'comment', 'system']).str) != 'end') {\n if (cmd == 'using') {\n this.parseScopeUsing();\n }\n if (cmd == 'entity') {\n this.annotate(() => this.parseEntity());\n }\n if (cmd == 'scope') {\n this.annotate(() => this.parseScope());\n }\n if (cmd == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n }\n // TODO: need to make these local names, otherwise we get \"duplicate name\"\n if (cmd == 'system') {\n let sys = this.annotate(() => this.parseSystem());\n this.em.defineSystem(sys);\n this.currentScope.newSystemInstanceWithDefaults(sys);\n }\n }\n this.currentScope = scope.parent || null;\n return scope;\n }\n\n parseScopeUsing() {\n let instlist = this.parseList(this.parseSystemInstanceRef, ',');\n let params = {};\n if (this.peekToken().str == 'with') {\n this.consumeToken();\n params = this.parseSystemInstanceParameters();\n }\n for (let inst of instlist) {\n inst.params = params;\n this.currentScope?.newSystemInstance(inst);\n }\n }\n\n parseEntity(): Entity {\n if (!this.currentScope) { throw this.internalError(); }\n const scope = this.currentScope;\n let entname = '';\n if (this.peekToken().type == TokenType.Ident) {\n entname = this.expectIdent().str;\n }\n let etype = this.parseEntityArchetype();\n let entity = this.currentScope.newEntity(etype, entname);\n let cmd2: string;\n // TODO: remove init?\n while ((cmd2 = this.expectTokens(['const', 'init', 'var', 'decode', 'end']).str) != 'end') {\n let cmd = cmd2; // put in scope\n if (cmd == 'var') cmd = 'init'; // TODO: remove?\n if (cmd == 'init' || cmd == 'const') {\n this.parseInitConst(cmd, scope, entity);\n } else if (cmd == 'decode') {\n this.parseDecode(scope, entity);\n }\n }\n return entity;\n }\n\n parseInitConst(cmd: string, scope: EntityScope, entity: Entity) {\n // TODO: check data types\n let name = this.expectIdent().str;\n let { c, f } = this.getEntityField(entity, name);\n let symtype = scope.isConstOrInit(c, name);\n if (symtype && symtype != cmd)\n this.compileError(`I can't mix const and init values for a given field in a scope.`);\n this.expectToken('=');\n let valueOrRef = this.parseDataValue(f);\n if ((valueOrRef as ForwardRef).token != null) {\n this.deferred.push(() => {\n this.lasttoken = (valueOrRef as ForwardRef).token; // for errors\n let refvalue = this.resolveEntityRef(scope, valueOrRef as ForwardRef);\n if (cmd == 'const') scope.setConstValue(entity, c, f, refvalue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, refvalue);\n });\n } else {\n if (cmd == 'const') scope.setConstValue(entity, c, f, valueOrRef as DataValue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, valueOrRef as DataValue);\n }\n }\n\n parseDecode(scope: EntityScope, entity: Entity) {\n let decoderid = this.expectIdent().str;\n let codetok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = codetok.str;\n code = code.substring(3, code.length - 3);\n let decoder = newDecoder(decoderid, code);\n if (!decoder) { throw this.compileError(`I can't find a \"${decoderid}\" decoder.`); }\n let result;\n try {\n result = decoder.parse();\n } catch (e) {\n throw new ECSError(e.message, decoder.getErrorLocation(codetok.$loc));\n }\n for (let entry of Object.entries(result.properties)) {\n let { c, f } = this.getEntityField(entity, entry[0]);\n scope.setConstValue(entity, c, f, entry[1] as DataValue);\n }\n }\n\n getEntityField(e: Entity, name: string): ComponentFieldPair {\n if (!this.currentScope) { throw this.internalError(); }\n let comps = this.em.componentsWithFieldName([e.etype], name);\n if (comps.length == 0) this.compileError(`I couldn't find a field named \"${name}\" for this entity.`)\n if (comps.length > 1) this.compileError(`I found more than one field named \"${name}\" for this entity.`)\n let component = comps[0];\n let field = component.fields.find(f => f.name == name);\n if (!field) { throw this.internalError(); }\n return { c: component, f: field };\n }\n\n parseEntityArchetype(): EntityArchetype {\n this.expectToken('[');\n let components = this.parseList(this.parseComponentRef, ',');\n this.expectToken(']');\n return { components };\n }\n\n parseComponentRef(): ComponentType {\n let name = this.expectIdent().str;\n let cref = this.em.getComponentByName(name);\n if (!cref) this.compileError(`I couldn't find a component named \"${name}\".`)\n return cref;\n }\n\n findEntityByName(scope: EntityScope, token: Token) {\n let name = token.str;\n let eref = scope.entities.find(e => e.name == name);\n if (!eref) {\n throw this.compileError(`I couldn't find an entity named \"${name}\" in this scope.`, token.$loc)\n }\n return eref;\n }\n\n resolveEntityRef(scope: EntityScope, ref: ForwardRef): number {\n let id = this.findEntityByName(scope, ref.token).id;\n if (ref.reftype) {\n // TODO: make this a function? elo ehi etc?\n let atypes = this.em.archetypesMatching(ref.reftype.query);\n let entities = scope.entitiesMatching(atypes);\n if (entities.length == 0)\n throw this.compileError(`This entity doesn't seem to fit the reference type.`, ref.token.$loc);\n id -= entities[0].id;\n }\n return id;\n }\n\n parseSystemInstanceRef(): SystemInstance {\n let name = this.expectIdent().str;\n let system = this.em.getSystemByName(name);\n if (!system) throw this.compileError(`I couldn't find a system named \"${name}\".`, this.lasttoken.$loc);\n let params = {};\n let inst = { system, params, id: 0 };\n return inst;\n }\n\n parseSystemInstanceParameters(): SystemInstanceParameters {\n let scope = this.currentScope;\n if (scope == null) throw this.internalError();\n if (this.peekToken().str == '[') {\n return { query: this.parseQuery() };\n }\n this.expectToken('#');\n let entname = this.expectIdent();\n this.expectToken('.');\n let fieldname = this.expectIdent();\n let entity = this.findEntityByName(scope, entname);\n let cf = this.getEntityField(entity, fieldname.str);\n return { refEntity: entity, refField: cf };\n }\n\n exportToFile(src: SourceFileExport) {\n this.em.exportToFile(src);\n }\n\n export() {\n let src = new SourceFileExport();\n src.line(this.em.dialect.debug_file(this.path));\n for (let path of Object.keys(this.em.imported))\n src.line(this.em.dialect.debug_file(path));\n this.exportToFile(src);\n return src.toString();\n }\n\n checkUpperLimit(value: number, upper: number, what: string) {\n if (value > upper) this.compileError(`This ${what} is too high; must be ${upper} or less`);\n }\n checkLowerLimit(value: number, lower: number, what: string) {\n if (value < lower) this.compileError(`This ${what} is too low; must be ${lower} or more`);\n }\n\n // expression stuff\n\n parseConstant(): DataValue {\n let expr = this.parseExpr();\n expr = this.em.evalExpr(expr, this.currentScope);\n if (isLiteral(expr)) return expr.value;\n throw this.compileError('This expression is not a constant.');\n }\n parseIntegerConstant(): number {\n let value = this.parseConstant();\n if (typeof value === 'number') return value;\n throw this.compileError('This expression is not an integer.');\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (op.str == 'and') opfn = 'land';\n if (op.str == 'or') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case ECSTokenType.Integer:\n this.pushbackToken(tok);\n let value = this.expectInteger();\n let valtype : IntType = { dtype: 'int', lo: value, hi: value };\n return { valtype, value };\n case TokenType.Ident:\n if (tok.str == 'not') {\n let expr = this.parsePrimary();\n let valtype : IntType = { dtype: 'int', lo: 0, hi: 1 };\n return { valtype, op: 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case ECSTokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n let valtype = (expr as ExprBase).valtype;\n if (valtype?.dtype == 'int') {\n let hi = Math.abs(valtype.hi);\n let negtype : IntType = { dtype: 'int', lo: -hi, hi: hi };\n return { valtype: negtype, op: 'neg', expr: expr };\n }\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n throw this.compileError(`The expression is incomplete.`);\n }\n }\n parseVarSubscriptOrFunc(): LExpr {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n // component:field\n if (this.ifToken(':')) {\n let ftok = this.consumeToken();\n let component = this.em.getComponentByName(tok.str);\n if (!component) throw this.compileError(`A component named \"${tok.str}\" has not been defined.`);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in the ${tok.str} component.`);\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let atypes = this.em.archetypesMatching({ include: [component] })\n let entities = this.currentScope.entitiesMatching(atypes);\n return { entities, field } as EntityFieldOp;\n }\n // entity.field\n if (this.ifToken('.')) {\n let ftok = this.consumeToken();\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let entity = this.currentScope.getEntityByName(tok.str);\n if (!entity) throw this.compileError(`An entity named \"${tok.str}\" has not been defined.`);\n let component = this.em.singleComponentWithFieldName([entity.etype], ftok.str, ftok);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in this entity.`);\n let entities = [entity];\n return { entities, field } as EntityFieldOp;\n }\n let args : Expr[] = [];\n if (this.ifToken('(')) {\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n throw this.compileError(`There should be a variable name here.`);\n }\n }\n parseLexpr(): LExpr {\n var lexpr = this.parseVarSubscriptOrFunc();\n //this.vardefs[lexpr.name] = lexpr;\n //this.validateVarName(lexpr);\n return lexpr;\n }\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n parseLexprList(): LExpr[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n // TODO: annotate with location\n parseBlockStatement(): Statement {\n let valtype : IntType = { dtype:'int', lo:0, hi: 0 } // TODO?\n if (this.peekToken().type == ECSTokenType.CodeFragment) {\n return { valtype, code: this.parseCode() };\n }\n if (this.ifToken('begin')) {\n let stmts = [];\n while (this.peekToken().str != 'end') {\n stmts.push(this.annotate(() => this.parseBlockStatement()));\n }\n this.expectToken('end');\n return { valtype, stmts };\n }\n let cmd = this.peekToken();\n if (SELECT_TYPE.includes(cmd.str as any)) {\n return this.parseQueryStatement();\n }\n throw this.compileError(`There should be a statement or \"end\" here.`, cmd.$loc);\n }\n parseQueryStatement() : QueryExpr {\n // TODO: include modifiers in error msg\n const select = this.expectTokens(SELECT_TYPE).str as SelectType; // TODO: type check?\n let all = this.ifToken('all') != null;\n let query = undefined;\n let join = undefined;\n if (select == 'once') {\n if (this.peekToken().str == '[') this.compileError(`A \"${select}\" action can't include a query.`)\n } else {\n query = this.parseQuery();\n }\n if (select == 'join') {\n this.expectToken('with');\n join = this.parseQuery();\n }\n if (this.ifToken('limit')) {\n if (!query) { this.compileError(`A \"${select}\" query can't include a limit.`); }\n else query.limit = this.parseIntegerConstant();\n }\n const all_modifiers = ['asc', 'desc']; // TODO\n const modifiers = this.parseModifiers(all_modifiers);\n let direction = undefined;\n if (modifiers['asc']) direction = 'asc';\n else if (modifiers['desc']) direction = 'desc';\n let body = this.annotate(() => this.parseBlockStatement());\n return { select, query, join, direction, all, stmts: [body], loop: select == 'foreach' } as QueryExpr;\n }\n}\n\n///\n\nexport class ECSActionCompiler extends Tokenizer {\n constructor(\n public readonly context: ActionContext) {\n super();\n this.setTokenRules([\n { type: ECSTokenType.Placeholder, regex: /\\{\\{.*?\\}\\}/ },\n { type: TokenType.CatchAll, regex: /[^{\\n]+\\n*/ },\n ]);\n this.errorOnCatchAll = false;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n let nodes = [];\n while (!this.isEOF()) {\n let tok = this.consumeToken();\n if (tok.type == ECSTokenType.Placeholder) {\n let args = tok.str.substring(2, tok.str.length - 2).split(/\\s+/);\n nodes.push(new CodePlaceholderNode(this.context, tok.$loc, args));\n } else if (tok.type == TokenType.CatchAll) {\n nodes.push(new CodeLiteralNode(this.context, tok.$loc, tok.str));\n }\n }\n return nodes;\n }\n}\n", "import { ECSCompiler } from \"../../common/ecs/compiler\";\nimport { Dialect_CA65, ECSError, EntityManager } from \"../../common/ecs/ecs\";\nimport { CompileError } from \"../../common/tokenizer\";\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, fixParamsWithDefines, gatherFiles, getWorkFileAsString, putWorkFile, staleFiles } from \"../workermain\";\n\nexport function assembleECS(step: BuildStep): BuildStepResult {\n let em = new EntityManager(new Dialect_CA65()); // TODO\n let compiler = new ECSCompiler(em, true);\n compiler.getImportFile = (path: string) => {\n return getWorkFileAsString(path);\n }\n gatherFiles(step, { mainFilePath: \"main.ecs\" });\n if (step.mainfile) em.mainPath = step.path;\n var destpath = step.prefix + '.ca65';\n if (staleFiles(step, [destpath])) {\n let code = getWorkFileAsString(step.path);\n fixParamsWithDefines(step.path, step.params);\n try {\n compiler.includeDebugInfo = true;\n compiler.parseFile(code, step.path);\n let outtext = compiler.export().toString();\n putWorkFile(destpath, outtext);\n var listings: CodeListingMap = {};\n listings[destpath] = {lines:[], text:outtext} // TODO\n var debuginfo = compiler.em.getDebugTree();\n } catch (e) {\n if (e instanceof ECSError) {\n compiler.addError(e.message, e.$loc);\n for (let obj of e.$sources) {\n let name = (obj as any).event;\n if (name == 'start') break;\n compiler.addError(`... ${name}`, obj.$loc); // TODO?\n }\n return { errors: compiler.errors };\n } else if (e instanceof CompileError) {\n return { errors: compiler.errors };\n } else {\n throw e;\n }\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath].concat(step.files),\n listings,\n debuginfo\n };\n }\n}\n", "import { byteArrayToString, stringToByteArray } from \"../../common/util\";\nimport { WorkerFileUpdate, isErrorResult, isOutputResult, isUnchanged } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, store } from \"../workermain\";\n\n// create random UID\nconst sessionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n\n// TODO: #include links but #link doesnt link\nexport async function buildRemote(step: BuildStep): Promise<BuildStepResult> {\n // grab the remote URL from a remote.json file\n const { REMOTE_URL } = await (await fetch('../../remote.json')).json();\n if (typeof REMOTE_URL !== 'string') throw new Error(\"No REMOTE_URL in remote.json\");\n\n gatherFiles(step); // TODO?\n var binpath = \"a.out\"; // TODO?\n if (staleFiles(step, [binpath])) {\n // grab files from store\n let updates : WorkerFileUpdate[] = [];\n for (var i = 0; i < step.files.length; i++) {\n let path = step.files[i];\n let entry = store.workfs[path];\n // convert to base64\n let data = typeof entry.data === 'string' ? entry.data : btoa(byteArrayToString(entry.data));\n updates.push({ path, data });\n }\n // build the command\n let cmd = { buildStep: step, updates, sessionID };\n // do a POST to the remote server, sending step as JSON\n console.log('POST', cmd);\n let result = await fetch(REMOTE_URL, {\n method: \"POST\",\n mode: \"cors\",\n body: JSON.stringify(cmd),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n // return the result as JSON\n let json = await result.json();\n // parse the result as JSON\n if (isUnchanged(json)) return json;\n if (isErrorResult(json)) return json;\n if (isOutputResult(json)) {\n json.output = stringToByteArray(atob(json.output));\n return json;\n }\n throw new Error(`Unexpected result from remote build: ${JSON.stringify(json)}`);\n }\n}\n", "import { CodeListing, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, emglobal, execMain, fixParamsWithDefines, gatherFiles, loadNative, makeErrorMatcher, moduleInstFn, msvcErrorMatcher, populateFiles, print_fn, putWorkFile, setupFS, staleFiles } from \"../workermain\";\nimport { EmscriptenModule } from \"../workermain\"\n\nfunction parseACMESymbolTable(text: string) {\n var symbolmap = {};\n var lines = text.split(\"\\n\");\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i].trim();\n // \tinit_text\t= $81b\t; ?\n var m = line.match(/(\\w+)\\s*=\\s*[$]([0-9a-f]+)/i);\n if (m) {\n symbolmap[m[1]] = parseInt(m[2], 16);\n }\n }\n return symbolmap;\n}\n\nfunction parseACMEReportFile(text: string) {\n var listings : CodeListingMap = {};\n var listing : CodeListing;\n var lines = text.split(\"\\n\");\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i].trim();\n // ; ******** Source: hello.acme\n var m1 = line.match(/^;\\s*[*]+\\s*Source: (.+)$/);\n if (m1) {\n var file = m1[1];\n listings[file] = listing = {\n lines: [],\n };\n continue;\n }\n // 15 0815 201b08 \t\tjsr init_text\t\t; write line of text\n var m2 = line.match(/^(\\d+)\\s+([0-9a-f]+)\\s+([0-9a-f]+)/i);\n if (m2) {\n if (listing) {\n listing.lines.push({\n line: parseInt(m2[1]),\n offset: parseInt(m2[2], 16),\n insns: m2[3],\n });\n }\n }\n }\n return listings;\n}\n\nexport function assembleACME(step: BuildStep): BuildStepResult {\n loadNative(\"acme\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.acme\" });\n var binpath = step.prefix + \".bin\";\n var lstpath = step.prefix + \".lst\";\n var sympath = step.prefix + \".sym\";\n if (staleFiles(step, [binpath])) {\n var binout, lstout, symout;\n var ACME: EmscriptenModule = emglobal.acme({\n instantiateWasm: moduleInstFn('acme'),\n noInitialRun: true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n //printErr: makeErrorMatcher(errors, /(Error|Warning) - File (.+?), line (\\d+)[^:]+: (.+)/, 3, 4, step.path, 2),\n });\n var FS = ACME.FS;\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n var args = ['--msvc', '--initmem', '0', '-o', binpath, '-r', lstpath, '-l', sympath, step.path];\n if (step.params?.acmeargs) {\n args.unshift.apply(args, step.params.acmeargs);\n } else {\n args.unshift.apply(args, ['-f', 'plain']);\n }\n args.unshift.apply(args, [\"-D__8BITWORKSHOP__=1\"]);\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D__MAIN__=1\"]);\n }\n execMain(step, ACME, args);\n if (errors.length) {\n let listings: CodeListingMap = {};\n return { errors, listings };\n }\n binout = FS.readFile(binpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n symout = FS.readFile(sympath, { encoding: 'utf8' });\n putWorkFile(binpath, binout);\n putWorkFile(lstpath, lstout);\n putWorkFile(sympath, symout);\n return {\n output: binout,\n listings: parseACMEReportFile(lstout),\n errors: errors,\n symbolmap: parseACMESymbolTable(symout),\n };\n }\n}\n", "\n// https://dev.to/ndesmic/building-a-minimal-wasi-polyfill-for-browsers-4nel\n// http://www.wasmtutor.com/webassembly-barebones-wasi\n// https://github.com/emscripten-core/emscripten/blob/c017fc2d6961962ee87ae387462a099242dfbbd2/src/library_wasi.js#L451\n// https://github.com/emscripten-core/emscripten/blob/c017fc2d6961962ee87ae387462a099242dfbbd2/src/library_fs.js\n// https://github.com/WebAssembly/wasi-libc/blob/main/libc-bottom-half/sources/preopens.c\n// https://fossies.org/linux/wasm3/source/extra/wasi_core.h\n// https://wasix.org/docs/api-reference/wasi/fd_read\n\nconst use_debug = true;\nconst debug = use_debug ? console.log : () => { };\nconst warning = console.log;\n\nexport enum FDType {\n UNKNOWN = 0,\n BLOCK_DEVICE = 1,\n CHARACTER_DEVICE = 2,\n DIRECTORY = 3,\n REGULAR_FILE = 4,\n SOCKET_DGRAM = 5,\n SOCKET_STREAM = 6,\n SYMBOLIC_LINK = 7,\n}\n\nexport enum FDRights {\n FD_DATASYNC = 1,\n FD_READ = 2,\n FD_SEEK = 4,\n FD_FDSTAT_SET_FLAGS = 8,\n FD_SYNC = 16,\n FD_TELL = 32,\n FD_WRITE = 64,\n FD_ADVISE = 128,\n FD_ALLOCATE = 256,\n PATH_CREATE_DIRECTORY = 512,\n PATH_CREATE_FILE = 1024,\n PATH_LINK_SOURCE = 2048,\n PATH_LINK_TARGET = 4096,\n PATH_OPEN = 8192,\n FD_READDIR = 16384,\n PATH_READLINK = 32768,\n PATH_RENAME_SOURCE = 65536,\n PATH_RENAME_TARGET = 131072,\n PATH_FILESTAT_GET = 262144,\n PATH_FILESTAT_SET_SIZE = 524288,\n PATH_FILESTAT_SET_TIMES = 1048576,\n FD_FILESTAT_GET = 2097152,\n FD_FILESTAT_SET_SIZE = 4194304,\n FD_FILESTAT_SET_TIMES = 8388608,\n PATH_SYMLINK = 16777216,\n PATH_REMOVE_DIRECTORY = 33554432,\n PATH_UNLINK_FILE = 67108864,\n POLL_FD_READWRITE = 134217728,\n SOCK_SHUTDOWN = 268435456,\n FD_ALL = 536870911, // TODO?\n}\n\nexport enum FDFlags {\n APPEND = 1,\n DSYNC = 2,\n NONBLOCK = 4,\n RSYNC = 8,\n SYNC = 16,\n}\n\nexport enum FDOpenFlags {\n CREAT = 1,\n DIRECTORY = 2,\n EXCL = 4,\n TRUNC = 8,\n}\n\nexport enum WASIErrors {\n SUCCESS = 0,\n TOOBIG = 1,\n ACCES = 2,\n ADDRINUSE = 3,\n ADDRNOTAVAIL = 4,\n AFNOSUPPORT = 5,\n AGAIN = 6,\n ALREADY = 7,\n BADF = 8,\n BADMSG = 9,\n BUSY = 10,\n CANCELED = 11,\n CHILD = 12,\n CONNABORTED = 13,\n CONNREFUSED = 14,\n CONNRESET = 15,\n DEADLK = 16,\n DESTADDRREQ = 17,\n DOM = 18,\n DQUOT = 19,\n EXIST = 20,\n FAULT = 21,\n FBIG = 22,\n HOSTUNREACH = 23,\n IDRM = 24,\n ILSEQ = 25,\n INPROGRESS = 26,\n INTR = 27,\n INVAL = 28,\n IO = 29,\n ISCONN = 30,\n ISDIR = 31,\n LOOP = 32,\n MFILE = 33,\n MLINK = 34,\n MSGSIZE = 35,\n MULTIHOP = 36,\n NAMETOOLONG = 37,\n NETDOWN = 38,\n NETRESET = 39,\n NETUNREACH = 40,\n NFILE = 41,\n NOBUFS = 42,\n NODEV = 43,\n NOENT = 44,\n NOEXEC = 45,\n NOLCK = 46,\n NOLINK = 47,\n NOMEM = 48,\n NOMSG = 49,\n NOPROTOOPT = 50,\n NOSPC = 51,\n NOSYS = 52,\n NOTCONN = 53,\n NOTDIR = 54,\n NOTEMPTY = 55,\n NOTRECOVERABLE = 56,\n NOTSOCK = 57,\n NOTSUP = 58,\n NOTTY = 59,\n NXIO = 60,\n OVERFLOW = 61,\n OWNERDEAD = 62,\n PERM = 63,\n PIPE = 64,\n PROTO = 65,\n PROTONOSUPPORT = 66,\n PROTOTYPE = 67,\n RANGE = 68,\n ROFS = 69,\n SPIPE = 70,\n SRCH = 71,\n STALE = 72,\n TIMEDOUT = 73,\n TXTBSY = 74,\n XDEV = 75,\n NOTCAPABLE = 76,\n}\n\n\n\nexport class WASIFileDescriptor {\n fdindex: number = -1;\n data: Uint8Array = new Uint8Array(16);\n flags: number = 0;\n size: number = 0;\n offset: number = 0;\n\n constructor(public name: string, public type: FDType, public rights: number) {\n this.rights = -1; // TODO?\n }\n ensureCapacity(size: number) {\n if (this.data.byteLength < size) {\n const newdata = new Uint8Array(size * 2); // TODO?\n newdata.set(this.data);\n this.data = newdata;\n }\n }\n write(chunk: Uint8Array) {\n this.ensureCapacity(this.offset + chunk.byteLength);\n this.data.set(chunk, this.offset);\n this.offset += chunk.byteLength;\n this.size = Math.max(this.size, this.offset);\n }\n read(chunk: Uint8Array) {\n const len = Math.min(chunk.byteLength, this.size - this.offset);\n chunk.set(this.data.subarray(this.offset, this.offset + len));\n this.offset += len;\n return len;\n }\n truncate() {\n this.size = 0;\n this.offset = 0;\n }\n llseek(offset: number, whence: number) {\n switch (whence) {\n case 0: // SEEK_SET\n this.offset = offset;\n break;\n case 1: // SEEK_CUR\n this.offset += offset;\n break;\n case 2: // SEEK_END\n this.offset = this.size + offset;\n break;\n }\n if (this.offset < 0) this.offset = 0;\n if (this.offset > this.size) this.offset = this.size;\n }\n getBytes() {\n return this.data.subarray(0, this.size);\n }\n getBytesAsString() {\n return new TextDecoder().decode(this.getBytes());\n }\n toString() {\n return `FD(${this.fdindex} \"${this.name}\" 0x${this.type.toString(16)} 0x${this.rights.toString(16)} ${this.offset}/${this.size}/${this.data.byteLength})`;\n }\n}\n\nclass WASIStreamingFileDescriptor extends WASIFileDescriptor {\n constructor(fdindex: number, name: string, type: FDType, rights: number,\n private stream: NodeJS.WritableStream) {\n super(name, type, rights);\n this.fdindex = fdindex;\n }\n write(chunk: Uint8Array) {\n this.stream.write(chunk);\n }\n}\n\nexport interface WASIFilesystem {\n getFile(name: string) : WASIFileDescriptor;\n}\n\nexport class WASIMemoryFilesystem implements WASIFilesystem {\n private parent: WASIFilesystem | null = null;\n private files: Map<string, WASIFileDescriptor> = new Map();\n private dirs: Map<string, WASIFileDescriptor> = new Map();\n\n constructor() {\n this.putDirectory(\"/\");\n }\n setParent(parent: WASIFilesystem) {\n this.parent = parent;\n }\n putDirectory(name: string, rights?: number) {\n if (!rights) rights = FDRights.PATH_OPEN | FDRights.PATH_CREATE_DIRECTORY | FDRights.PATH_CREATE_FILE;\n const dir = new WASIFileDescriptor(name, FDType.DIRECTORY, rights);\n this.dirs.set(name, dir);\n return dir;\n }\n putFile(name: string, data: string | Uint8Array, rights?: number) {\n if (typeof data === 'string') {\n data = new TextEncoder().encode(data);\n }\n if (!rights) rights = FDRights.FD_READ | FDRights.FD_WRITE;\n const file = new WASIFileDescriptor(name, FDType.REGULAR_FILE, rights);\n file.write(data);\n file.offset = 0;\n this.files.set(name, file);\n return file;\n }\n getFile(name: string) {\n let file = this.files.get(name);\n if (!file) {\n file = this.parent?.getFile(name);\n }\n return file;\n }\n}\n\nexport class WASIRunner {\n #instance; // TODO\n #memarr8: Uint8Array;\n #memarr32: Int32Array;\n #args: Uint8Array[] = [];\n #envvars: Uint8Array[] = [];\n\n stdin : WASIFileDescriptor;\n stdout : WASIFileDescriptor;\n stderr : WASIFileDescriptor;\n\n fds: WASIFileDescriptor[] = [];\n exited = false;\n errno = -1;\n fs = new WASIMemoryFilesystem();\n\n constructor() {\n this.createStdioBrowser();\n }\n createStdioNode() {\n this.stdin = new WASIStreamingFileDescriptor(0, '<stdin>', FDType.CHARACTER_DEVICE, FDRights.FD_READ, process.stdin);\n this.stdout = new WASIStreamingFileDescriptor(1, '<stdout>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE, process.stdout);\n this.stderr = new WASIStreamingFileDescriptor(2, '<stderr>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE, process.stderr);\n this.fds[0] = this.stdin;\n this.fds[1] = this.stdout;\n this.fds[2] = this.stderr;\n }\n createStdioBrowser() {\n this.stdin = new WASIFileDescriptor('<stdin>', FDType.CHARACTER_DEVICE, FDRights.FD_READ);\n this.stdout = new WASIFileDescriptor('<stdout>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE);\n this.stderr = new WASIFileDescriptor('<stderr>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE);\n this.stdin.fdindex = 0;\n this.stdout.fdindex = 1;\n this.stderr.fdindex = 2;\n this.fds[0] = this.stdin;\n this.fds[1] = this.stdout;\n this.fds[2] = this.stderr;\n }\n initSync(wasmModule: WebAssembly.Module) {\n this.#instance = new WebAssembly.Instance(wasmModule, this.getImportObject());\n }\n loadSync(wasmSource: Uint8Array) {\n let wasmModule = new WebAssembly.Module(wasmSource);\n this.initSync(wasmModule);\n }\n async loadAsync(wasmSource: Uint8Array) {\n let wasmModule = await WebAssembly.compile(wasmSource);\n this.#instance = await WebAssembly.instantiate(wasmModule, this.getImportObject());\n }\n setArgs(args: string[]) {\n this.#args = args.map(arg => new TextEncoder().encode(arg + '\\0'));\n }\n addPreopenDirectory(name: string) {\n return this.openFile(name, FDOpenFlags.DIRECTORY | FDOpenFlags.CREAT);\n }\n openFile(path: string, o_flags: number, mode?: number): WASIFileDescriptor | number {\n let file = this.fs.getFile(path);\n mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n if (o_flags & FDOpenFlags.CREAT) {\n if (file == null) {\n if (o_flags & FDOpenFlags.DIRECTORY) {\n file = this.fs.putDirectory(path);\n } else {\n file = this.fs.putFile(path, new Uint8Array(), FDRights.FD_ALL);\n }\n } else {\n if (o_flags & FDOpenFlags.TRUNC) { // truncate\n file.truncate();\n } else return WASIErrors.INVAL;\n }\n } else {\n if (file == null) return WASIErrors.NOSYS;\n if (o_flags & FDOpenFlags.DIRECTORY) { // check type\n if (file.type !== FDType.DIRECTORY) return WASIErrors.NOSYS;\n }\n if (o_flags & FDOpenFlags.EXCL) return WASIErrors.INVAL; // already exists\n if (o_flags & FDOpenFlags.TRUNC) { // truncate\n file.truncate();\n } else {\n file.llseek(0, 0); // seek to start\n }\n }\n file.fdindex = this.fds.length;\n this.fds.push(file);\n return file;\n }\n mem8() {\n if (!this.#memarr8?.byteLength) {\n this.#memarr8 = new Uint8Array(this.#instance.exports.memory.buffer);\n }\n return this.#memarr8;\n }\n mem32() {\n if (!this.#memarr32?.byteLength) {\n this.#memarr32 = new Int32Array(this.#instance.exports.memory.buffer);\n }\n return this.#memarr32;\n }\n run() {\n try {\n this.#instance.exports._start();\n if (!this.exited) {\n this.exited = true;\n this.errno = 0;\n }\n } catch (err) {\n if (!this.exited) throw err;\n }\n return this.getErrno();\n }\n getImportObject() {\n return {\n \"wasi_snapshot_preview1\": this.getWASISnapshotPreview1(),\n \"env\": this.getEnv(),\n }\n }\n peek8(ptr: number) {\n return this.mem8()[ptr];\n }\n peek16(ptr: number) {\n return this.mem8()[ptr] | (this.mem8()[ptr + 1] << 8);\n }\n peek32(ptr: number) {\n return this.mem32()[ptr >>> 2];\n }\n poke8(ptr: number, val: number) {\n this.mem8()[ptr] = val;\n }\n poke16(ptr: number, val: number) {\n this.mem8()[ptr] = val;\n this.mem8()[ptr + 1] = val >> 8;\n }\n poke32(ptr: number, val: number) {\n this.mem32()[ptr >>> 2] = val;\n }\n poke64(ptr: number, val: number) {\n this.mem32()[ptr >>> 2] = val;\n this.mem32()[(ptr >>> 2) + 1] = 0;\n }\n pokeUTF8(str: string, ptr: number, maxlen: number) {\n const enc = new TextEncoder();\n const bytes = enc.encode(str);\n const len = Math.min(bytes.length, maxlen);\n this.mem8().set(bytes.subarray(0, len), ptr);\n }\n peekUTF8(ptr: number, maxlen: number) {\n const bytes = this.mem8().subarray(ptr, ptr + maxlen);\n const dec = new TextDecoder();\n return dec.decode(bytes);\n }\n getErrno() {\n return this.errno;\n //let errno_ptr = this.#instance.exports.__errno_location();\n //return this.peek32(errno_ptr);\n }\n poke_str_array_sizes(strs: Uint8Array[], count_ptr: number, buf_size_ptr: number) {\n this.poke32(count_ptr, strs.length);\n this.poke32(buf_size_ptr, strs.reduce((acc, arg) => acc + arg.length, 0));\n }\n poke_str_args(strs: Uint8Array[], argv_ptr: number, argv_buf_ptr: number) {\n let argv = argv_ptr;\n let argv_buf = argv_buf_ptr;\n for (let arg of this.#args) {\n this.poke32(argv, argv_buf);\n argv += 4;\n for (let i = 0; i < arg.length; i++) {\n this.poke8(argv_buf, arg[i]);\n argv_buf++;\n }\n }\n }\n args_sizes_get(argcount_ptr: number, argv_buf_size_ptr: number) {\n debug(\"args_sizes_get\", argcount_ptr, argv_buf_size_ptr);\n this.poke_str_array_sizes(this.#args, argcount_ptr, argv_buf_size_ptr);\n return 0;\n }\n args_get(argv_ptr: number, argv_buf_ptr: number) {\n debug(\"args_get\", argv_ptr, argv_buf_ptr);\n this.poke_str_args(this.#args, argv_ptr, argv_buf_ptr);\n return 0;\n }\n environ_sizes_get(environ_count_ptr: number, environ_buf_size_ptr: number) {\n debug(\"environ_sizes_get\", environ_count_ptr, environ_buf_size_ptr);\n this.poke_str_array_sizes(this.#envvars, environ_count_ptr, environ_buf_size_ptr);\n return 0;\n }\n environ_get(environ_ptr: number, environ_buf_ptr: number) {\n debug(\"environ_get\", environ_ptr, environ_buf_ptr);\n this.poke_str_args(this.#envvars, environ_ptr, environ_buf_ptr);\n return 0;\n }\n fd_write(fd, iovs, iovs_len, nwritten_ptr) {\n const stream = this.fds[fd];\n const iovecs = this.mem32().subarray(iovs >>> 2, (iovs + iovs_len * 8) >>> 2);\n let total = 0;\n for (let i = 0; i < iovs_len; i++) {\n const ptr = iovecs[i * 2];\n const len = iovecs[i * 2 + 1];\n const chunk = this.mem8().subarray(ptr, ptr + len);\n total += len;\n stream.write(chunk);\n }\n this.poke32(nwritten_ptr, total);\n debug(\"fd_write\", fd, iovs, iovs_len, '->', total);\n return 0;\n }\n fd_read(fd, iovs, iovs_len, nread_ptr) {\n const stream = this.fds[fd];\n const iovecs = this.mem32().subarray(iovs >>> 2, (iovs + iovs_len * 8) >>> 2);\n let total = 0;\n for (let i = 0; i < iovs_len; i++) {\n const ptr = iovecs[i * 2];\n const len = iovecs[i * 2 + 1];\n const chunk = this.mem8().subarray(ptr, ptr + len);\n total += stream.read(chunk);\n }\n this.poke32(nread_ptr, total);\n debug(\"fd_read\", fd, iovs, iovs_len, '->', total);\n return WASIErrors.SUCCESS;\n }\n fd_seek(fd: number, offset: number, whence: number, newoffset_ptr: number) {\n const file = this.fds[fd];\n debug(\"fd_seek\", fd, offset, whence, file);\n if (file != null) {\n file.llseek(offset, whence);\n this.poke64(newoffset_ptr, file.offset);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_close(fd: number) {\n debug(\"fd_close\", fd);\n const file = this.fds[fd];\n if (file != null) {\n this.fds[fd] = null;\n return 0;\n }\n return WASIErrors.BADF;\n }\n proc_exit(errno: number) {\n debug(\"proc_exit\", errno);\n this.errno = errno;\n this.exited = true;\n }\n fd_prestat_get(fd: number, prestat_ptr: number) {\n const file = this.fds[fd];\n debug(\"fd_prestat_get\", fd, prestat_ptr, file?.name);\n if (file && file.type === FDType.DIRECTORY) {\n const enc_name = new TextEncoder().encode(file.name);\n this.poke8(prestat_ptr + 0, 0); // __WASI_PREOPENTYPE_DIR\n this.poke64(prestat_ptr + 8, enc_name.length);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_fdstat_get(fd: number, fdstat_ptr: number) {\n const file = this.fds[fd];\n debug(\"fd_fdstat_get\", fd, fdstat_ptr, file + \"\");\n if (file != null) {\n this.poke16(fdstat_ptr + 0, file.type); // fs_filetype\n this.poke16(fdstat_ptr + 2, file.flags); // fs_flags\n this.poke64(fdstat_ptr + 8, file.rights); // fs_rights_base\n this.poke64(fdstat_ptr + 16, file.rights); // fs_rights_inheriting\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_prestat_dir_name(fd: number, path_ptr: number, path_len: number) {\n const file = this.fds[fd];\n debug(\"fd_prestat_dir_name\", fd, path_ptr, path_len);\n if (file != null) {\n this.pokeUTF8(file.name, path_ptr, path_len);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.INVAL;\n }\n path_open(dirfd: number, dirflags: number, path_ptr: number, path_len: number,\n o_flags: number, fs_rights_base: number, fs_rights_inheriting: number,\n fd_flags: number, fd_ptr: number)\n {\n const dir = this.fds[dirfd];\n if (dir == null) return WASIErrors.BADF;\n if (dir.type !== FDType.DIRECTORY) return WASIErrors.NOTDIR;\n const filename = this.peekUTF8(path_ptr, path_len);\n const path = dir.name + '/' + filename;\n const fd = this.openFile(path, o_flags, fd_flags);\n debug(\"path_open\", path, dirfd, dirflags, \n o_flags, //fs_rights_base, fs_rights_inheriting,\n fd_flags, fd_ptr, '->', fd + \"\");\n if (typeof fd === 'number') return fd; // error msg\n this.poke32(fd_ptr, fd.fdindex);\n return WASIErrors.SUCCESS;\n }\n random_get(ptr: number, len: number) {\n debug(\"random_get\", ptr, len);\n for (let i=0; i<len; i++) {\n // TODO: don't use for crypto\n this.poke8(ptr + i, Math.floor(Math.random() * 256));\n }\n return WASIErrors.SUCCESS;\n }\n path_filestat_get(dirfd: number, dirflags: number, path_ptr: number, path_len: number, filestat_ptr: number) {\n const dir = this.fds[dirfd];\n if (dir == null) return WASIErrors.BADF;\n if (dir.type !== FDType.DIRECTORY) return WASIErrors.NOTDIR;\n const filename = this.peekUTF8(path_ptr, path_len);\n const path = dir.name + '/' + filename;\n const fd = this.fs.getFile(path);\n console.log(\"path_filestat_get\", dir+\"\", path, filestat_ptr, '->', fd+\"\");\n if (!fd) return WASIErrors.NOENT;\n this.poke64(filestat_ptr, fd.fdindex); // dev\n this.poke64(filestat_ptr + 8, 0); // ino\n this.poke8(filestat_ptr + 16, fd.type); // filetype\n this.poke64(filestat_ptr + 24, 1); // nlink\n this.poke64(filestat_ptr + 32, fd.size); // size\n this.poke64(filestat_ptr + 40, 0); // atim\n this.poke64(filestat_ptr + 48, 0); // mtim\n this.poke64(filestat_ptr + 56, 0); // ctim\n }\n getWASISnapshotPreview1() {\n return {\n args_sizes_get: this.args_sizes_get.bind(this),\n args_get: this.args_get.bind(this),\n environ_sizes_get: this.environ_sizes_get.bind(this),\n environ_get: this.environ_get.bind(this),\n proc_exit: this.proc_exit.bind(this),\n path_open: this.path_open.bind(this),\n fd_prestat_get: this.fd_prestat_get.bind(this),\n fd_prestat_dir_name: this.fd_prestat_dir_name.bind(this),\n fd_fdstat_get: this.fd_fdstat_get.bind(this),\n fd_read: this.fd_read.bind(this),\n fd_write: this.fd_write.bind(this),\n fd_seek: this.fd_seek.bind(this),\n fd_close: this.fd_close.bind(this),\n path_filestat_get: this.path_filestat_get.bind(this),\n random_get: this.random_get.bind(this),\n fd_fdstat_set_flags() { warning(\"TODO: fd_fdstat_set_flags\"); return WASIErrors.NOTSUP; },\n fd_readdir() { warning(\"TODO: fd_readdir\"); return WASIErrors.NOTSUP; },\n path_unlink_file() { warning(\"TODO: path_unlink_file\"); return WASIErrors.NOTSUP; },\n clock_time_get() { warning(\"TODO: clock_time_get\"); return WASIErrors.NOTSUP; },\n }\n }\n getEnv() {\n return {\n __syscall_unlinkat() { warning('TODO: unlink'); return 0; },\n }\n }\n}\n", "import { WASIFilesystem, WASIMemoryFilesystem, WASIRunner } from \"../../common/wasi/wasishim\";\nimport { BuildStep, BuildStepResult, gatherFiles, getWASMBinary, loadNative, loadWASMBinary, makeErrorMatcher, putWorkFile, staleFiles, store } from \"../workermain\";\nimport JSZip from 'jszip';\n\nlet cc7800_fs: WASIFilesystem | null = null;\nlet wasiModule: WebAssembly.Module | null = null;\n\nfunction loadBlobSync(path: string) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.open(\"GET\", path, false); // synchronous request\n xhr.send(null);\n return xhr.response;\n}\n\nasync function loadWASIFilesystemZip(zippath: string) {\n const jszip = new JSZip();\n const path = '../../src/worker/fs/' + zippath;\n const zipdata = loadBlobSync(path);\n console.log(zippath, zipdata);\n await jszip.loadAsync(zipdata);\n let fs = new WASIMemoryFilesystem();\n let promises = [];\n jszip.forEach(async (relativePath, zipEntry) => {\n if (zipEntry.dir) {\n fs.putDirectory(relativePath);\n } else {\n let path = './' + relativePath;\n let prom = zipEntry.async(\"uint8array\").then((data) => {\n fs.putFile(path, data);\n });\n promises.push(prom);\n }\n });\n await Promise.all(promises);\n return fs;\n}\n\n\nexport async function compileCC7800(step: BuildStep): Promise<BuildStepResult> {\n const errors = [];\n gatherFiles(step, { mainFilePath: \"main.c\" });\n const destpath = \"./a.out\";\n if (staleFiles(step, [destpath])) {\n if (!cc7800_fs) {\n cc7800_fs = await loadWASIFilesystemZip(\"cc7800-fs.zip\");\n }\n if (!wasiModule) {\n wasiModule = new WebAssembly.Module(loadWASMBinary(\"cc7800\"));\n }\n const wasi = new WASIRunner();\n wasi.initSync(wasiModule);\n wasi.fs.setParent(cc7800_fs);\n for (let file of step.files) {\n wasi.fs.putFile(\"./\" + file, store.getFileData(file));\n }\n wasi.addPreopenDirectory(\"headers\");\n wasi.addPreopenDirectory(\".\");\n wasi.setArgs([\"cc7800\", \"-v\", \"-g\", \"-S\", \"-I\", \"headers\", step.path]);\n try {\n wasi.run();\n } catch (e) {\n errors.push(e);\n }\n // TODO\n let stdout = wasi.fds[1].getBytesAsString();\n let stderr = wasi.fds[2].getBytesAsString();\n console.log('stdout', stdout);\n console.log('stderr', stderr);\n // Syntax error: Unknown identifier cputes on line 11 of test.c78\n if (stderr.indexOf(\"Syntax error:\") >= 0) {\n const matcher = makeErrorMatcher(errors, /^Syntax error: (.+?) on line (\\d+) of (.+)/, 2, 1, step.path, 3);\n for (let line of stderr.split('\\n')) {\n matcher(line);\n }\n }\n if (errors.length) {\n return { errors };\n }\n const combinedasm = wasi.fs.getFile(destpath).getBytesAsString();\n putWorkFile(destpath, combinedasm);\n }\n return {\n nexttool: \"dasm\",\n path: destpath,\n args: [destpath],\n files: [destpath]\n };\n}\n", "\nimport type { WorkerResult, WorkerBuildStep, WorkerMessage, WorkerError, SourceLine, WorkerErrorResult, WorkingStore } from \"../common/workertypes\";\nimport { getBasePlatform, getRootBasePlatform } from \"../common/util\";\n\n/// <reference types=\"emscripten\" />\nexport interface EmscriptenModule {\n callMain: (args: string[]) => void;\n FS : any; // TODO\n}\n\ndeclare function importScripts(path:string);\ndeclare function postMessage(msg);\n\nconst ENVIRONMENT_IS_WEB = typeof window === 'object';\nconst ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\nexport const emglobal : any = ENVIRONMENT_IS_WORKER ? self : ENVIRONMENT_IS_WEB ? window : global;\n\n// simple CommonJS module loader\n// TODO: relative paths for dependencies\nif (!emglobal['require']) {\n emglobal['require'] = (modpath: string) => {\n if (modpath.endsWith('.js')) modpath = modpath.slice(-3);\n var modname = modpath.split('/').slice(-1)[0];\n var hasNamespace = emglobal[modname] != null;\n console.log('@@@ require', modname, modpath, hasNamespace);\n if (!hasNamespace) {\n exports = {};\n importScripts(`${modpath}.js`);\n }\n if (emglobal[modname] == null) {\n emglobal[modname] = exports; // TODO: always put in global scope?\n }\n return emglobal[modname]; // TODO\n }\n}\n\n// WebAssembly module cache\n// TODO: leaks memory even when disabled...\nvar _WASM_module_cache = {};\nvar CACHE_WASM_MODULES = true; // if false, use asm.js only\n\n// TODO: which modules need this?\nvar wasmMemory;\nexport function getWASMMemory() {\n if (wasmMemory == null) {\n wasmMemory = new WebAssembly.Memory({\n 'initial': 1024, // 64MB\n 'maximum': 16384, // 1024MB\n });\n }\n return wasmMemory;\n}\nexport function getWASMBinary(module_id:string) {\n return wasmBlob[module_id];\n}\nfunction getWASMModule(module_id:string) {\n var module = _WASM_module_cache[module_id];\n if (!module) {\n starttime();\n module = new WebAssembly.Module(wasmBlob[module_id]);\n if (CACHE_WASM_MODULES) {\n _WASM_module_cache[module_id] = module;\n delete wasmBlob[module_id];\n }\n endtime(\"module creation \" + module_id);\n }\n return module;\n}\n// function for use with instantiateWasm\nexport function moduleInstFn(module_id:string) {\n return function(imports,ri) {\n var mod = getWASMModule(module_id);\n var inst = new WebAssembly.Instance(mod, imports);\n ri(inst);\n return inst.exports;\n }\n}\n\n//\n\nvar PLATFORM_PARAMS = {\n 'vcs': {\n arch: '6502',\n code_start: 0x1000,\n code_size: 0xf000,\n data_start: 0x80,\n data_size: 0x80,\n wiz_rom_ext: '.a26',\n wiz_inc_dir: '2600',\n cfgfile: 'atari2600.cfg',\n libargs: ['crt0.o', 'atari2600.lib'],\n extra_link_files: ['crt0.o', 'atari2600.cfg'],\n define: ['__ATARI2600__'],\n },\n 'mw8080bw': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x2000,\n data_start: 0x2000,\n data_size: 0x400,\n stack_end: 0x2400,\n },\n 'vicdual': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4020,\n data_start: 0xe400,\n data_size: 0x400,\n stack_end: 0xe800,\n },\n 'galaxian': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'galaxian-scramble': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x5020,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'williams': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n set_stack_end: 0xc000,\n extra_link_files: ['williams.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_link_args: ['-swilliams.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','stdlib.h'],\n //extra_compile_args: ['--vectrex'],\n },\n 'williams-defender': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x9800,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'vector-z80color': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xe000,\n data_size: 0x2000,\n stack_end: 0x0,\n },\n 'vector-ataricolor': { //TODO\n arch: '6502',\n define: ['__VECTOR__'],\n cfgfile: 'vector-color.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'vector-color.cfg'],\n },\n 'sound_williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x8000,\n },\n 'base_z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0x8000,\n data_size: 0x8000,\n stack_end: 0x0,\n },\n 'coleco': {\n arch: 'z80',\n rom_start: 0x8000,\n code_start: 0x8100,\n rom_size: 0x8000,\n data_start: 0x7000,\n data_size: 0x400,\n stack_end: 0x8000,\n extra_preproc_args: ['-I', '/share/include/coleco', '-D', 'CV_CV'],\n extra_link_args: ['-k', '/share/lib/coleco', '-l', 'libcv', '-l', 'libcvu', 'crt0.rel'],\n },\n 'msx': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_link_args: ['crt0-msx.rel'],\n extra_link_files: ['crt0-msx.rel', 'crt0-msx.lst'],\n wiz_sys_type: 'z80',\n wiz_inc_dir: 'msx',\n },\n 'msx-libcv': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_preproc_args: ['-I', '.', '-D', 'CV_MSX'],\n extra_link_args: ['-k', '.', '-l', 'libcv-msx', '-l', 'libcvu-msx', 'crt0-msx.rel'],\n extra_link_files: ['libcv-msx.lib', 'libcvu-msx.lib', 'crt0-msx.rel', 'crt0-msx.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'sms-sg1000-libcv': {\n arch: 'z80',\n rom_start: 0x0000,\n code_start: 0x0100,\n rom_size: 0xc000,\n data_start: 0xc000,\n data_size: 0x400,\n stack_end: 0xe000,\n extra_preproc_args: ['-I', '.', '-D', 'CV_SMS'],\n extra_link_args: ['-k', '.', '-l', 'libcv-sms', '-l', 'libcvu-sms', 'crt0-sms.rel'],\n extra_link_files: ['libcv-sms.lib', 'libcvu-sms.lib', 'crt0-sms.rel', 'crt0-sms.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'nes': { //TODO\n arch: '6502',\n define: ['__NES__'],\n cfgfile: 'neslib2.cfg',\n libargs: ['crt0.o', 'nes.lib', 'neslib2.lib',\n '-D', 'NES_MAPPER=0', // NROM\n '-D', 'NES_PRG_BANKS=2', // 2 16K PRG banks\n '-D', 'NES_CHR_BANKS=1', // 1 CHR bank\n '-D', 'NES_MIRRORING=0', // horizontal mirroring\n ],\n extra_link_files: ['crt0.o', 'neslib2.lib', 'neslib2.cfg', 'nesbanked.cfg'],\n wiz_rom_ext: '.nes',\n },\n 'apple2': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: [ '--lib-path', '/share/target/apple2/drv', 'apple2.lib'],\n __CODE_RUN__: 16384,\n code_start: 0x803,\n acmeargs: ['-f', 'apple'],\n },\n 'apple2-e': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: ['apple2.lib'],\n acmeargs: ['-f', 'apple'],\n },\n 'atari8-800xl.disk': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari.cfg',\n libargs: ['atari.lib'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800xl': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-5200': {\n arch: '6502',\n define: ['__ATARI5200__'],\n cfgfile: 'atari5200.cfg',\n libargs: ['atari5200.lib', '-D', '__CARTFLAGS__=255'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'verilog': {\n arch: 'verilog',\n extra_compile_files: ['8bitworkshop.v'],\n },\n 'astrocade': {\n arch: 'z80',\n code_start: 0x2000,\n rom_size: 0x2000,\n data_start: 0x4e10,\n data_size: 0x1f0,\n stack_end: 0x5000,\n },\n 'astrocade-arcade': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x4000,\n data_start: 0x7de0,\n data_size: 0x220,\n stack_end: 0x8000,\n },\n 'astrocade-bios': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x2000,\n data_start: 0x4fce,\n data_size: 50,\n stack_end: 0x4fce,\n },\n 'atari7800': {\n arch: '6502',\n define: ['__ATARI7800__'],\n cfgfile: 'atari7800.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'atari7800.cfg'],\n },\n 'c64': {\n arch: '6502',\n define: ['__CBM__', '__C64__'],\n cfgfile: 'c64.cfg', // SYS 2061\n libargs: ['c64.lib'],\n acmeargs: ['-f', 'cbm'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'vic20': {\n arch: '6502',\n define: ['__CBM__', '__VIC20__'],\n cfgfile: 'vic20.cfg',\n libargs: ['vic20.lib'],\n acmeargs: ['-f', 'cbm'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'kim1': {\n arch: '6502',\n },\n 'vectrex': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xc880,\n data_size: 0x380,\n stack_end: 0xcc00,\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','vectrex.h','stdlib.h','bios.h'],\n extra_link_files: ['vectrex.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_compile_args: ['--vectrex'],\n extra_link_args: ['-svectrex.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n },\n 'x86': { \n arch: 'x86',\n },\n 'zx': {\n arch: 'z80',\n code_start: 0x5ccb,\n rom_size: 0xff58-0x5ccb,\n data_start: 0xf000,\n data_size: 0xfe00-0xf000,\n stack_end: 0xff58,\n extra_link_args: ['crt0-zx.rel'],\n extra_link_files: ['crt0-zx.rel', 'crt0-zx.lst'],\n },\n 'devel-6502': {\n arch: '6502',\n cfgfile: 'devel-6502.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'devel-6502.cfg'],\n },\n // https://github.com/cpcitor/cpc-dev-tool-chain\n 'cpc.rslib': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpcrslib.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpcrslib.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpcrslib.lib', 'cpcrslib.lst'],\n },\n // https://lronaldo.github.io/cpctelera/ (TODO)\n 'cpc': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpctelera.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpctelera.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpctelera.lib', 'cpctelera.lst'],\n },\n 'pce': {\n arch: 'huc6280',\n define: ['__PCE__'],\n cfgfile: 'pce.cfg',\n libargs: ['pce.lib', '-D', '__CARTSIZE__=0x8000'],\n },\n};\n\nPLATFORM_PARAMS['sms-sms-libcv'] = PLATFORM_PARAMS['sms-sg1000-libcv'];\nPLATFORM_PARAMS['sms-gg-libcv'] = PLATFORM_PARAMS['sms-sms-libcv'];\n\nvar _t1;\nexport function starttime() { _t1 = new Date(); }\nexport function endtime(msg) { var _t2 = new Date(); console.log(msg, _t2.getTime() - _t1.getTime(), \"ms\"); }\n\n/// working file store and build steps\n\ntype FileData = string | Uint8Array;\n\ntype FileEntry = {\n path: string\n encoding: string\n data: FileData\n ts: number\n};\n\ntype BuildOptions = {\n mainFilePath : string,\n processFn?: (s:string, d:FileData) => FileData\n};\n\n// TODO\nexport type BuildStepResult = WorkerResult | WorkerNextToolResult;\n\nexport interface WorkerNextToolResult {\n nexttool?: string\n linktool?: string\n path?: string\n args: string[]\n files: string[]\n bblines?: boolean\n}\n\nexport interface BuildStep extends WorkerBuildStep {\n files? : string[]\n args? : string[]\n nextstep? : BuildStep\n linkstep? : BuildStep\n params?\n result? : BuildStepResult\n code?\n prefix?\n maxts?\n debuginfo?\n};\n\n///\n\nexport class FileWorkingStore implements WorkingStore {\n workfs : {[path:string]:FileEntry} = {};\n workerseq : number = 0;\n items : {};\n\n constructor() {\n this.reset();\n }\n reset() {\n this.workfs = {};\n this.newVersion();\n }\n currentVersion() {\n return this.workerseq;\n }\n newVersion() {\n let ts = new Date().getTime();\n if (ts <= this.workerseq)\n ts = ++this.workerseq;\n return ts;\n }\n putFile(path:string, data:FileData) : FileEntry {\n var encoding = (typeof data === 'string') ? 'utf8' : 'binary';\n var entry = this.workfs[path];\n if (!entry || !compareData(entry.data, data) || entry.encoding != encoding) {\n this.workfs[path] = entry = {path:path, data:data, encoding:encoding, ts:this.newVersion()};\n console.log('+++', entry.path, entry.encoding, entry.data.length, entry.ts);\n }\n return entry;\n }\n hasFile(path: string) {\n return this.workfs[path] != null;\n }\n getFileData(path:string) : FileData {\n return this.workfs[path] && this.workfs[path].data;\n } \n getFileAsString(path:string) : string {\n let data = this.getFileData(path);\n if (data != null && typeof data !== 'string')\n throw new Error(`${path}: expected string`)\n return data as string; // TODO\n }\n getFileEntry(path:string) : FileEntry {\n return this.workfs[path];\n }\n setItem(key: string, value: object) {\n this.items[key] = value;\n }\n}\n\nexport var store = new FileWorkingStore();\n\n///\n\nfunction errorResult(msg: string) : WorkerErrorResult {\n return { errors:[{ line:0, msg:msg }]};\n}\n\nclass Builder {\n steps : BuildStep[] = [];\n startseq : number = 0;\n\n // returns true if file changed during this build step\n wasChanged(entry:FileEntry) : boolean {\n return entry.ts > this.startseq;\n }\n async executeBuildSteps() : Promise<WorkerResult> {\n this.startseq = store.currentVersion();\n var linkstep : BuildStep = null;\n while (this.steps.length) {\n var step = this.steps.shift(); // get top of array\n var platform = step.platform;\n var [tool, remoteTool] = step.tool.split(':', 2);\n var toolfn = TOOLS[tool];\n if (!toolfn) {\n throw Error(`no tool named \"${tool}\"`);\n }\n if (remoteTool) {\n step.tool = remoteTool;\n }\n step.params = PLATFORM_PARAMS[getBasePlatform(platform)];\n try {\n step.result = await toolfn(step);\n } catch (e) {\n console.log(\"EXCEPTION\", e, e.stack);\n return errorResult(e+\"\"); // TODO: catch errors already generated?\n }\n if (step.result) {\n (step.result as any).params = step.params; // TODO: type check\n if (step.debuginfo) {\n let r = step.result as any; // TODO\n if (!r.debuginfo) r.debuginfo = {};\n Object.assign(r.debuginfo, step.debuginfo);\n }\n // errors? return them\n if ('errors' in step.result && step.result.errors.length) {\n applyDefaultErrorPath(step.result.errors, step.path);\n return step.result;\n }\n // if we got some output, return it immediately\n if ('output' in step.result && step.result.output) {\n return step.result;\n }\n // combine files with a link tool?\n if ('linktool' in step.result) {\n // add to existing link step\n if (linkstep) {\n linkstep.files = linkstep.files.concat(step.result.files);\n linkstep.args = linkstep.args.concat(step.result.args);\n } else {\n linkstep = {\n tool:step.result.linktool,\n platform:platform,\n files:step.result.files,\n args:step.result.args\n };\n }\n linkstep.debuginfo = step.debuginfo; // TODO: multiple debuginfos\n }\n // process with another tool?\n if ('nexttool' in step.result) {\n var asmstep : BuildStep = {\n tool: step.result.nexttool,\n platform: platform,\n ...step.result\n }\n this.steps.push(asmstep);\n }\n // process final step?\n if (this.steps.length == 0 && linkstep) {\n this.steps.push(linkstep);\n linkstep = null;\n }\n }\n }\n }\n async handleMessage(data: WorkerMessage) : Promise<WorkerResult> {\n this.steps = [];\n // file updates\n if (data.updates) {\n data.updates.forEach((u) => store.putFile(u.path, u.data));\n }\n // object update\n if (data.setitems) {\n data.setitems.forEach((i) => store.setItem(i.key, i.value));\n }\n // build steps\n if (data.buildsteps) {\n this.steps.push.apply(this.steps, data.buildsteps);\n }\n // single-file\n if (data.code) {\n this.steps.push(data as BuildStep); // TODO: remove cast\n }\n // execute build steps\n if (this.steps.length) {\n var result = await this.executeBuildSteps();\n return result ? result : {unchanged:true};\n }\n // TODO: cache results\n // message not recognized\n console.log(\"Unknown message\",data);\n }\n}\n\nvar builder = new Builder();\n\n///\n\nfunction applyDefaultErrorPath(errors:WorkerError[], path:string) {\n if (!path) return;\n for (var i=0; i<errors.length; i++) {\n var err = errors[i];\n if (!err.path && err.line) err.path = path;\n }\n}\n\nfunction compareData(a:FileData, b:FileData) : boolean {\n if (a.length != b.length) return false;\n if (typeof a === 'string' && typeof b === 'string') {\n return a == b;\n } else {\n for (var i=0; i<a.length; i++) {\n //if (a[i] != b[i]) console.log('differ at byte',i,a[i],b[i]);\n if (a[i] != b[i]) return false;\n }\n return true;\n }\n}\n\nexport function putWorkFile(path:string, data:FileData) {\n return store.putFile(path, data);\n}\n\nexport function getWorkFileAsString(path:string) : string {\n return store.getFileAsString(path);\n}\n\nexport function populateEntry(fs, path:string, entry:FileEntry, options:BuildOptions) {\n var data = entry.data;\n if (options && options.processFn) {\n data = options.processFn(path, data);\n }\n // create subfolders\n var toks = path.split('/');\n if (toks.length > 1) {\n for (var i=0; i<toks.length-1; i++)\n try {\n fs.mkdir(toks[i]);\n } catch (e) { }\n }\n // write file\n fs.writeFile(path, data, {encoding:entry.encoding});\n var time = new Date(entry.ts);\n fs.utime(path, time, time);\n console.log(\"<<<\", path, entry.data.length);\n}\n\n// can call multiple times (from populateFiles)\nexport function gatherFiles(step:BuildStep, options?:BuildOptions) : number {\n var maxts = 0;\n if (step.files) {\n for (var i=0; i<step.files.length; i++) {\n var path = step.files[i];\n var entry = store.workfs[path];\n if (!entry) {\n throw new Error(\"No entry for path '\" + path + \"'\");\n } else {\n maxts = Math.max(maxts, entry.ts);\n }\n }\n }\n else if (step.code) {\n var path = step.path ? step.path : options.mainFilePath; // TODO: what if options null\n if (!path) throw Error(\"need path or mainFilePath\");\n var code = step.code;\n var entry = putWorkFile(path, code);\n step.path = path;\n step.files = [path];\n maxts = entry.ts;\n }\n else if (step.path) {\n var path = step.path;\n var entry = store.workfs[path];\n maxts = entry.ts;\n step.files = [path];\n }\n if (step.path && !step.prefix) {\n step.prefix = getPrefix(step.path);\n }\n step.maxts = maxts;\n return maxts;\n}\n\nexport function getPrefix(s : string) : string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substring(0, pos) : s;\n}\n\nexport function populateFiles(step:BuildStep, fs, options?:BuildOptions) {\n gatherFiles(step, options);\n if (!step.files) throw Error(\"call gatherFiles() first\");\n for (var i=0; i<step.files.length; i++) {\n var path = step.files[i];\n populateEntry(fs, path, store.workfs[path], options);\n }\n}\n\nexport function populateExtraFiles(step:BuildStep, fs, extrafiles) {\n if (extrafiles) {\n for (var i=0; i<extrafiles.length; i++) {\n var xfn = extrafiles[i];\n // is this file cached?\n if (store.workfs[xfn]) {\n fs.writeFile(xfn, store.workfs[xfn].data, {encoding:'binary'});\n continue;\n }\n // fetch from network\n var xpath = \"lib/\" + getBasePlatform(step.platform) + \"/\" + xfn;\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER+xpath, false); // synchronous request\n xhr.send(null);\n if (xhr.response && xhr.status == 200) {\n var data = new Uint8Array(xhr.response);\n fs.writeFile(xfn, data, {encoding:'binary'});\n putWorkFile(xfn, data);\n console.log(\":::\",xfn,data.length);\n } else {\n throw Error(\"Could not load extra file \" + xpath);\n }\n }\n }\n}\n\nexport function staleFiles(step:BuildStep, targets:string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i=0; i<targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || step.maxts > entry.ts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function anyTargetChanged(step:BuildStep, targets:string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i=0; i<targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || entry.ts > step.maxts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function execMain(step:BuildStep, mod, args:string[]) {\n starttime();\n var run = mod.callMain || mod.run; // TODO: run?\n run(args);\n endtime(step.tool);\n}\n\n/// asm.js / WASM / filesystem loading\n\nvar fsMeta = {};\nvar fsBlob = {};\nvar wasmBlob = {};\n\nconst PSRC = \"../../src/\";\nconst PWORKER = PSRC+\"worker/\";\n\n// load filesystems for CC65 and others asynchronously\nfunction loadFilesystem(name:string) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.open(\"GET\", PWORKER+\"fs/fs\"+name+\".data\", false); // synchronous request\n xhr.send(null);\n fsBlob[name] = xhr.response;\n xhr = new XMLHttpRequest();\n xhr.responseType = 'json';\n xhr.open(\"GET\", PWORKER+\"fs/fs\"+name+\".js.metadata\", false); // synchronous request\n xhr.send(null);\n fsMeta[name] = xhr.response;\n console.log(\"Loaded \"+name+\" filesystem\", fsMeta[name].files.length, 'files', fsBlob[name].size, 'bytes');\n}\n\nvar loaded = {};\nexport function load(modulename:string, debug?:boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER+'asmjs/'+modulename+(debug?\".\"+debug+\".js\":\".js\"));\n loaded[modulename] = 1;\n }\n}\nexport function loadWASMBinary(modulename:string) {\n if (!loaded[modulename]) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER+\"wasm/\"+modulename+\".wasm\", false); // synchronous request\n xhr.send(null);\n if (xhr.response) {\n wasmBlob[modulename] = new Uint8Array(xhr.response);\n console.log(\"Loaded \" + modulename + \".wasm (\" + wasmBlob[modulename].length + \" bytes)\");\n loaded[modulename] = 1;\n } else {\n throw Error(\"Could not load WASM file \" + modulename + \".wasm\");\n }\n }\n return wasmBlob[modulename];\n}\nexport function loadWASM(modulename:string, debug?:boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER+\"wasm/\" + modulename+(debug?\".\"+debug+\".js\":\".js\"));\n loadWASMBinary(modulename);\n }\n}\nexport function loadNative(modulename:string) {\n // detect WASM\n if (CACHE_WASM_MODULES && typeof WebAssembly === 'object') {\n loadWASM(modulename);\n } else {\n load(modulename);\n }\n}\n\n// mount the filesystem at /share\nexport function setupFS(FS, name:string) {\n var WORKERFS = FS.filesystems['WORKERFS'];\n if (name === '65-vector') name = '65-none'; // TODO\n if (name === '65-atari7800') name = '65-none'; // TODO\n if (name === '65-devel') name = '65-none'; // TODO\n if (name === '65-vcs') name = '65-atari2600'; // TODO\n if (!fsMeta[name]) throw Error(\"No filesystem for '\" + name + \"'\");\n FS.mkdir('/share');\n FS.mount(WORKERFS, {\n packages: [{ metadata: fsMeta[name], blob: fsBlob[name] }]\n }, '/share');\n // fix for slow Blob operations by caching typed arrays\n // https://github.com/kripken/emscripten/blob/incoming/src/library_workerfs.js\n // https://bugs.chromium.org/p/chromium/issues/detail?id=349304#c30\n var reader = WORKERFS.reader;\n var blobcache = {};\n WORKERFS.stream_ops.read = function (stream, buffer, offset, length, position) {\n if (position >= stream.node.size) return 0;\n var contents = blobcache[stream.path];\n if (!contents) {\n var ab = reader.readAsArrayBuffer(stream.node.contents);\n contents = blobcache[stream.path] = new Uint8Array(ab);\n }\n if (position + length > contents.length)\n length = contents.length - position;\n for (var i=0; i<length; i++) {\n buffer[offset+i] = contents[position+i];\n }\n return length;\n };\n}\n\nexport var print_fn = function(s:string) {\n console.log(s);\n //console.log(new Error().stack);\n}\n\n// test.c(6) : warning 85: in function main unreferenced local variable : 'x'\n// main.a (4): error: Unknown Mnemonic 'xxx'.\n// at 2: warning 190: ISO C forbids an empty source file\nexport const re_msvc = /[/]*([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+?):\\s*(.*)/;\nexport const re_msvc2 = /\\s*(at)\\s+(\\d+)\\s*(:)\\s*(.*)/;\n\nexport function msvcErrorMatcher(errors:WorkerError[]) {\n return function(s:string) {\n var matches = re_msvc.exec(s) || re_msvc2.exec(s);\n if (matches) {\n var errline = parseInt(matches[2]);\n errors.push({\n line:errline,\n path:matches[1],\n //type:matches[3],\n msg:matches[4]\n });\n } else {\n console.log(s);\n }\n }\n}\n\nexport function makeErrorMatcher(errors:WorkerError[], regex, iline:number, imsg:number, mainpath:string, ifilename?:number) {\n return function(s) {\n var matches = regex.exec(s);\n if (matches) {\n errors.push({\n line:parseInt(matches[iline]) || 1,\n msg:matches[imsg],\n path:ifilename ? matches[ifilename] : mainpath\n });\n } else {\n console.log(\"??? \"+s);\n }\n }\n}\n\nexport function extractErrors(regex, strings:string[], path:string, iline, imsg, ifilename) {\n var errors = [];\n var matcher = makeErrorMatcher(errors, regex, iline, imsg, path, ifilename);\n for (var i=0; i<strings.length; i++) {\n matcher(strings[i]);\n }\n return errors;\n}\n\nexport const re_crlf = /\\r?\\n/;\n// 1 %line 16+1 hello.asm\nexport const re_lineoffset = /\\s*(\\d+)\\s+[%]line\\s+(\\d+)\\+(\\d+)\\s+(.+)/;\n\nexport function parseListing(code:string,\n lineMatch, iline:number, ioffset:number, iinsns:number, icycles?:number,\n funcMatch?, segMatch?) : SourceLine[] {\n var lines : SourceLine[] = [];\n var lineofs = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n code.split(re_crlf).forEach((line, lineindex) => {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1],16); func = funcm[2]; }\n\n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n var linenum = iline < 0 ? lineindex : parseInt(linem[iline]);\n var offset = parseInt(linem[ioffset], 16);\n var insns = linem[iinsns];\n var cycles : number = icycles ? parseInt(linem[icycles]) : null;\n var iscode = cycles > 0;\n if (insns) {\n lines.push({\n line: linenum + lineofs,\n offset: offset - funcbase,\n insns,\n cycles,\n iscode,\n segment,\n func\n });\n }\n } else {\n let m = re_lineoffset.exec(line);\n // TODO: check filename too\n if (m) {\n lineofs = parseInt(m[2]) - parseInt(m[1]) - parseInt(m[3]);\n }\n }\n });\n return lines;\n}\n\nexport function parseSourceLines(code:string, lineMatch, offsetMatch, funcMatch?, segMatch?) {\n var lines = [];\n var lastlinenum = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n for (var line of code.split(re_crlf)) {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1],16); func = funcm[2]; }\n \n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n lastlinenum = parseInt(linem[1]);\n } else if (lastlinenum) {\n var linem = offsetMatch.exec(line);\n if (linem && linem[1]) {\n var offset = parseInt(linem[1], 16);\n lines.push({\n line: lastlinenum,\n offset: offset - funcbase,\n segment,\n func\n });\n lastlinenum = 0;\n }\n }\n }\n return lines;\n}\n\nexport function setupStdin(fs, code:string) {\n var i = 0;\n fs.init(\n function() { return i<code.length ? code.charCodeAt(i++) : null; }\n );\n}\n\nexport function fixParamsWithDefines(path:string, params){\n var libargs = params.libargs;\n if (path && libargs) {\n var code = getWorkFileAsString(path);\n if (code) {\n var oldcfgfile = params.cfgfile;\n var ident2index = {};\n // find all lib args \"IDENT=VALUE\"\n for (var i=0; i<libargs.length; i++) {\n var toks = libargs[i].split('=');\n if (toks.length == 2) {\n ident2index[toks[0]] = i;\n }\n }\n // find #defines and replace them\n var re = /^[;]?#define\\s+(\\w+)\\s+(\\S+)/gmi; // TODO: empty string?\n var m;\n while (m = re.exec(code)) {\n var ident = m[1];\n var value = m[2];\n var index = ident2index[ident];\n if (index >= 0) {\n libargs[index] = ident + \"=\" + value;\n console.log('Using libargs', index, libargs[index]);\n // TODO: MMC3 mapper switch\n if (ident == 'NES_MAPPER' && value == '4') {\n params.cfgfile = 'nesbanked.cfg';\n console.log(\"using config file\", params.cfgfile);\n }\n } else if (ident == 'CFGFILE' && value) {\n params.cfgfile = value;\n } else if (ident == 'LIBARGS' && value) {\n params.libargs = value.split(',').filter((s) => { return s!=''; });\n console.log('Using libargs', params.libargs);\n } else if (ident == 'CC65_FLAGS' && value) {\n params.extra_compiler_args = value.split(',').filter((s) => { return s!=''; });\n console.log('Using compiler flags', params.extra_compiler_args);\n }\n }\n }\n }\n}\n\n\nfunction makeCPPSafe(s:string) : string {\n return s.replace(/[^A-Za-z0-9_]/g,'_');\n}\n\nexport function preprocessMCPP(step:BuildStep, filesys:string) {\n load(\"mcpp\");\n var platform = step.platform;\n var params = PLATFORM_PARAMS[getBasePlatform(platform)];\n if (!params) throw Error(\"Platform not supported: \" + platform);\n // <stdin>:2: error: Can't open include file \"foo.h\"\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /<stdin>:(\\d+): (.+)/, 1, 2, step.path);\n var MCPP : EmscriptenModule = emglobal.mcpp({\n noInitialRun:true,\n noFSInit:true,\n print:print_fn,\n printErr:match_fn,\n });\n var FS = MCPP.FS;\n if (filesys) setupFS(FS, filesys);\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n // TODO: make configurable by other compilers\n var args = [\n \"-D\", \"__8BITWORKSHOP__\",\n \"-D\", \"__SDCC_z80\",\n \"-D\", makeCPPSafe(platform.toUpperCase()),\n \"-I\", \"/share/include\",\n \"-Q\",\n step.path, \"main.i\"];\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n let platform_def = (platform.toUpperCase() as any).replaceAll(/[^a-zA-Z0-9]/g,'_');\n args.unshift.apply(args, [\"-D\", `__PLATFORM_${platform_def}__`]);\n if (params.extra_preproc_args) {\n args.push.apply(args, params.extra_preproc_args);\n }\n execMain(step, MCPP, args);\n if (errors.length)\n return {errors:errors};\n var iout = FS.readFile(\"main.i\", {encoding:'utf8'});\n iout = iout.replace(/^#line /gm,'\\n# ');\n try {\n var errout = FS.readFile(\"mcpp.err\", {encoding:'utf8'});\n if (errout.length) {\n // //main.c:2: error: Can't open include file \"stdiosd.h\"\n var errors = extractErrors(/([^:]+):(\\d+): (.+)/, errout.split(\"\\n\"), step.path, 2, 3, 1);\n if (errors.length == 0) {\n errors = errorResult(errout).errors;\n }\n return {errors: errors};\n }\n } catch (e) {\n //\n }\n return {code:iout};\n}\n\nexport function setupRequireFunction() {\n var exports = {};\n exports['jsdom'] = {\n JSDOM: function(a,b) {\n this.window = {};\n }\n };\n emglobal['require'] = (modname:string) => {\n console.log('require',modname,exports[modname]!=null);\n return exports[modname];\n }\n}\n\n////////////////////////////\n\nimport * as misc from './tools/misc'\nimport * as cc65 from './tools/cc65'\nimport * as dasm from './tools/dasm'\nimport * as sdcc from './tools/sdcc'\nimport * as verilog from './tools/verilog'\nimport * as m6809 from './tools/m6809'\nimport * as m6502 from './tools/m6502'\nimport * as z80 from './tools/z80'\nimport * as x86 from './tools/x86'\nimport * as arm from './tools/arm'\nimport * as ecs from './tools/ecs'\nimport * as remote from './tools/remote'\nimport * as acme from './tools/acme'\nimport * as cc7800 from './tools/cc7800'\n\nvar TOOLS = {\n 'dasm': dasm.assembleDASM,\n 'acme': acme.assembleACME,\n 'cc65': cc65.compileCC65,\n 'ca65': cc65.assembleCA65,\n 'ld65': cc65.linkLD65,\n //'z80asm': assembleZ80ASM,\n //'sccz80': compileSCCZ80,\n 'sdasz80': sdcc.assembleSDASZ80,\n 'sdldz80': sdcc.linkSDLDZ80,\n 'sdcc': sdcc.compileSDCC,\n 'xasm6809': m6809.assembleXASM6809,\n 'cmoc': m6809.compileCMOC,\n 'lwasm': m6809.assembleLWASM,\n 'lwlink': m6809.linkLWLINK,\n //'naken': assembleNAKEN,\n 'verilator': verilog.compileVerilator,\n 'yosys': verilog.compileYosys,\n 'jsasm': verilog.compileJSASMStep,\n 'zmac': z80.assembleZMAC,\n 'nesasm': m6502.assembleNESASM,\n 'smlrc': x86.compileSmallerC,\n 'yasm': x86.assembleYASM,\n 'bataribasic': dasm.compileBatariBasic,\n 'markdown': misc.translateShowdown,\n 'inform6': misc.compileInform6,\n 'merlin32': m6502.assembleMerlin32,\n 'fastbasic': m6502.compileFastBasic,\n 'basic': misc.compileBASIC,\n 'silice': verilog.compileSilice,\n 'wiz': misc.compileWiz,\n 'armips': arm.assembleARMIPS,\n 'vasmarm': arm.assembleVASMARM,\n 'ecs': ecs.assembleECS,\n 'remote': remote.buildRemote,\n 'cc7800': cc7800.compileCC7800,\n}\n\nvar TOOL_PRELOADFS = {\n 'cc65-apple2': '65-apple2',\n 'ca65-apple2': '65-apple2',\n 'cc65-c64': '65-c64',\n 'ca65-c64': '65-c64',\n 'cc65-vic20': '65-vic20',\n 'ca65-vic20': '65-vic20',\n 'cc65-nes': '65-nes',\n 'ca65-nes': '65-nes',\n 'cc65-atari8': '65-atari8',\n 'ca65-atari8': '65-atari8',\n 'cc65-vector': '65-none',\n 'ca65-vector': '65-none',\n 'cc65-atari7800': '65-none',\n 'ca65-atari7800': '65-none',\n 'cc65-devel': '65-none',\n 'ca65-devel': '65-none',\n 'cc65-vcs': '65-atari2600',\n 'ca65-vcs': '65-atari2600',\n 'cc65-pce': '65-pce',\n 'ca65-pce': '65-pce',\n 'sdasz80': 'sdcc',\n 'sdcc': 'sdcc',\n 'sccz80': 'sccz80',\n 'bataribasic': '2600basic',\n 'inform6': 'inform',\n 'fastbasic': '65-atari8',\n 'silice': 'Silice',\n 'wiz': 'wiz',\n 'ecs-vcs': '65-atari2600', // TODO: support multiple platforms\n 'ecs-nes': '65-nes', // TODO: support multiple platforms\n 'ecs-c64': '65-c64', // TODO: support multiple platforms\n}\n\n//const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay)); // for testing\n\nasync function handleMessage(data : WorkerMessage) : Promise<WorkerResult> {\n // preload file system\n if (data.preload) {\n var fs = TOOL_PRELOADFS[data.preload];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload+'-'+getBasePlatform(data.platform)];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload+'-'+getRootBasePlatform(data.platform)];\n if (fs && !fsMeta[fs])\n loadFilesystem(fs);\n return;\n }\n // clear filesystem? (TODO: buildkey)\n if (data.reset) {\n store.reset();\n return;\n }\n return builder.handleMessage(data);\n}\n\nif (ENVIRONMENT_IS_WORKER) {\n var lastpromise = null;\n onmessage = async function(e) {\n await lastpromise; // wait for previous message to complete\n lastpromise = handleMessage(e.data);\n var result = await lastpromise;\n lastpromise = null;\n if (result) {\n try {\n postMessage(result);\n } catch (e) {\n console.log(e);\n postMessage(errorResult(`${e}`));\n }\n }\n }\n}\n", "import path from 'path';\nimport { CodeListing, CodeListingMap, Segment } from \"../../common/workertypes\";\n\nexport function parseObjDump(lst: string) {\n // parse symbol map\n const lines = lst.split('\\n');\n const symbolmap = {};\n const segments : Segment[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith(\"Disassembly\")) break;\n if (line.startsWith('0')) {\n const parts = line.split(/\\s+/);\n if (parts.length < 5) continue;\n const symbol = parts[parts.length-1];\n const address = parseInt(parts[0], 16) & 0xffff; // TODO: 32-bit addresses\n symbolmap[symbol] = address;\n // is it a segment?\n if (symbol.startsWith('__')) {\n if (symbol.endsWith('_start')) {\n let name = symbol.substring(2, symbol.length - 6);\n let type = parts[2] == '.text' ? 'rom' : 'ram';\n segments.push({ name, start: address, size: 0, type })\n } else if (symbol.endsWith('_size')) {\n let name = symbol.substring(2, symbol.length - 5);\n let seg = segments.find(s => s.name === name);\n if (seg) seg.size = address;\n }\n }\n }\n }\n // parse listings\n const listings: CodeListingMap = {};\n var lastListing : CodeListing = null;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line.startsWith(';')) {\n const fileInfoIndex = line.indexOf(':');\n if (fileInfoIndex !== -1) {\n const fileInfo = line.substring(1).trim();\n const fileParts = fileInfo.split(':');\n const file = path.basename(fileParts[0].trim()).split('.')[0] + '.lst';\n const lineNumber = parseInt(fileParts[1], 10);\n if (lineNumber > 0) {\n if (!listings[file]) listings[file] = { lines: [], text: lst };\n lastListing = listings[file];\n lastListing.lines.push({ line: lineNumber, offset: null });\n }\n }\n } else if (lastListing && line.match(/^\\s*[A-F0-9]+:.+/i)) {\n const offsetIndex = line.indexOf(':');\n if (offsetIndex !== -1) {\n const offset = parseInt(line.substring(0, offsetIndex).trim(), 16) & 0xffff; // TODO: 32-bit addresses;\n lastListing.lines[lastListing.lines.length - 1].offset = offset;\n }\n }\n }\n return { listings, symbolmap, segments };\n}\n"],
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
"names": []
}