{"version":3,"file":"libcsound.mjs","sources":["../node_modules/comlink/dist/esm/comlink.mjs","../node_modules/rollup-plugin-node-polyfills/polyfills/global.js","../node_modules/rollup-plugin-node-polyfills/polyfills/process-es6.js","../node_modules/source-map/lib/base64.js","../node_modules/source-map/lib/base64-vlq.js","../node_modules/source-map/lib/util.js","../node_modules/source-map/lib/array-set.js","../node_modules/source-map/lib/mapping-list.js","../node_modules/source-map/lib/source-map-generator.js","../node_modules/source-map/lib/binary-search.js","../node_modules/source-map/lib/quick-sort.js","../node_modules/source-map/lib/source-map-consumer.js","../node_modules/source-map/lib/source-node.js","../node_modules/base64-js/index.js","../node_modules/source-map/source-map.js","../node_modules/get-source/impl/path.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/data-uri-to-buffer/index.js","../node_modules/rollup-plugin-node-polyfills/polyfills/empty.js","../node_modules/get-source/get-source.js","../node_modules/printable-characters/build/printable-characters.js","../node_modules/as-table/build/as-table.js","../node_modules/rollup-plugin-node-polyfills/polyfills/path.js","../node_modules/rollup-plugin-node-polyfills/polyfills/inherits.js","../node_modules/rollup-plugin-node-polyfills/polyfills/util.js","../node_modules/stacktracey/stacktracey.js","../node_modules/stacktracey/impl/partition.js","../node_modules/ansicolor/build/ansicolor.js","../node_modules/string.bullet/string.bullet.js","../node_modules/pipez/build/pipez.es5.js","../node_modules/string.ify/build/string.ify.js","../node_modules/ololog/build/ololog.js","../node_modules/browser-or-node/lib/index.js","../src/logger.js","../node_modules/ramda/es/internal/_isPlaceholder.js","../node_modules/ramda/es/internal/_curry1.js","../node_modules/ramda/es/internal/_curry2.js","../node_modules/ramda/es/internal/_arity.js","../node_modules/ramda/es/curryN.js","../node_modules/ramda/es/internal/_curryN.js","../node_modules/ramda/es/curry.js","../node_modules/ramda/es/internal/_isNumber.js","../node_modules/ramda/es/range.js","../src/modules/instantiation.js","../src/utils.js","../src/modules/performance.js","../src/structures.js","../src/modules/attributes.js","../src/modules/rtaudio.js","../src/modules/rtmidi.js","../src/modules/control-events.js","../src/modules/general-io.js","../src/modules/extra.js","../src/libcsound.js","../src/constants.js","../src/mains/messages.main.js","../src/mains/vanilla.main.js","../node_modules/unmute-ios-audio/index.js","../src/mains/sab.main.js","../src/mains/worklet.main.js","../src/mains/old-spn.main.js","../src/index.js"],"sourcesContent":["/**\r\n * Copyright 2019 Google Inc. All Rights Reserved.\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst proxyMarker = Symbol(\"Comlink.proxy\");\r\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\r\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\r\nconst throwMarker = Symbol(\"Comlink.thrown\");\r\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\r\n/**\r\n * Internal transfer handle to handle objects marked to proxy.\r\n */\r\nconst proxyTransferHandler = {\r\n    canHandle: (val) => isObject(val) && val[proxyMarker],\r\n    serialize(obj) {\r\n        const { port1, port2 } = new MessageChannel();\r\n        expose(obj, port1);\r\n        return [port2, [port2]];\r\n    },\r\n    deserialize(port) {\r\n        port.start();\r\n        return wrap(port);\r\n    },\r\n};\r\n/**\r\n * Internal transfer handler to handle thrown exceptions.\r\n */\r\nconst throwTransferHandler = {\r\n    canHandle: (value) => isObject(value) && throwMarker in value,\r\n    serialize({ value }) {\r\n        let serialized;\r\n        if (value instanceof Error) {\r\n            serialized = {\r\n                isError: true,\r\n                value: {\r\n                    message: value.message,\r\n                    name: value.name,\r\n                    stack: value.stack,\r\n                },\r\n            };\r\n        }\r\n        else {\r\n            serialized = { isError: false, value };\r\n        }\r\n        return [serialized, []];\r\n    },\r\n    deserialize(serialized) {\r\n        if (serialized.isError) {\r\n            throw Object.assign(new Error(serialized.value.message), serialized.value);\r\n        }\r\n        throw serialized.value;\r\n    },\r\n};\r\n/**\r\n * Allows customizing the serialization of certain values.\r\n */\r\nconst transferHandlers = new Map([\r\n    [\"proxy\", proxyTransferHandler],\r\n    [\"throw\", throwTransferHandler],\r\n]);\r\nfunction expose(obj, ep = self) {\r\n    ep.addEventListener(\"message\", function callback(ev) {\r\n        if (!ev || !ev.data) {\r\n            return;\r\n        }\r\n        const { id, type, path } = Object.assign({ path: [] }, ev.data);\r\n        const argumentList = (ev.data.argumentList || []).map(fromWireValue);\r\n        let returnValue;\r\n        try {\r\n            const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\r\n            const rawValue = path.reduce((obj, prop) => obj[prop], obj);\r\n            switch (type) {\r\n                case 0 /* GET */:\r\n                    {\r\n                        returnValue = rawValue;\r\n                    }\r\n                    break;\r\n                case 1 /* SET */:\r\n                    {\r\n                        parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\r\n                        returnValue = true;\r\n                    }\r\n                    break;\r\n                case 2 /* APPLY */:\r\n                    {\r\n                        returnValue = rawValue.apply(parent, argumentList);\r\n                    }\r\n                    break;\r\n                case 3 /* CONSTRUCT */:\r\n                    {\r\n                        const value = new rawValue(...argumentList);\r\n                        returnValue = proxy(value);\r\n                    }\r\n                    break;\r\n                case 4 /* ENDPOINT */:\r\n                    {\r\n                        const { port1, port2 } = new MessageChannel();\r\n                        expose(obj, port2);\r\n                        returnValue = transfer(port1, [port1]);\r\n                    }\r\n                    break;\r\n                case 5 /* RELEASE */:\r\n                    {\r\n                        returnValue = undefined;\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n        catch (value) {\r\n            returnValue = { value, [throwMarker]: 0 };\r\n        }\r\n        Promise.resolve(returnValue)\r\n            .catch((value) => {\r\n            return { value, [throwMarker]: 0 };\r\n        })\r\n            .then((returnValue) => {\r\n            const [wireValue, transferables] = toWireValue(returnValue);\r\n            ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\r\n            if (type === 5 /* RELEASE */) {\r\n                // detach and deactive after sending release response above.\r\n                ep.removeEventListener(\"message\", callback);\r\n                closeEndPoint(ep);\r\n            }\r\n        });\r\n    });\r\n    if (ep.start) {\r\n        ep.start();\r\n    }\r\n}\r\nfunction isMessagePort(endpoint) {\r\n    return endpoint.constructor.name === \"MessagePort\";\r\n}\r\nfunction closeEndPoint(endpoint) {\r\n    if (isMessagePort(endpoint))\r\n        endpoint.close();\r\n}\r\nfunction wrap(ep, target) {\r\n    return createProxy(ep, [], target);\r\n}\r\nfunction throwIfProxyReleased(isReleased) {\r\n    if (isReleased) {\r\n        throw new Error(\"Proxy has been released and is not useable\");\r\n    }\r\n}\r\nfunction createProxy(ep, path = [], target = function () { }) {\r\n    let isProxyReleased = false;\r\n    const proxy = new Proxy(target, {\r\n        get(_target, prop) {\r\n            throwIfProxyReleased(isProxyReleased);\r\n            if (prop === releaseProxy) {\r\n                return () => {\r\n                    return requestResponseMessage(ep, {\r\n                        type: 5 /* RELEASE */,\r\n                        path: path.map((p) => p.toString()),\r\n                    }).then(() => {\r\n                        closeEndPoint(ep);\r\n                        isProxyReleased = true;\r\n                    });\r\n                };\r\n            }\r\n            if (prop === \"then\") {\r\n                if (path.length === 0) {\r\n                    return { then: () => proxy };\r\n                }\r\n                const r = requestResponseMessage(ep, {\r\n                    type: 0 /* GET */,\r\n                    path: path.map((p) => p.toString()),\r\n                }).then(fromWireValue);\r\n                return r.then.bind(r);\r\n            }\r\n            return createProxy(ep, [...path, prop]);\r\n        },\r\n        set(_target, prop, rawValue) {\r\n            throwIfProxyReleased(isProxyReleased);\r\n            // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\r\n            // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\r\n            const [value, transferables] = toWireValue(rawValue);\r\n            return requestResponseMessage(ep, {\r\n                type: 1 /* SET */,\r\n                path: [...path, prop].map((p) => p.toString()),\r\n                value,\r\n            }, transferables).then(fromWireValue);\r\n        },\r\n        apply(_target, _thisArg, rawArgumentList) {\r\n            throwIfProxyReleased(isProxyReleased);\r\n            const last = path[path.length - 1];\r\n            if (last === createEndpoint) {\r\n                return requestResponseMessage(ep, {\r\n                    type: 4 /* ENDPOINT */,\r\n                }).then(fromWireValue);\r\n            }\r\n            // We just pretend that `bind()` didn’t happen.\r\n            if (last === \"bind\") {\r\n                return createProxy(ep, path.slice(0, -1));\r\n            }\r\n            const [argumentList, transferables] = processArguments(rawArgumentList);\r\n            return requestResponseMessage(ep, {\r\n                type: 2 /* APPLY */,\r\n                path: path.map((p) => p.toString()),\r\n                argumentList,\r\n            }, transferables).then(fromWireValue);\r\n        },\r\n        construct(_target, rawArgumentList) {\r\n            throwIfProxyReleased(isProxyReleased);\r\n            const [argumentList, transferables] = processArguments(rawArgumentList);\r\n            return requestResponseMessage(ep, {\r\n                type: 3 /* CONSTRUCT */,\r\n                path: path.map((p) => p.toString()),\r\n                argumentList,\r\n            }, transferables).then(fromWireValue);\r\n        },\r\n    });\r\n    return proxy;\r\n}\r\nfunction myFlat(arr) {\r\n    return Array.prototype.concat.apply([], arr);\r\n}\r\nfunction processArguments(argumentList) {\r\n    const processed = argumentList.map(toWireValue);\r\n    return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\r\n}\r\nconst transferCache = new WeakMap();\r\nfunction transfer(obj, transfers) {\r\n    transferCache.set(obj, transfers);\r\n    return obj;\r\n}\r\nfunction proxy(obj) {\r\n    return Object.assign(obj, { [proxyMarker]: true });\r\n}\r\nfunction windowEndpoint(w, context = self, targetOrigin = \"*\") {\r\n    return {\r\n        postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\r\n        addEventListener: context.addEventListener.bind(context),\r\n        removeEventListener: context.removeEventListener.bind(context),\r\n    };\r\n}\r\nfunction toWireValue(value) {\r\n    for (const [name, handler] of transferHandlers) {\r\n        if (handler.canHandle(value)) {\r\n            const [serializedValue, transferables] = handler.serialize(value);\r\n            return [\r\n                {\r\n                    type: 3 /* HANDLER */,\r\n                    name,\r\n                    value: serializedValue,\r\n                },\r\n                transferables,\r\n            ];\r\n        }\r\n    }\r\n    return [\r\n        {\r\n            type: 0 /* RAW */,\r\n            value,\r\n        },\r\n        transferCache.get(value) || [],\r\n    ];\r\n}\r\nfunction fromWireValue(value) {\r\n    switch (value.type) {\r\n        case 3 /* HANDLER */:\r\n            return transferHandlers.get(value.name).deserialize(value.value);\r\n        case 0 /* RAW */:\r\n            return value.value;\r\n    }\r\n}\r\nfunction requestResponseMessage(ep, msg, transfers) {\r\n    return new Promise((resolve) => {\r\n        const id = generateUUID();\r\n        ep.addEventListener(\"message\", function l(ev) {\r\n            if (!ev.data || !ev.data.id || ev.data.id !== id) {\r\n                return;\r\n            }\r\n            ep.removeEventListener(\"message\", l);\r\n            resolve(ev.data);\r\n        });\r\n        if (ep.start) {\r\n            ep.start();\r\n        }\r\n        ep.postMessage(Object.assign({ id }, msg), transfers);\r\n    });\r\n}\r\nfunction generateUUID() {\r\n    return new Array(4)\r\n        .fill(0)\r\n        .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\r\n        .join(\"-\");\r\n}\n\nexport { createEndpoint, expose, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","export default (typeof global !== \"undefined\" ? global :\n  typeof self !== \"undefined\" ? self :\n  typeof window !== \"undefined\" ? window : {});","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n    cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n    cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nvar title = 'browser';\nvar platform = 'browser';\nvar browser = true;\nvar env = {};\nvar argv = [];\nvar version = ''; // empty string to avoid regexp issues\nvar versions = {};\nvar release = {};\nvar config = {};\n\nfunction noop() {}\n\nvar on = noop;\nvar addListener = noop;\nvar once = noop;\nvar off = noop;\nvar removeListener = noop;\nvar removeAllListeners = noop;\nvar emit = noop;\n\nfunction binding(name) {\n    throw new Error('process.binding is not supported');\n}\n\nfunction cwd () { return '/' }\nfunction chdir (dir) {\n    throw new Error('process.chdir is not supported');\n}function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {};\nvar performanceNow =\n  performance.now        ||\n  performance.mozNow     ||\n  performance.msNow      ||\n  performance.oNow       ||\n  performance.webkitNow  ||\n  function(){ return (new Date()).getTime() };\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n  var clocktime = performanceNow.call(performance)*1e-3;\n  var seconds = Math.floor(clocktime);\n  var nanoseconds = Math.floor((clocktime%1)*1e9);\n  if (previousTimestamp) {\n    seconds = seconds - previousTimestamp[0];\n    nanoseconds = nanoseconds - previousTimestamp[1];\n    if (nanoseconds<0) {\n      seconds--;\n      nanoseconds += 1e9;\n    }\n  }\n  return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nfunction uptime() {\n  var currentTime = new Date();\n  var dif = currentTime - startTime;\n  return dif / 1000;\n}\n\nvar browser$1 = {\n  nextTick: nextTick,\n  title: title,\n  browser: browser,\n  env: env,\n  argv: argv,\n  version: version,\n  versions: versions,\n  on: on,\n  addListener: addListener,\n  once: once,\n  off: off,\n  removeListener: removeListener,\n  removeAllListeners: removeAllListeners,\n  emit: emit,\n  binding: binding,\n  cwd: cwd,\n  chdir: chdir,\n  umask: umask,\n  hrtime: hrtime,\n  platform: platform,\n  release: release,\n  config: config,\n  uptime: uptime\n};\n\nexport default browser$1;\nexport { addListener, argv, binding, browser, chdir, config, cwd, emit, env, hrtime, nextTick, off, on, once, platform, release, removeAllListeners, removeListener, title, umask, uptime, version, versions };\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nconst isBrowser = (typeof window !== 'undefined') && (window.window === window) && window.navigator\nconst cwd = isBrowser ? window.location.href : process.cwd ()\n\nconst urlRegexp = new RegExp (\"^((https|http)://)?[a-z0-9A-Z]{3}\\.[a-z0-9A-Z][a-z0-9A-Z]{0,61}?[a-z0-9A-Z]\\.com|net|cn|cc (:s[0-9]{1-4})?/$\")\n\n/*  ------------------------------------------------------------------------ */\n\nconst path = module.exports = {\n\n    concat (a, b) {\n\n        const a_endsWithSlash = (a[a.length - 1] === '/'),\n              b_startsWithSlash = (b[0] === '/')\n\n        return a + ((a_endsWithSlash || b_startsWithSlash) ? '' : '/') +\n                   ((a_endsWithSlash && b_startsWithSlash) ? b.substring (1) : b)\n    },\n\n    resolve (x) {\n\n        if (path.isAbsolute (x)) {\n            return path.normalize (x) }\n\n        return path.normalize (path.concat (cwd, x))\n    },\n\n    normalize (x) {\n\n        let output = [],\n            skip = 0\n\n        x.split ('/').reverse ().filter (x => x !== '.').forEach (x => {\n\n                 if (x === '..') { skip++ }\n            else if (skip === 0) { output.push (x) }\n            else                 { skip-- }\n        })\n\n        const result = output.reverse ().join ('/')\n\n        return ((isBrowser && (result[0] === '/')) ? window.location.origin : '') + result\n    },\n\n    isData: x => x.indexOf ('data:') === 0,\n\n    isURL: x => urlRegexp.test (x),\n\n    isAbsolute: x => (x[0] === '/') || /^[^\\/]*:/.test (x),\n\n    relativeToFile (a, b) {\n\n        return (path.isData (a) || path.isAbsolute (b)) ?\n                    path.normalize (b) :\n                    path.normalize (path.concat (a.split ('/').slice (0, -1).join ('/'), b))\n    }\n}\n\n/*  ------------------------------------------------------------------------ */\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol.for === 'function')\n    ? Symbol.for('nodejs.util.inspect.custom')\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    var proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayLike(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      buf = Buffer.from(buf)\n    }\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n        : (firstByte > 0xBF) ? 2\n          : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (var i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n","'use strict';\n\n/**\n * Module exports.\n */\n\nmodule.exports = dataUriToBuffer;\n\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @return {Buffer} Buffer instance from Data URI\n * @api public\n */\n\nfunction dataUriToBuffer(uri) {\n  if (!/^data\\:/i.test(uri)) {\n    throw new TypeError(\n      '`uri` does not appear to be a Data URI (must begin with \"data:\")'\n    );\n  }\n\n  // strip newlines\n  uri = uri.replace(/\\r?\\n/g, '');\n\n  // split the URI up into the \"metadata\" and the \"data\" portions\n  var firstComma = uri.indexOf(',');\n  if (-1 === firstComma || firstComma <= 4) {\n    throw new TypeError('malformed data: URI');\n  }\n\n  // remove the \"data:\" scheme and parse the metadata\n  var meta = uri.substring(5, firstComma).split(';');\n\n  var type = meta[0] || 'text/plain';\n  var typeFull = type;\n  var base64 = false;\n  var charset = '';\n  for (var i = 1; i < meta.length; i++) {\n    if ('base64' == meta[i]) {\n      base64 = true;\n    } else {\n      typeFull += ';' + meta[i];\n      if (0 == meta[i].indexOf('charset=')) {\n        charset = meta[i].substring(8);\n      }\n    }\n  }\n  // defaults to US-ASCII only if type is not provided\n  if (!meta[0] && !charset.length) {\n    typeFull += ';charset=US-ASCII';\n    charset = 'US-ASCII';\n  }\n\n  // get the encoded data portion and decode URI-encoded chars\n  var data = unescape(uri.substring(firstComma + 1));\n\n  var encoding = base64 ? 'base64' : 'ascii';\n  var buffer = Buffer.from ? Buffer.from(data, encoding) : new Buffer(data, encoding);\n\n  // set `.type` and `.typeFull` properties to MIME type\n  buffer.type = type;\n  buffer.typeFull = typeFull;\n\n  // set the `.charset` property\n  buffer.charset = charset;\n\n  return buffer;\n}\n","export default {};\n","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nconst O                 = Object,\n      isBrowser         = (typeof window !== 'undefined') && (window.window === window) && window.navigator,\n      SourceMapConsumer = require ('source-map').SourceMapConsumer,\n      path              = require ('./impl/path'),\n      isURL             = path.isURL,\n      dataURIToBuffer   = require ('data-uri-to-buffer')\n\n/*  ------------------------------------------------------------------------ */\n\nconst memoize = f => {\n\n    const m = x => (x in m.cache) ? m.cache[x] : (m.cache[x] = f(x))\n    m.forgetEverything = () => { m.cache = Object.create (null) }\n    m.cache = Object.create (null)\n\n    return m\n}\n\n/*  ------------------------------------------------------------------------ */\n\nconst newSourceFileMemoized = memoize (file => new SourceFile (file))\n\nconst getSource = module.exports = file => { return newSourceFileMemoized (path.resolve (file)) }\n\ngetSource.resetCache = () => newSourceFileMemoized.forgetEverything ()\ngetSource.getCache = () => newSourceFileMemoized.cache\n\n/*  ------------------------------------------------------------------------ */\n\nclass SourceMap {\n\n    constructor (originalFilePath, sourceMapPath) {\n\n        this.file = sourceMapPath.startsWith ('data:')\n                        ? new SourceFile (originalFilePath, dataURIToBuffer (sourceMapPath).toString ())\n                        : getSource (path.relativeToFile (originalFilePath, sourceMapPath))\n\n        this.parsed    = (this.file.text && SourceMapConsumer (JSON.parse (this.file.text))) || null\n        this.sourceFor = memoize (this.sourceFor.bind (this))\n    }\n\n    sourceFor (file) {\n        const content = this.parsed.sourceContentFor (file, true /* return null on missing */)\n        const fullPath = path.relativeToFile (this.file.path, file)\n        return content ? new SourceFile (fullPath, content) : getSource (fullPath)\n    }\n\n    resolve (loc) {\n\n        const originalLoc = this.parsed.originalPositionFor (loc)\n        return originalLoc.source ? this.sourceFor (originalLoc.source)\n                                        .resolve (O.assign ({}, loc, {\n                                            line:   originalLoc.line,\n                                            column: originalLoc.column + 1,\n                                            name:   originalLoc.name\n                                        }))\n                                  : loc\n    }\n}\n\n/*  ------------------------------------------------------------------------ */\n\nclass SourceFile {\n\n    constructor (path, text /* optional */) {\n\n        this.path = path\n\n        if (text) {\n            this.text = text\n\n        } else {\n\n            try {\n                if (isBrowser) {\n\n                    let xhr = new XMLHttpRequest ()\n\n                        xhr.open ('GET', path, false /* SYNCHRONOUS XHR FTW :) */)\n                        xhr.send (null)\n\n                    this.text = xhr.responseText\n\n                } else {\n\n                    this.text = module.require ('fs').readFileSync (path, { encoding: 'utf8' })\n                      \n//                     this.text = isURL (path)\n//                                     ? module.require ('child_process').execSync (`curl ${path}`).toString ('UTF8')\n//                                     : module.require ('fs').readFileSync (path, { encoding: 'utf8' })\n                }\n\n            } catch (e) {\n                this.error = e\n                this.text = ''\n            }\n        }\n    }\n\n    get lines () {\n        return (this.lines_ = this.lines_ || this.text.split ('\\n'))\n    }\n\n    get sourceMap () {\n\n        try {\n\n            if (this.sourceMap_ === undefined) {\n\n                /*  Extract the last sourceMap occurence (TODO: support multiple sourcemaps)   */\n\n                const re = /\\u0023 sourceMappingURL=(.+)\\n?/g\n                let lastMatch = undefined\n\n                while (true) {\n                    const match = re.exec (this.text)\n                    if (match) lastMatch = match\n                    else break\n                }\n\n                const url = lastMatch && lastMatch[1]\n\n                if (url) {\n\n                    const sourceMap = new SourceMap (this.path, url)\n\n                    if (sourceMap.parsed) {\n                        this.sourceMap_ = sourceMap\n                    }\n\n                } else {\n\n                    this.sourceMap_ = null\n                }\n            }\n        }\n\n        catch (e) {\n            this.sourceMap_ = null\n            this.sourceMapError = e\n        }\n\n        return this.sourceMap_\n    }\n\n    resolve (loc /* { line[, column] } */) /* → { line, column, sourceFile, sourceLine } */ {\n\n        if (this.sourceMap) {\n            const newLoc = this.sourceMap.resolve (loc)\n            if (newLoc.sourceFile) return newLoc\n        }\n\n        return O.assign ({}, loc, {\n\n            sourceFile:  this,\n            sourceLine: (this.lines[loc.line - 1] || ''),\n            error:       this.error\n        })\n    }\n}\n\n/*  ------------------------------------------------------------------------ */\n","\"use strict\";\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nconst ansiEscapeCode = '[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]',\n      zeroWidthCharacterExceptNewline = '\\u0000-\\u0008\\u000B-\\u0019\\u001b\\u009b\\u00ad\\u200b\\u2028\\u2029\\ufeff\\ufe00-\\ufe0f',\n      zeroWidthCharacter = '\\n' + zeroWidthCharacterExceptNewline,\n      zeroWidthCharactersExceptNewline = new RegExp('(?:' + ansiEscapeCode + ')|[' + zeroWidthCharacterExceptNewline + ']', 'g'),\n      zeroWidthCharacters = new RegExp('(?:' + ansiEscapeCode + ')|[' + zeroWidthCharacter + ']', 'g'),\n      partition = new RegExp('((?:' + ansiEscapeCode + ')|[\\t' + zeroWidthCharacter + '])?([^\\t' + zeroWidthCharacter + ']*)', 'g');\n\nmodule.exports = {\n\n    zeroWidthCharacters,\n\n    ansiEscapeCodes: new RegExp(ansiEscapeCode, 'g'),\n\n    strlen: s => Array.from(s.replace(zeroWidthCharacters, '')).length, // Array.from solves the emoji problem as described here: http://blog.jonnew.com/posts/poo-dot-length-equals-two\n\n    isBlank: s => s.replace(zeroWidthCharacters, '').replace(/\\s/g, '').length === 0,\n\n    blank: s => Array.from(s.replace(zeroWidthCharactersExceptNewline, '')) // Array.from solves the emoji problem as described here: http://blog.jonnew.com/posts/poo-dot-length-equals-two\n    .map(x => x === '\\t' || x === '\\n' ? x : ' ').join(''),\n\n    partition(s) {\n        for (var m, spans = []; partition.lastIndex !== s.length && (m = partition.exec(s));) {\n            spans.push([m[1] || '', m[2]]);\n        }\n        partition.lastIndex = 0; // reset\n        return spans;\n    },\n\n    first(s, n) {\n\n        let result = '',\n            length = 0;\n\n        for (const _ref of module.exports.partition(s)) {\n            var _ref2 = _slicedToArray(_ref, 2);\n\n            const nonPrintable = _ref2[0];\n            const printable = _ref2[1];\n\n            const text = Array.from(printable).slice(0, n - length); // Array.from solves the emoji problem as described here: http://blog.jonnew.com/posts/poo-dot-length-equals-two\n            result += nonPrintable + text.join('');\n            length += text.length;\n        }\n\n        return result;\n    }\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3ByaW50YWJsZS1jaGFyYWN0ZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0FBRUEsTUFBTSxpQkFBbUMsNEVBQXpDO0FBQUEsTUFDTSxrQ0FBbUMsbUZBRHpDO0FBQUEsTUFFTSxxQkFBbUMsT0FBTywrQkFGaEQ7QUFBQSxNQUdNLG1DQUFtQyxJQUFJLE1BQUosQ0FBWSxRQUFRLGNBQVIsR0FBeUIsS0FBekIsR0FBaUMsK0JBQWpDLEdBQW1FLEdBQS9FLEVBQW9GLEdBQXBGLENBSHpDO0FBQUEsTUFJTSxzQkFBbUMsSUFBSSxNQUFKLENBQVksUUFBUSxjQUFSLEdBQXlCLEtBQXpCLEdBQWlDLGtCQUFqQyxHQUFzRCxHQUFsRSxFQUF1RSxHQUF2RSxDQUp6QztBQUFBLE1BS00sWUFBbUMsSUFBSSxNQUFKLENBQVksU0FBUyxjQUFULEdBQTBCLE9BQTFCLEdBQW9DLGtCQUFwQyxHQUF5RCxVQUF6RCxHQUFzRSxrQkFBdEUsR0FBMkYsS0FBdkcsRUFBOEcsR0FBOUcsQ0FMekM7O0FBT0EsT0FBTyxPQUFQLEdBQWlCOztBQUViLHVCQUZhOztBQUliLHFCQUFpQixJQUFJLE1BQUosQ0FBWSxjQUFaLEVBQTRCLEdBQTVCLENBSko7O0FBTWIsWUFBUSxLQUFLLE1BQU0sSUFBTixDQUFZLEVBQUUsT0FBRixDQUFXLG1CQUFYLEVBQWdDLEVBQWhDLENBQVosRUFBaUQsTUFOakQsRUFNeUQ7O0FBRXRFLGFBQVMsS0FBSyxFQUFFLE9BQUYsQ0FBVyxtQkFBWCxFQUFnQyxFQUFoQyxFQUNFLE9BREYsQ0FDVyxLQURYLEVBQ2tCLEVBRGxCLEVBRUUsTUFGRixLQUVhLENBVmQ7O0FBWWIsV0FBTyxLQUFLLE1BQU0sSUFBTixDQUFZLEVBQUUsT0FBRixDQUFXLGdDQUFYLEVBQTZDLEVBQTdDLENBQVosRUFBOEQ7QUFBOUQsS0FDTSxHQUROLENBQ1csS0FBTyxNQUFNLElBQVAsSUFBaUIsTUFBTSxJQUF4QixHQUFpQyxDQUFqQyxHQUFxQyxHQURyRCxFQUVNLElBRk4sQ0FFWSxFQUZaLENBWkM7O0FBZ0JiLGNBQVcsQ0FBWCxFQUFjO0FBQ1YsYUFBSyxJQUFJLENBQUosRUFBTyxRQUFRLEVBQXBCLEVBQXlCLFVBQVUsU0FBVixLQUF3QixFQUFFLE1BQTNCLEtBQXVDLElBQUksVUFBVSxJQUFWLENBQWdCLENBQWhCLENBQTNDLENBQXhCLEdBQXlGO0FBQUUsa0JBQU0sSUFBTixDQUFZLENBQUMsRUFBRSxDQUFGLEtBQVEsRUFBVCxFQUFhLEVBQUUsQ0FBRixDQUFiLENBQVo7QUFBaUM7QUFDNUgsa0JBQVUsU0FBVixHQUFzQixDQUF0QixDQUZVLENBRWM7QUFDeEIsZUFBTyxLQUFQO0FBQ0gsS0FwQlk7O0FBc0JiLFVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYTs7QUFFVCxZQUFJLFNBQVMsRUFBYjtBQUFBLFlBQWlCLFNBQVMsQ0FBMUI7O0FBRUEsMkJBQXdDLE9BQU8sT0FBUCxDQUFlLFNBQWYsQ0FBMEIsQ0FBMUIsQ0FBeEMsRUFBc0U7QUFBQTs7QUFBQSxrQkFBMUQsWUFBMEQ7QUFBQSxrQkFBNUMsU0FBNEM7O0FBQ2xFLGtCQUFNLE9BQU8sTUFBTSxJQUFOLENBQVksU0FBWixFQUF1QixLQUF2QixDQUE4QixDQUE5QixFQUFpQyxJQUFJLE1BQXJDLENBQWIsQ0FEa0UsQ0FDUjtBQUMxRCxzQkFBVSxlQUFlLEtBQUssSUFBTCxDQUFXLEVBQVgsQ0FBekI7QUFDQSxzQkFBVSxLQUFLLE1BQWY7QUFDSDs7QUFFRCxlQUFPLE1BQVA7QUFDSDtBQWpDWSxDQUFqQiIsImZpbGUiOiJwcmludGFibGUtY2hhcmFjdGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBhbnNpRXNjYXBlQ29kZSAgICAgICAgICAgICAgICAgICA9ICdbXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLVBSWmNmLW5xcnk9PjxdJ1xuICAgICwgemVyb1dpZHRoQ2hhcmFjdGVyRXhjZXB0TmV3bGluZSAgPSAnXFx1MDAwMC1cXHUwMDA4XFx1MDAwQi1cXHUwMDE5XFx1MDAxYlxcdTAwOWJcXHUwMGFkXFx1MjAwYlxcdTIwMjhcXHUyMDI5XFx1ZmVmZlxcdWZlMDAtXFx1ZmUwZidcbiAgICAsIHplcm9XaWR0aENoYXJhY3RlciAgICAgICAgICAgICAgID0gJ1xcbicgKyB6ZXJvV2lkdGhDaGFyYWN0ZXJFeGNlcHROZXdsaW5lXG4gICAgLCB6ZXJvV2lkdGhDaGFyYWN0ZXJzRXhjZXB0TmV3bGluZSA9IG5ldyBSZWdFeHAgKCcoPzonICsgYW5zaUVzY2FwZUNvZGUgKyAnKXxbJyArIHplcm9XaWR0aENoYXJhY3RlckV4Y2VwdE5ld2xpbmUgKyAnXScsICdnJylcbiAgICAsIHplcm9XaWR0aENoYXJhY3RlcnMgICAgICAgICAgICAgID0gbmV3IFJlZ0V4cCAoJyg/OicgKyBhbnNpRXNjYXBlQ29kZSArICcpfFsnICsgemVyb1dpZHRoQ2hhcmFjdGVyICsgJ10nLCAnZycpXG4gICAgLCBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICA9IG5ldyBSZWdFeHAgKCcoKD86JyArIGFuc2lFc2NhcGVDb2RlICsgJyl8W1xcdCcgKyB6ZXJvV2lkdGhDaGFyYWN0ZXIgKyAnXSk/KFteXFx0JyArIHplcm9XaWR0aENoYXJhY3RlciArICddKiknLCAnZycpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgemVyb1dpZHRoQ2hhcmFjdGVycyxcblxuICAgIGFuc2lFc2NhcGVDb2RlczogbmV3IFJlZ0V4cCAoYW5zaUVzY2FwZUNvZGUsICdnJyksXG5cbiAgICBzdHJsZW46IHMgPT4gQXJyYXkuZnJvbSAocy5yZXBsYWNlICh6ZXJvV2lkdGhDaGFyYWN0ZXJzLCAnJykpLmxlbmd0aCwgLy8gQXJyYXkuZnJvbSBzb2x2ZXMgdGhlIGVtb2ppIHByb2JsZW0gYXMgZGVzY3JpYmVkIGhlcmU6IGh0dHA6Ly9ibG9nLmpvbm5ldy5jb20vcG9zdHMvcG9vLWRvdC1sZW5ndGgtZXF1YWxzLXR3b1xuXG4gICAgaXNCbGFuazogcyA9PiBzLnJlcGxhY2UgKHplcm9XaWR0aENoYXJhY3RlcnMsICcnKVxuICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlICgvXFxzL2csICcnKVxuICAgICAgICAgICAgICAgICAgIC5sZW5ndGggPT09IDAsXG5cbiAgICBibGFuazogcyA9PiBBcnJheS5mcm9tIChzLnJlcGxhY2UgKHplcm9XaWR0aENoYXJhY3RlcnNFeGNlcHROZXdsaW5lLCAnJykpIC8vIEFycmF5LmZyb20gc29sdmVzIHRoZSBlbW9qaSBwcm9ibGVtIGFzIGRlc2NyaWJlZCBoZXJlOiBodHRwOi8vYmxvZy5qb25uZXcuY29tL3Bvc3RzL3Bvby1kb3QtbGVuZ3RoLWVxdWFscy10d29cbiAgICAgICAgICAgICAgICAgICAgIC5tYXAgKHggPT4gKCh4ID09PSAnXFx0JykgfHwgKHggPT09ICdcXG4nKSkgPyB4IDogJyAnKVxuICAgICAgICAgICAgICAgICAgICAgLmpvaW4gKCcnKSxcblxuICAgIHBhcnRpdGlvbiAocykge1xuICAgICAgICBmb3IgKHZhciBtLCBzcGFucyA9IFtdOyAocGFydGl0aW9uLmxhc3RJbmRleCAhPT0gcy5sZW5ndGgpICYmIChtID0gcGFydGl0aW9uLmV4ZWMgKHMpKTspIHsgc3BhbnMucHVzaCAoW21bMV0gfHwgJycsIG1bMl1dKSB9XG4gICAgICAgIHBhcnRpdGlvbi5sYXN0SW5kZXggPSAwIC8vIHJlc2V0XG4gICAgICAgIHJldHVybiBzcGFuc1xuICAgIH0sXG5cbiAgICBmaXJzdCAocywgbikge1xuXG4gICAgICAgIGxldCByZXN1bHQgPSAnJywgbGVuZ3RoID0gMFxuXG4gICAgICAgIGZvciAoY29uc3QgW25vblByaW50YWJsZSwgcHJpbnRhYmxlXSBvZiBtb2R1bGUuZXhwb3J0cy5wYXJ0aXRpb24gKHMpKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gQXJyYXkuZnJvbSAocHJpbnRhYmxlKS5zbGljZSAoMCwgbiAtIGxlbmd0aCkgLy8gQXJyYXkuZnJvbSBzb2x2ZXMgdGhlIGVtb2ppIHByb2JsZW0gYXMgZGVzY3JpYmVkIGhlcmU6IGh0dHA6Ly9ibG9nLmpvbm5ldy5jb20vcG9zdHMvcG9vLWRvdC1sZW5ndGgtZXF1YWxzLXR3b1xuICAgICAgICAgICAgcmVzdWx0ICs9IG5vblByaW50YWJsZSArIHRleHQuam9pbiAoJycpXG4gICAgICAgICAgICBsZW5ndGggKz0gdGV4dC5sZW5ndGhcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG59Il19","\"use strict\";\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\nconst O = Object;\n\nvar _require = require('printable-characters');\n\nconst first = _require.first,\n      strlen = _require.strlen,\n      limit = (s, n) => first(s, n - 1) + '…';\n\nconst asColumns = (rows, cfg_) => {\n\n    const zip = (arrs, f) => arrs.reduce((a, b) => b.map((b, i) => [].concat(_toConsumableArray(a[i] || []), [b])), []).map(args => f.apply(undefined, _toConsumableArray(args))),\n\n\n    /*  Convert cell data to string (converting multiline text to singleline) */\n\n    cells = rows.map(r => r.map(c => c.replace(/\\n/g, '\\\\n'))),\n\n\n    /*  Compute column widths (per row) and max widths (per column)     */\n\n    cellWidths = cells.map(r => r.map(strlen)),\n          maxWidths = zip(cellWidths, Math.max),\n\n\n    /*  Default config     */\n\n    cfg = O.assign({\n        delimiter: '  ',\n        minColumnWidths: maxWidths.map(x => 0),\n        maxTotalWidth: 0 }, cfg_),\n          delimiterLength = strlen(cfg.delimiter),\n\n\n    /*  Project desired column widths, taking maxTotalWidth and minColumnWidths in account.     */\n\n    totalWidth = maxWidths.reduce((a, b) => a + b, 0),\n          relativeWidths = maxWidths.map(w => w / totalWidth),\n          maxTotalWidth = cfg.maxTotalWidth - delimiterLength * (maxWidths.length - 1),\n          excessWidth = Math.max(0, totalWidth - maxTotalWidth),\n          computedWidths = zip([cfg.minColumnWidths, maxWidths, relativeWidths], (min, max, relative) => Math.max(min, Math.floor(max - excessWidth * relative))),\n\n\n    /*  This is how many symbols we should pad or cut (per column).  */\n\n    restCellWidths = cellWidths.map(widths => zip([computedWidths, widths], (a, b) => a - b));\n\n    /*  Perform final composition.   */\n\n    return zip([cells, restCellWidths], (a, b) => zip([a, b], (str, w) => w >= 0 ? cfg.right ? ' '.repeat(w) + str : str + ' '.repeat(w) : limit(str, strlen(str) + w)).join(cfg.delimiter));\n};\n\nconst asTable = cfg => O.assign(arr => {\n    var _ref;\n\n    /*  Print arrays  */\n\n    if (arr[0] && Array.isArray(arr[0])) {\n        return asColumns(arr.map(r => r.map((c, i) => c === undefined ? '' : cfg.print(c, i))), cfg).join('\\n');\n    }\n\n    /*  Print objects   */\n\n    const colNames = [].concat(_toConsumableArray(new Set((_ref = []).concat.apply(_ref, _toConsumableArray(arr.map(O.keys)))))),\n          columns = [colNames.map(cfg.title)].concat(_toConsumableArray(arr.map(o => colNames.map(key => o[key] === undefined ? '' : cfg.print(o[key], key))))),\n          lines = asColumns(columns, cfg);\n\n    return (cfg.dash ? [lines[0], cfg.dash.repeat(strlen(lines[0]))].concat(_toConsumableArray(lines.slice(1))) : lines).join('\\n');\n}, cfg, {\n\n    configure: newConfig => asTable(O.assign({}, cfg, newConfig))\n});\n\nmodule.exports = asTable({\n\n    maxTotalWidth: Number.MAX_SAFE_INTEGER,\n    print: String,\n    title: String,\n    dash: '-',\n    right: false\n});\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2FzLXRhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0FBRU0sVUFBSSxNQUFKOztlQUNvQixRQUFTLHNCQUFULEM7O01BQWxCLEssWUFBQSxLO01BQU8sTSxZQUFBLE07TUFDVCxLLEdBQVEsQ0FBQyxDQUFELEVBQUksQ0FBSixLQUFXLE1BQU8sQ0FBUCxFQUFVLElBQUksQ0FBZCxJQUFtQixHOztBQUU1QyxNQUFNLFlBQVksQ0FBQyxJQUFELEVBQU8sSUFBUCxLQUFnQjs7QUFFOUIsVUFFSSxNQUFNLENBQUMsSUFBRCxFQUFPLENBQVAsS0FBYSxLQUFLLE1BQUwsQ0FBYSxDQUFDLENBQUQsRUFBSSxDQUFKLEtBQVUsRUFBRSxHQUFGLENBQU8sQ0FBQyxDQUFELEVBQUksQ0FBSixrQ0FBYyxFQUFFLENBQUYsS0FBUSxFQUF0QixJQUEwQixDQUExQixFQUFQLENBQXZCLEVBQTZELEVBQTdELEVBQWlFLEdBQWpFLENBQXNFLFFBQVEsc0NBQU0sSUFBTixFQUE5RSxDQUZ2Qjs7O0FBSUE7O0FBRUksWUFBa0IsS0FBSyxHQUFMLENBQVUsS0FBSyxFQUFFLEdBQUYsQ0FBTyxLQUFLLEVBQUUsT0FBRixDQUFXLEtBQVgsRUFBa0IsS0FBbEIsQ0FBWixDQUFmLENBTnRCOzs7QUFRQTs7QUFFSSxpQkFBa0IsTUFBTSxHQUFOLENBQVcsS0FBSyxFQUFFLEdBQUYsQ0FBTyxNQUFQLENBQWhCLENBVnRCO0FBQUEsVUFXSSxZQUFrQixJQUFLLFVBQUwsRUFBaUIsS0FBSyxHQUF0QixDQVh0Qjs7O0FBYUE7O0FBRUksVUFBa0IsRUFBRSxNQUFGLENBQVU7QUFDUixtQkFBVyxJQURIO0FBRVIseUJBQWlCLFVBQVUsR0FBVixDQUFlLEtBQUssQ0FBcEIsQ0FGVDtBQUdSLHVCQUFlLENBSFAsRUFBVixFQUdzQixJQUh0QixDQWZ0QjtBQUFBLFVBb0JJLGtCQUFrQixPQUFRLElBQUksU0FBWixDQXBCdEI7OztBQXNCQTs7QUFFSSxpQkFBa0IsVUFBVSxNQUFWLENBQWtCLENBQUMsQ0FBRCxFQUFJLENBQUosS0FBVSxJQUFJLENBQWhDLEVBQW1DLENBQW5DLENBeEJ0QjtBQUFBLFVBeUJJLGlCQUFrQixVQUFVLEdBQVYsQ0FBZSxLQUFLLElBQUksVUFBeEIsQ0F6QnRCO0FBQUEsVUEwQkksZ0JBQWtCLElBQUksYUFBSixHQUFxQixtQkFBbUIsVUFBVSxNQUFWLEdBQW1CLENBQXRDLENBMUIzQztBQUFBLFVBMkJJLGNBQWtCLEtBQUssR0FBTCxDQUFVLENBQVYsRUFBYSxhQUFhLGFBQTFCLENBM0J0QjtBQUFBLFVBNEJJLGlCQUFrQixJQUFLLENBQUMsSUFBSSxlQUFMLEVBQXNCLFNBQXRCLEVBQWlDLGNBQWpDLENBQUwsRUFDRSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsUUFBWCxLQUF3QixLQUFLLEdBQUwsQ0FBVSxHQUFWLEVBQWUsS0FBSyxLQUFMLENBQVksTUFBTSxjQUFjLFFBQWhDLENBQWYsQ0FEMUIsQ0E1QnRCOzs7QUErQkE7O0FBRUkscUJBQWtCLFdBQVcsR0FBWCxDQUFnQixVQUFVLElBQUssQ0FBQyxjQUFELEVBQWlCLE1BQWpCLENBQUwsRUFBK0IsQ0FBQyxDQUFELEVBQUksQ0FBSixLQUFVLElBQUksQ0FBN0MsQ0FBMUIsQ0FqQ3RCOztBQW1DQTs7QUFFSSxXQUFPLElBQUssQ0FBQyxLQUFELEVBQVEsY0FBUixDQUFMLEVBQThCLENBQUMsQ0FBRCxFQUFJLENBQUosS0FDN0IsSUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUwsRUFBYSxDQUFDLEdBQUQsRUFBTSxDQUFOLEtBQWEsS0FBSyxDQUFOLEdBQ00sSUFBSSxLQUFKLEdBQWEsSUFBSSxNQUFKLENBQVksQ0FBWixJQUFpQixHQUE5QixHQUFzQyxNQUFNLElBQUksTUFBSixDQUFZLENBQVosQ0FEbEQsR0FFTSxNQUFPLEdBQVAsRUFBWSxPQUFRLEdBQVIsSUFBZSxDQUEzQixDQUYvQixFQUUrRCxJQUYvRCxDQUVxRSxJQUFJLFNBRnpFLENBREQsQ0FBUDtBQUlQLENBM0NEOztBQTZDQSxNQUFNLFVBQVUsT0FBTyxFQUFFLE1BQUYsQ0FBVSxPQUFPO0FBQUE7O0FBRXhDOztBQUVJLFFBQUksSUFBSSxDQUFKLEtBQVUsTUFBTSxPQUFOLENBQWUsSUFBSSxDQUFKLENBQWYsQ0FBZCxFQUFzQztBQUNsQyxlQUFPLFVBQVcsSUFBSSxHQUFKLENBQVMsS0FBSyxFQUFFLEdBQUYsQ0FDUSxDQUFDLENBQUQsRUFBSSxDQUFKLEtBQVcsTUFBTSxTQUFQLEdBQW9CLEVBQXBCLEdBQXlCLElBQUksS0FBSixDQUFXLENBQVgsRUFBYyxDQUFkLENBRDNDLENBQWQsQ0FBWCxFQUlXLEdBSlgsRUFJZ0IsSUFKaEIsQ0FJc0IsSUFKdEIsQ0FBUDtBQUtIOztBQUVMOztBQUVJLFVBQU0sd0NBQWUsSUFBSSxHQUFKLENBQVMsWUFBRyxNQUFILGdDQUFjLElBQUksR0FBSixDQUFTLEVBQUUsSUFBWCxDQUFkLEVBQVQsQ0FBZixFQUFOO0FBQUEsVUFDTSxXQUFZLFNBQVMsR0FBVCxDQUFjLElBQUksS0FBbEIsQ0FBWiw0QkFDZSxJQUFJLEdBQUosQ0FBUyxLQUFLLFNBQVMsR0FBVCxDQUNJLE9BQVEsRUFBRSxHQUFGLE1BQVcsU0FBWixHQUF5QixFQUF6QixHQUE4QixJQUFJLEtBQUosQ0FBVyxFQUFFLEdBQUYsQ0FBWCxFQUFtQixHQUFuQixDQUR6QyxDQUFkLENBRGYsRUFETjtBQUFBLFVBT00sUUFBVyxVQUFXLE9BQVgsRUFBb0IsR0FBcEIsQ0FQakI7O0FBU0EsV0FBTyxDQUFDLElBQUksSUFBSixJQUFZLE1BQU0sQ0FBTixDQUFaLEVBQXNCLElBQUksSUFBSixDQUFTLE1BQVQsQ0FBaUIsT0FBUSxNQUFNLENBQU4sQ0FBUixDQUFqQixDQUF0Qiw0QkFBOEQsTUFBTSxLQUFOLENBQWEsQ0FBYixDQUE5RCxLQUFpRixLQUFsRixFQUF5RixJQUF6RixDQUErRixJQUEvRixDQUFQO0FBRUgsQ0F6QnNCLEVBeUJwQixHQXpCb0IsRUF5QmY7O0FBRUosZUFBVyxhQUFhLFFBQVMsRUFBRSxNQUFGLENBQVUsRUFBVixFQUFjLEdBQWQsRUFBbUIsU0FBbkIsQ0FBVDtBQUZwQixDQXpCZSxDQUF2Qjs7QUE4QkEsT0FBTyxPQUFQLEdBQWlCLFFBQVM7O0FBRXRCLG1CQUFlLE9BQU8sZ0JBRkE7QUFHdEIsV0FBTyxNQUhlO0FBSXRCLFdBQU8sTUFKZTtBQUt0QixVQUFNLEdBTGdCO0FBTXRCLFdBQU87QUFOZSxDQUFULENBQWpCIiwiZmlsZSI6ImFzLXRhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IE8gPSBPYmplY3RcbiAgICAsIHsgZmlyc3QsIHN0cmxlbiB9ID0gcmVxdWlyZSAoJ3ByaW50YWJsZS1jaGFyYWN0ZXJzJykgLy8gaGFuZGxlcyBBTlNJIGNvZGVzIGFuZCBpbnZpc2libGUgY2hhcmFjdGVyc1xuICAgICwgbGltaXQgPSAocywgbikgPT4gKGZpcnN0IChzLCBuIC0gMSkgKyAn4oCmJylcblxuY29uc3QgYXNDb2x1bW5zID0gKHJvd3MsIGNmZ18pID0+IHtcbiAgICBcbiAgICBjb25zdFxuXG4gICAgICAgIHppcCA9IChhcnJzLCBmKSA9PiBhcnJzLnJlZHVjZSAoKGEsIGIpID0+IGIubWFwICgoYiwgaSkgPT4gWy4uLmFbaV0gfHwgW10sIGJdKSwgW10pLm1hcCAoYXJncyA9PiBmICguLi5hcmdzKSksXG5cbiAgICAvKiAgQ29udmVydCBjZWxsIGRhdGEgdG8gc3RyaW5nIChjb252ZXJ0aW5nIG11bHRpbGluZSB0ZXh0IHRvIHNpbmdsZWxpbmUpICovXG5cbiAgICAgICAgY2VsbHMgICAgICAgICAgID0gcm93cy5tYXAgKHIgPT4gci5tYXAgKGMgPT4gYy5yZXBsYWNlICgvXFxuL2csICdcXFxcbicpKSksXG5cbiAgICAvKiAgQ29tcHV0ZSBjb2x1bW4gd2lkdGhzIChwZXIgcm93KSBhbmQgbWF4IHdpZHRocyAocGVyIGNvbHVtbikgICAgICovXG5cbiAgICAgICAgY2VsbFdpZHRocyAgICAgID0gY2VsbHMubWFwIChyID0+IHIubWFwIChzdHJsZW4pKSxcbiAgICAgICAgbWF4V2lkdGhzICAgICAgID0gemlwIChjZWxsV2lkdGhzLCBNYXRoLm1heCksXG5cbiAgICAvKiAgRGVmYXVsdCBjb25maWcgICAgICovXG5cbiAgICAgICAgY2ZnICAgICAgICAgICAgID0gTy5hc3NpZ24gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6ICcgICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQ29sdW1uV2lkdGhzOiBtYXhXaWR0aHMubWFwICh4ID0+IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFRvdGFsV2lkdGg6IDAgfSwgY2ZnXyksXG5cbiAgICAgICAgZGVsaW1pdGVyTGVuZ3RoID0gc3RybGVuIChjZmcuZGVsaW1pdGVyKSxcblxuICAgIC8qICBQcm9qZWN0IGRlc2lyZWQgY29sdW1uIHdpZHRocywgdGFraW5nIG1heFRvdGFsV2lkdGggYW5kIG1pbkNvbHVtbldpZHRocyBpbiBhY2NvdW50LiAgICAgKi9cblxuICAgICAgICB0b3RhbFdpZHRoICAgICAgPSBtYXhXaWR0aHMucmVkdWNlICgoYSwgYikgPT4gYSArIGIsIDApLFxuICAgICAgICByZWxhdGl2ZVdpZHRocyAgPSBtYXhXaWR0aHMubWFwICh3ID0+IHcgLyB0b3RhbFdpZHRoKSxcbiAgICAgICAgbWF4VG90YWxXaWR0aCAgID0gY2ZnLm1heFRvdGFsV2lkdGggLSAoZGVsaW1pdGVyTGVuZ3RoICogKG1heFdpZHRocy5sZW5ndGggLSAxKSksXG4gICAgICAgIGV4Y2Vzc1dpZHRoICAgICA9IE1hdGgubWF4ICgwLCB0b3RhbFdpZHRoIC0gbWF4VG90YWxXaWR0aCksXG4gICAgICAgIGNvbXB1dGVkV2lkdGhzICA9IHppcCAoW2NmZy5taW5Db2x1bW5XaWR0aHMsIG1heFdpZHRocywgcmVsYXRpdmVXaWR0aHNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW4sIG1heCwgcmVsYXRpdmUpID0+IE1hdGgubWF4IChtaW4sIE1hdGguZmxvb3IgKG1heCAtIGV4Y2Vzc1dpZHRoICogcmVsYXRpdmUpKSksXG5cbiAgICAvKiAgVGhpcyBpcyBob3cgbWFueSBzeW1ib2xzIHdlIHNob3VsZCBwYWQgb3IgY3V0IChwZXIgY29sdW1uKS4gICovXG5cbiAgICAgICAgcmVzdENlbGxXaWR0aHMgID0gY2VsbFdpZHRocy5tYXAgKHdpZHRocyA9PiB6aXAgKFtjb21wdXRlZFdpZHRocywgd2lkdGhzXSwgKGEsIGIpID0+IGEgLSBiKSlcblxuICAgIC8qICBQZXJmb3JtIGZpbmFsIGNvbXBvc2l0aW9uLiAgICovXG5cbiAgICAgICAgcmV0dXJuIHppcCAoW2NlbGxzLCByZXN0Q2VsbFdpZHRoc10sIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgIHppcCAoW2EsIGJdLCAoc3RyLCB3KSA9PiAodyA+PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChjZmcucmlnaHQgPyAoJyAnLnJlcGVhdCAodykgKyBzdHIpIDogKHN0ciArICcgJy5yZXBlYXQgKHcpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAobGltaXQgKHN0ciwgc3RybGVuIChzdHIpICsgdykpKS5qb2luIChjZmcuZGVsaW1pdGVyKSlcbn1cblxuY29uc3QgYXNUYWJsZSA9IGNmZyA9PiBPLmFzc2lnbiAoYXJyID0+IHtcblxuLyogIFByaW50IGFycmF5cyAgKi9cblxuICAgIGlmIChhcnJbMF0gJiYgQXJyYXkuaXNBcnJheSAoYXJyWzBdKSkge1xuICAgICAgICByZXR1cm4gYXNDb2x1bW5zIChhcnIubWFwIChyID0+IHIubWFwIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjLCBpKSA9PiAoYyA9PT0gdW5kZWZpbmVkKSA/ICcnIDogY2ZnLnByaW50IChjLCBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcpLmpvaW4gKCdcXG4nKVxuICAgIH1cblxuLyogIFByaW50IG9iamVjdHMgICAqL1xuXG4gICAgY29uc3QgY29sTmFtZXMgPSBbLi4ubmV3IFNldCAoW10uY29uY2F0ICguLi5hcnIubWFwIChPLmtleXMpKSldLFxuICAgICAgICAgIGNvbHVtbnMgID0gW2NvbE5hbWVzLm1hcCAoY2ZnLnRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAuLi5hcnIubWFwIChvID0+IGNvbE5hbWVzLm1hcCAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0+IChvW2tleV0gPT09IHVuZGVmaW5lZCkgPyAnJyA6IGNmZy5wcmludCAob1trZXldLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgIGxpbmVzICAgID0gYXNDb2x1bW5zIChjb2x1bW5zLCBjZmcpXG5cbiAgICByZXR1cm4gKGNmZy5kYXNoID8gW2xpbmVzWzBdLCBjZmcuZGFzaC5yZXBlYXQgKHN0cmxlbiAobGluZXNbMF0pKSwgLi4ubGluZXMuc2xpY2UgKDEpXSA6IGxpbmVzKS5qb2luICgnXFxuJylcblxufSwgY2ZnLCB7XG5cbiAgICBjb25maWd1cmU6IG5ld0NvbmZpZyA9PiBhc1RhYmxlIChPLmFzc2lnbiAoe30sIGNmZywgbmV3Q29uZmlnKSksXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzVGFibGUgKHtcblxuICAgIG1heFRvdGFsV2lkdGg6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgIHByaW50OiBTdHJpbmcsXG4gICAgdGl0bGU6IFN0cmluZyxcbiAgICBkYXNoOiAnLScsXG4gICAgcmlnaHQ6IGZhbHNlXG59KVxuIl19","// 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// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexport function resolve() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : '/';\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexport function normalize(path) {\n  var isPathAbsolute = isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isPathAbsolute).join('/');\n\n  if (!path && !isPathAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexport function isAbsolute(path) {\n  return path.charAt(0) === '/';\n}\n\n// posix version\nexport function join() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n}\n\n\n// path.relative(from, to)\n// posix version\nexport function relative(from, to) {\n  from = resolve(from).substr(1);\n  to = resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\nexport var sep = '/';\nexport var delimiter = ':';\n\nexport function dirname(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\nexport function basename(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n}\n\n\nexport function extname(path) {\n  return splitPath(path)[3];\n}\nexport default {\n  extname: extname,\n  basename: basename,\n  dirname: dirname,\n  sep: sep,\n  delimiter: delimiter,\n  relative: relative,\n  join: join,\n  isAbsolute: isAbsolute,\n  normalize: normalize,\n  resolve: resolve\n};\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b' ?\n    function (str, start, len) { return str.substr(start, len) } :\n    function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n","\nvar inherits;\nif (typeof Object.create === 'function'){\n  inherits = function inherits(ctor, superCtor) {\n    // implementation from standard node.js 'util' module\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} else {\n  inherits = function inherits(ctor, 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}\nexport default inherits;\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.\nimport process from 'process';\nvar formatRegExp = /%[sdj%]/g;\nexport function format(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexport function deprecate(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexport function debuglog(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = 0;\n      debugs[set] = function() {\n        var msg = format.apply(null, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nexport function inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    _extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nexport function isArray(ar) {\n  return Array.isArray(ar);\n}\n\nexport function isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\n\nexport function isNull(arg) {\n  return arg === null;\n}\n\nexport function isNullOrUndefined(arg) {\n  return arg == null;\n}\n\nexport function isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nexport function isString(arg) {\n  return typeof arg === 'string';\n}\n\nexport function isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\n\nexport function isUndefined(arg) {\n  return arg === void 0;\n}\n\nexport function isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nexport function isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nexport function isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nexport function isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nexport function isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nexport function 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}\n\nexport function isBuffer(maybeBuf) {\n  return Buffer.isBuffer(maybeBuf);\n}\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexport function log() {\n  console.log('%s - %s', timestamp(), format.apply(null, arguments));\n}\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nimport inherits from './inherits';\nexport {inherits}\n\nexport function _extend(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport default {\n  inherits: inherits,\n  _extend: _extend,\n  log: log,\n  isBuffer: isBuffer,\n  isPrimitive: isPrimitive,\n  isFunction: isFunction,\n  isError: isError,\n  isDate: isDate,\n  isObject: isObject,\n  isRegExp: isRegExp,\n  isUndefined: isUndefined,\n  isSymbol: isSymbol,\n  isString: isString,\n  isNumber: isNumber,\n  isNullOrUndefined: isNullOrUndefined,\n  isNull: isNull,\n  isBoolean: isBoolean,\n  isArray: isArray,\n  inspect: inspect,\n  deprecate: deprecate,\n  format: format,\n  debuglog: debuglog\n}\n","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nconst O              = Object,\n      isBrowser      = (typeof window !== 'undefined') && (window.window === window) && window.navigator,\n      lastOf         = x => x[x.length - 1],\n      getSource      = require ('get-source'),\n      partition      = require ('./impl/partition'),\n      asTable        = require ('as-table'),\n      nixSlashes     = x => x.replace (/\\\\/g, '/'),\n      pathRoot       = isBrowser ? window.location.href : (nixSlashes (process.cwd ()) + '/'),\n      pathToRelative = isBrowser ? ((root, full) => full.replace (root, '')) : module.require ('path').relative\n\n/*  ------------------------------------------------------------------------ */\n\nclass StackTracey extends Array {\n\n    constructor (input, offset) {\n        \n        const originalInput          = input\n            , isParseableSyntaxError = input && (input instanceof SyntaxError && !isBrowser)\n        \n        super ()\n\n    /*  Fixes for Safari    */\n\n        this.constructor = StackTracey\n        this.__proto__   = StackTracey.prototype\n\n    /*  new StackTracey ()            */\n\n        if (!input) {\n             input = new Error ()\n             offset = (offset === undefined) ? 1 : offset\n        }\n\n    /*  new StackTracey (Error)      */\n\n        if (input instanceof Error) {\n            input = input[StackTracey.stack] || input.stack || ''\n        }\n\n    /*  new StackTracey (string)     */\n\n        if (typeof input === 'string') {\n            input = StackTracey.rawParse (input).slice (offset).map (StackTracey.extractEntryMetadata)\n        }\n\n    /*  new StackTracey (array)      */\n\n        if (Array.isArray (input)) {\n\n            if (isParseableSyntaxError) {\n                \n                const rawLines   = module.require ('util').inspect (originalInput).split ('\\n')\n                    , fileLine = rawLines[0].split (':')\n                    , line = fileLine.pop ()\n                    , file = fileLine.join (':')\n\n                if (file) {\n                    input.unshift ({\n                        file: nixSlashes (file),\n                        line: line,\n                        column: (rawLines[2] || '').indexOf ('^') + 1,\n                        sourceLine: rawLines[1],\n                        callee: '(syntax error)',\n                        syntaxError: true\n                    })\n                }\n            }\n\n            this.length = input.length\n            input.forEach ((x, i) => this[i] = x)\n        }\n    }\n\n    static extractEntryMetadata (e) {\n        \n        const fileRelative = StackTracey.relativePath (e.file || '')\n\n        return O.assign (e, {\n\n            calleeShort:  e.calleeShort || lastOf ((e.callee || '').split ('.')),\n            fileRelative: fileRelative,\n            fileShort:    StackTracey.shortenPath (fileRelative),\n            fileName:     lastOf ((e.file || '').split ('/')),\n            thirdParty:   StackTracey.isThirdParty (fileRelative) && !e.index\n        })\n    }\n\n    static shortenPath (relativePath) {\n        return relativePath.replace (/^node_modules\\//, '')\n                           .replace (/^webpack\\/bootstrap\\//, '')\n    }\n\n    static relativePath (fullPath) {\n        return nixSlashes (pathToRelative (pathRoot, fullPath)).replace (/^.*\\:\\/\\/?\\/?/, '')\n    }\n\n    static isThirdParty (relativePath) {\n        return (relativePath[0] === '~')                          || // webpack-specific heuristic\n               (relativePath[0] === '/')                          || // external source\n               (relativePath.indexOf ('node_modules')      === 0) ||\n               (relativePath.indexOf ('webpack/bootstrap') === 0)\n    }\n\n    static rawParse (str) {\n\n        const lines = (str || '').split ('\\n')\n\n        const entries = lines.map (line => {\n\n            line = line.trim ()\n\n            let callee, fileLineColumn = [], native, planA, planB\n\n            if ((planA = line.match (/at (.+) \\((.+)\\)/)) ||\n                ((line.slice (0, 3) !== 'at ') && (planA = line.match (/(.*)@(.*)/)))) {\n\n                callee         =  planA[1]\n                native         = (planA[2] === 'native')\n                fileLineColumn = (planA[2].match (/(.*):(.+):(.+)/) || []).slice (1)\n\n            } else if ((planB = line.match (/^(at\\s+)*(.+):([0-9]+):([0-9]+)/) )) {\n                fileLineColumn = (planB).slice (2)\n\n            } else {\n                return undefined\n            }\n\n        /*  Detect things like Array.reduce\n            TODO: detect more built-in types            */\n            \n            if (callee && !fileLineColumn[0]) {\n                const type = callee.split ('.')[0]\n                if (type === 'Array') {\n                    native = true\n                }\n            }\n\n            return {\n                beforeParse: line,\n                callee:      callee || '',\n                index:       isBrowser && (fileLineColumn[0] === window.location.href),\n                native:      native || false,\n                file:        nixSlashes (fileLineColumn[0] || ''),\n                line:        parseInt (fileLineColumn[1] || '', 10) || undefined,\n                column:      parseInt (fileLineColumn[2] || '', 10) || undefined\n            }\n        })\n\n        return entries.filter (x => (x !== undefined))\n    }\n\n    withSource (i) {\n        return this[i] && StackTracey.withSource (this[i])\n    }\n\n    static withSource (loc) {\n\n        if (loc.sourceFile || (loc.file && loc.file.indexOf ('<') >= 0)) { // skip things like <anonymous> and stuff that was already fetched\n            return loc\n            \n        } else {\n\n            let resolved = getSource (loc.file || '').resolve (loc)\n\n            if (!resolved.sourceFile) {\n                return loc\n            }\n\n            if (!resolved.sourceFile.error) {\n                resolved.file = nixSlashes (resolved.sourceFile.path)\n                resolved = StackTracey.extractEntryMetadata (resolved)\n            }\n\n            if (!resolved.sourceLine.error) {\n                if (resolved.sourceLine.includes ('// @hide')) {\n                    resolved.sourceLine = resolved.sourceLine.replace  ('// @hide', '')\n                    resolved.hide       = true\n                }\n                if (resolved.sourceLine.includes ('__webpack_require__') || // webpack-specific heuristics\n                    resolved.sourceLine.includes ('/******/ ({')) {\n                    resolved.thirdParty = true\n                }\n            }\n\n            return O.assign ({ sourceLine: '' }, loc, resolved)\n        }\n    }\n\n    get withSources () {\n        return new StackTracey (this.map (StackTracey.withSource))\n    }\n\n    get mergeRepeatedLines () {\n        return new StackTracey (\n            partition (this, e => e.file + e.line).map (\n                group => {\n                    return group.items.slice (1).reduce ((memo, entry) => {\n                        memo.callee      = (memo.callee      || '<anonymous>') + ' → ' + (entry.callee      || '<anonymous>')\n                        memo.calleeShort = (memo.calleeShort || '<anonymous>') + ' → ' + (entry.calleeShort || '<anonymous>')\n                        return memo }, O.assign ({}, group.items[0]))\n                }\n            )\n        )\n    }\n\n    get clean () {\n        return this.withSources.mergeRepeatedLines.filter ((e, i) => (i === 0) || !(e.thirdParty || e.hide || e.native))\n    }\n\n    at (i) {\n        return O.assign ({\n\n            beforeParse: '',\n            callee:      '<???>',\n            index:       false,\n            native:      false,\n            file:        '<???>',\n            line:        0,\n            column:      0\n\n        }, this[i])\n    }\n\n    static locationsEqual (a, b) {\n        return (a.file   === b.file) &&\n               (a.line   === b.line) &&\n               (a.column === b.column)\n    }\n\n    get pretty () {\n\n        const trimEnd   = (s, n) => s && ((s.length > n) ? (s.slice (0, n-1) + '…') : s)   \n        const trimStart = (s, n) => s && ((s.length > n) ? ('…' + s.slice (-(n-1))) : s)\n\n        return asTable (this.withSources.map (\n                            e => [\n                                ('at ' + trimEnd (e.calleeShort,                                StackTracey.maxColumnWidths.callee)),\n                                trimStart ((e.fileShort && (e.fileShort + ':' + e.line)) || '', StackTracey.maxColumnWidths.file),\n                                trimEnd (((e.sourceLine || '').trim () || ''),                  StackTracey.maxColumnWidths.sourceLine)\n                            ]))\n    }\n\n    static resetCache () {\n\n        getSource.resetCache ()\n    }\n}\n\n/*  Some default configuration options\n    ------------------------------------------------------------------------ */\n\nStackTracey.maxColumnWidths = {\n\n    callee:     30,\n    file:       60,\n    sourceLine: 80\n}\n\n/*  Chaining helper for .isThirdParty\n    ------------------------------------------------------------------------ */\n\n;(() => {\n\n    const methods = {\n\n        include (pred) {\n\n            const f = StackTracey.isThirdParty\n            O.assign (StackTracey.isThirdParty = (path => f (path) ||  pred (path)), methods)\n        },\n\n        except (pred) {\n\n            const f = StackTracey.isThirdParty\n            O.assign (StackTracey.isThirdParty = (path => f (path) && !pred (path)), methods)\n        },\n    }\n\n    O.assign (StackTracey.isThirdParty, methods)\n\n}) ()\n\n/*  Array methods\n    ------------------------------------------------------------------------ */\n\n;['map', 'filter', 'slice', 'concat', 'reverse'].forEach (name => {\n\n    StackTracey.prototype[name] = function (/*...args */) { // no support for ...args in Node v4 :(\n        \n        const arr = Array.from (this)\n        return new StackTracey (arr[name].apply (arr, arguments))\n    }\n})\n\n/*  A private field that an Error instance can expose\n    ------------------------------------------------------------------------ */\n\nStackTracey.stack = /* istanbul ignore next */ (typeof Symbol !== 'undefined') ? Symbol.for ('StackTracey') : '__StackTracey'\n\n/*  ------------------------------------------------------------------------ */\n\nmodule.exports = StackTracey\n\n/*  ------------------------------------------------------------------------ */\n\n","\"use strict\";\n\nmodule.exports = (arr_, pred) => {\n\n    const arr   = arr_ || [],\n          spans = []\n    \n    let span = { label: undefined,\n                 items: [arr.first] }\n                 \n    arr.forEach (x => {\n\n        const label = pred (x)\n\n        if ((span.label !== label) && span.items.length) {\n            spans.push (span = { label: label, items: [x] }) }\n\n        else {\n            span.items.push (x) } })\n\n    return spans\n}","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar O = Object;\n\n/*  See https://misc.flogisoft.com/bash/tip_colors_and_formatting\n    ------------------------------------------------------------------------ */\n\nvar colorCodes = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'lightGray', '', 'default'],\n    colorCodesLight = ['darkGray', 'lightRed', 'lightGreen', 'lightYellow', 'lightBlue', 'lightMagenta', 'lightCyan', 'white', ''],\n    styleCodes = ['', 'bright', 'dim', 'italic', 'underline', '', '', 'inverse'],\n    asBright = { 'red': 'lightRed',\n    'green': 'lightGreen',\n    'yellow': 'lightYellow',\n    'blue': 'lightBlue',\n    'magenta': 'lightMagenta',\n    'cyan': 'lightCyan',\n    'black': 'darkGray',\n    'lightGray': 'white' },\n    types = { 0: 'style',\n    2: 'unstyle',\n    3: 'color',\n    9: 'colorLight',\n    4: 'bgColor',\n    10: 'bgColorLight' },\n    subtypes = { color: colorCodes,\n    colorLight: colorCodesLight,\n    bgColor: colorCodes,\n    bgColorLight: colorCodesLight,\n    style: styleCodes,\n    unstyle: styleCodes\n\n    /*  ------------------------------------------------------------------------ */\n\n};var clean = function clean(obj) {\n    for (var k in obj) {\n        if (!obj[k]) {\n            delete obj[k];\n        }\n    }\n    return O.keys(obj).length === 0 ? undefined : obj;\n};\n\n/*  ------------------------------------------------------------------------ */\n\nvar Color = function () {\n    function Color(background, name, brightness) {\n        _classCallCheck(this, Color);\n\n        this.background = background;\n        this.name = name;\n        this.brightness = brightness;\n    }\n\n    _createClass(Color, [{\n        key: 'defaultBrightness',\n        value: function defaultBrightness(value) {\n\n            return new Color(this.background, this.name, this.brightness || value);\n        }\n    }, {\n        key: 'css',\n        value: function css(inverted) {\n\n            var color = inverted ? this.inverse : this;\n\n            var rgbName = color.brightness === Code.bright && asBright[color.name] || color.name;\n\n            var prop = color.background ? 'background:' : 'color:',\n                rgb = Colors.rgb[rgbName],\n                alpha = this.brightness === Code.dim ? 0.5 : 1;\n\n            return rgb ? prop + 'rgba(' + [].concat(_toConsumableArray(rgb), [alpha]).join(',') + ');' : !color.background && alpha < 1 ? 'color:rgba(0,0,0,0.5);' : ''; // Chrome does not support 'opacity' property...\n        }\n    }, {\n        key: 'inverse',\n        get: function get() {\n            return new Color(!this.background, this.name || (this.background ? 'black' : 'white'), this.brightness);\n        }\n    }, {\n        key: 'clean',\n        get: function get() {\n            return clean({ name: this.name === 'default' ? '' : this.name,\n                bright: this.brightness === Code.bright,\n                dim: this.brightness === Code.dim });\n        }\n    }]);\n\n    return Color;\n}();\n\n/*  ------------------------------------------------------------------------ */\n\nvar Code = function () {\n    function Code(n) {\n        _classCallCheck(this, Code);\n\n        if (n !== undefined) {\n            this.value = Number(n);\n        }\n    }\n\n    _createClass(Code, [{\n        key: 'type',\n        get: function get() {\n            return types[Math.floor(this.value / 10)];\n        }\n    }, {\n        key: 'subtype',\n        get: function get() {\n            return subtypes[this.type][this.value % 10];\n        }\n    }, {\n        key: 'str',\n        get: function get() {\n            return this.value ? '\\x1B[' + this.value + 'm' : '';\n        }\n    }, {\n        key: 'isBrightness',\n        get: function get() {\n            return this.value === Code.noBrightness || this.value === Code.bright || this.value === Code.dim;\n        }\n    }], [{\n        key: 'str',\n        value: function str(x) {\n            return new Code(x).str;\n        }\n    }]);\n\n    return Code;\n}();\n\n/*  ------------------------------------------------------------------------ */\n\nO.assign(Code, {\n\n    reset: 0,\n    bright: 1,\n    dim: 2,\n    inverse: 7,\n    noBrightness: 22,\n    noItalic: 23,\n    noUnderline: 24,\n    noInverse: 27,\n    noColor: 39,\n    noBgColor: 49\n});\n\n/*  ------------------------------------------------------------------------ */\n\nvar replaceAll = function replaceAll(str, a, b) {\n    return str.split(a).join(b);\n};\n\n/*  ANSI brightness codes do not overlap, e.g. \"{bright}{dim}foo\" will be rendered bright (not dim).\n    So we fix it by adding brightness canceling before each brightness code, so the former example gets\n    converted to \"{noBrightness}{bright}{noBrightness}{dim}foo\" – this way it gets rendered as expected.\n */\n\nvar denormalizeBrightness = function denormalizeBrightness(s) {\n    return s.replace(/(\\u001b\\[(1|2)m)/g, '\\x1B[22m$1');\n};\nvar normalizeBrightness = function normalizeBrightness(s) {\n    return s.replace(/\\u001b\\[22m(\\u001b\\[(1|2)m)/g, '$1');\n};\n\nvar wrap = function wrap(x, openCode, closeCode) {\n\n    var open = Code.str(openCode),\n        close = Code.str(closeCode);\n\n    return String(x).split('\\n').map(function (line) {\n        return denormalizeBrightness(open + replaceAll(normalizeBrightness(line), close, open) + close);\n    }).join('\\n');\n};\n\n/*  ------------------------------------------------------------------------ */\n\nvar camel = function camel(a, b) {\n    return a + b.charAt(0).toUpperCase() + b.slice(1);\n};\n\nvar stringWrappingMethods = function () {\n    return [].concat(_toConsumableArray(colorCodes.map(function (k, i) {\n        return !k ? [] : [// color methods\n\n        [k, 30 + i, Code.noColor], [camel('bg', k), 40 + i, Code.noBgColor]];\n    })), _toConsumableArray(colorCodesLight.map(function (k, i) {\n        return !k ? [] : [// light color methods\n\n        [k, 90 + i, Code.noColor], [camel('bg', k), 100 + i, Code.noBgColor]];\n    })), _toConsumableArray(['', 'BrightRed', 'BrightGreen', 'BrightYellow', 'BrightBlue', 'BrightMagenta', 'BrightCyan'].map(function (k, i) {\n        return !k ? [] : [['bg' + k, 100 + i, Code.noBgColor]];\n    })), _toConsumableArray(styleCodes.map(function (k, i) {\n        return !k ? [] : [// style methods\n\n        [k, i, k === 'bright' || k === 'dim' ? Code.noBrightness : 20 + i]];\n    }))).reduce(function (a, b) {\n        return a.concat(b);\n    });\n}();\n\n/*  ------------------------------------------------------------------------ */\n\nvar assignStringWrappingAPI = function assignStringWrappingAPI(target) {\n    var wrapBefore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : target;\n    return stringWrappingMethods.reduce(function (memo, _ref) {\n        var _ref2 = _slicedToArray(_ref, 3),\n            k = _ref2[0],\n            open = _ref2[1],\n            close = _ref2[2];\n\n        return O.defineProperty(memo, k, {\n            get: function get() {\n                return assignStringWrappingAPI(function (str) {\n                    return wrapBefore(wrap(str, open, close));\n                });\n            }\n        });\n    }, target);\n};\n\n/*  ------------------------------------------------------------------------ */\n\nvar TEXT = 0,\n    BRACKET = 1,\n    CODE = 2;\n\nfunction rawParse(s) {\n\n    var state = TEXT,\n        buffer = '',\n        text = '',\n        code = '',\n        codes = [];\n    var spans = [];\n\n    for (var i = 0, n = s.length; i < n; i++) {\n\n        var c = s[i];\n\n        buffer += c;\n\n        switch (state) {\n\n            case TEXT:\n                if (c === '\\x1B') {\n                    state = BRACKET;buffer = c;\n                } else {\n                    text += c;\n                }\n                break;\n\n            case BRACKET:\n                if (c === '[') {\n                    state = CODE;code = '';codes = [];\n                } else {\n                    state = TEXT;text += buffer;\n                }\n                break;\n\n            case CODE:\n\n                if (c >= '0' && c <= '9') {\n                    code += c;\n                } else if (c === ';') {\n                    codes.push(new Code(code));code = '';\n                } else if (c === 'm' && code.length) {\n                    codes.push(new Code(code));\n                    var _iteratorNormalCompletion = true;\n                    var _didIteratorError = false;\n                    var _iteratorError = undefined;\n\n                    try {\n                        for (var _iterator = codes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                            var _code = _step.value;\n                            spans.push({ text: text, code: _code });text = '';\n                        }\n                    } catch (err) {\n                        _didIteratorError = true;\n                        _iteratorError = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion && _iterator.return) {\n                                _iterator.return();\n                            }\n                        } finally {\n                            if (_didIteratorError) {\n                                throw _iteratorError;\n                            }\n                        }\n                    }\n\n                    state = TEXT;\n                } else {\n                    state = TEXT;text += buffer;\n                }\n        }\n    }\n\n    if (state !== TEXT) text += buffer;\n\n    if (text) spans.push({ text: text, code: new Code() });\n\n    return spans;\n}\n\n/*  ------------------------------------------------------------------------ */\n\n/**\n * Represents an ANSI-escaped string.\n */\n\nvar Colors = function () {\n\n    /**\n     * @param {string} s a string containing ANSI escape codes.\n     */\n    function Colors(s) {\n        _classCallCheck(this, Colors);\n\n        this.spans = s ? rawParse(s) : [];\n    }\n\n    _createClass(Colors, [{\n        key: Symbol.iterator,\n\n\n        /**\n         * @example\n         * const spans = [...ansi.parse ('\\u001b[7m\\u001b[7mfoo\\u001b[7mbar\\u001b[27m')]\n         */\n        value: function value() {\n            return this.spans[Symbol.iterator]();\n        }\n\n        /**\n         * @desc This allows an alternative import style, see https://github.com/xpl/ansicolor/issues/7#issuecomment-578923578\n         * @example\n         * import { ansicolor, ParsedSpan } from 'ansicolor'\n         */\n\n    }, {\n        key: 'str',\n        get: function get() {\n            return this.spans.reduce(function (str, p) {\n                return str + p.text + p.code.str;\n            }, '');\n        }\n    }, {\n        key: 'parsed',\n        get: function get() {\n\n            var color = void 0,\n                bgColor = void 0,\n                brightness = void 0,\n                styles = void 0;\n\n            function reset() {\n\n                color = new Color(), bgColor = new Color(true /* background */), brightness = undefined, styles = new Set();\n            }\n\n            reset();\n\n            return O.assign(new Colors(), {\n\n                spans: this.spans.map(function (span) {\n\n                    var c = span.code;\n\n                    var inverted = styles.has('inverse'),\n                        underline = styles.has('underline') ? 'text-decoration: underline;' : '',\n                        italic = styles.has('italic') ? 'font-style: italic;' : '',\n                        bold = brightness === Code.bright ? 'font-weight: bold;' : '';\n\n                    var foreColor = color.defaultBrightness(brightness);\n\n                    var styledSpan = O.assign({ css: bold + italic + underline + foreColor.css(inverted) + bgColor.css(inverted) }, clean({ bold: !!bold, color: foreColor.clean, bgColor: bgColor.clean }), span);\n\n                    var _iteratorNormalCompletion2 = true;\n                    var _didIteratorError2 = false;\n                    var _iteratorError2 = undefined;\n\n                    try {\n                        for (var _iterator2 = styles[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                            var k = _step2.value;\n                            styledSpan[k] = true;\n                        }\n                    } catch (err) {\n                        _didIteratorError2 = true;\n                        _iteratorError2 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                                _iterator2.return();\n                            }\n                        } finally {\n                            if (_didIteratorError2) {\n                                throw _iteratorError2;\n                            }\n                        }\n                    }\n\n                    if (c.isBrightness) {\n\n                        brightness = c.value;\n                    } else if (span.code.value !== undefined) {\n\n                        if (span.code.value === Code.reset) {\n                            reset();\n                        } else {\n\n                            switch (span.code.type) {\n\n                                case 'color':\n                                case 'colorLight':\n                                    color = new Color(false, c.subtype);break;\n\n                                case 'bgColor':\n                                case 'bgColorLight':\n                                    bgColor = new Color(true, c.subtype);break;\n\n                                case 'style':\n                                    styles.add(c.subtype);break;\n                                case 'unstyle':\n                                    styles.delete(c.subtype);break;\n                            }\n                        }\n                    }\n\n                    return styledSpan;\n                }).filter(function (s) {\n                    return s.text.length > 0;\n                })\n            });\n        }\n\n        /*  Outputs with Chrome DevTools-compatible format     */\n\n    }, {\n        key: 'asChromeConsoleLogArguments',\n        get: function get() {\n\n            var spans = this.parsed.spans;\n\n            return [spans.map(function (s) {\n                return '%c' + s.text;\n            }).join('')].concat(_toConsumableArray(spans.map(function (s) {\n                return s.css;\n            })));\n        }\n    }, {\n        key: 'browserConsoleArguments',\n        get: function get() /* LEGACY, DEPRECATED */{\n            return this.asChromeConsoleLogArguments;\n        }\n\n        /**\n         * @desc installs String prototype extensions\n         * @example\n         * require ('ansicolor').nice\n         * console.log ('foo'.bright.red)\n         */\n\n    }], [{\n        key: 'parse',\n\n\n        /**\n         * @desc parses a string containing ANSI escape codes\n         * @return {Colors} parsed representation.\n         */\n        value: function parse(s) {\n            return new Colors(s).parsed;\n        }\n\n        /**\n         * @desc strips ANSI codes from a string\n         * @param {string} s a string containing ANSI escape codes.\n         * @return {string} clean string.\n         */\n\n    }, {\n        key: 'strip',\n        value: function strip(s) {\n            return s.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g, ''); // hope V8 caches the regexp\n        }\n    }, {\n        key: 'nice',\n        get: function get() {\n\n            Colors.names.forEach(function (k) {\n                if (!(k in String.prototype)) {\n                    O.defineProperty(String.prototype, k, { get: function get() {\n                            return Colors[k](this);\n                        } });\n                }\n            });\n\n            return Colors;\n        }\n    }, {\n        key: 'ansicolor',\n        get: function get() {\n            return Colors;\n        }\n    }]);\n\n    return Colors;\n}();\n\n/*  ------------------------------------------------------------------------ */\n\nassignStringWrappingAPI(Colors, function (str) {\n    return str;\n});\n\n/*  ------------------------------------------------------------------------ */\n\nColors.names = stringWrappingMethods.map(function (_ref3) {\n    var _ref4 = _slicedToArray(_ref3, 1),\n        k = _ref4[0];\n\n    return k;\n});\n\n/*  ------------------------------------------------------------------------ */\n\nColors.rgb = {\n\n    black: [0, 0, 0],\n    darkGray: [100, 100, 100],\n    lightGray: [200, 200, 200],\n    white: [255, 255, 255],\n\n    red: [204, 0, 0],\n    lightRed: [255, 51, 0],\n\n    green: [0, 204, 0],\n    lightGreen: [51, 204, 51],\n\n    yellow: [204, 102, 0],\n    lightYellow: [255, 153, 51],\n\n    blue: [0, 0, 255],\n    lightBlue: [26, 140, 255],\n\n    magenta: [204, 0, 204],\n    lightMagenta: [255, 0, 255],\n\n    cyan: [0, 153, 255],\n    lightCyan: [0, 204, 255]\n\n    /*  ------------------------------------------------------------------------ */\n\n};module.exports = Colors;\n\n/*  ------------------------------------------------------------------------ */\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBZ0JULFVBQWMsQ0FBQyxDQUFELEVBQVEsQ0FBUixFQUFXLEdBQVgsQ0FoQkw7QUFpQlQsZUFBYyxDQUFDLEVBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQWpCTDs7QUFtQlQsYUFBYyxDQUFDLEdBQUQsRUFBUSxDQUFSLEVBQVcsR0FBWCxDQW5CTDtBQW9CVCxrQkFBYyxDQUFDLEdBQUQsRUFBUSxDQUFSLEVBQVcsR0FBWCxDQXBCTDs7QUFzQlQsVUFBYyxDQUFDLENBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQXRCTDtBQXVCVCxlQUFjLENBQUMsQ0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYOztBQUdsQjs7QUExQmEsQ0FBYixDQTRCQSxPQUFPLE9BQVAsR0FBaUIsTUFBakI7O0FBRUEiLCJmaWxlIjoiYW5zaWNvbG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgTyA9IE9iamVjdFxuXG4vKiAgU2VlIGh0dHBzOi8vbWlzYy5mbG9naXNvZnQuY29tL2Jhc2gvdGlwX2NvbG9yc19hbmRfZm9ybWF0dGluZ1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBjb2xvckNvZGVzICAgICAgPSBbICAgJ2JsYWNrJywgICAgICAncmVkJywgICAgICAnZ3JlZW4nLCAgICAgICd5ZWxsb3cnLCAgICAgICdibHVlJywgICAgICAnbWFnZW50YScsICAgICAgJ2N5YW4nLCAnbGlnaHRHcmF5JywgJycsICdkZWZhdWx0J11cbiAgICAsIGNvbG9yQ29kZXNMaWdodCA9IFsnZGFya0dyYXknLCAnbGlnaHRSZWQnLCAnbGlnaHRHcmVlbicsICdsaWdodFllbGxvdycsICdsaWdodEJsdWUnLCAnbGlnaHRNYWdlbnRhJywgJ2xpZ2h0Q3lhbicsICd3aGl0ZScsICcnXVxuICAgIFxuICAgICwgc3R5bGVDb2RlcyA9IFsnJywgJ2JyaWdodCcsICdkaW0nLCAnaXRhbGljJywgJ3VuZGVybGluZScsICcnLCAnJywgJ2ludmVyc2UnXVxuXG4gICAgLCBhc0JyaWdodCA9IHsgJ3JlZCc6ICAgICAgICdsaWdodFJlZCcsXG4gICAgICAgICAgICAgICAgICAgJ2dyZWVuJzogICAgICdsaWdodEdyZWVuJyxcbiAgICAgICAgICAgICAgICAgICAneWVsbG93JzogICAgJ2xpZ2h0WWVsbG93JyxcbiAgICAgICAgICAgICAgICAgICAnYmx1ZSc6ICAgICAgJ2xpZ2h0Qmx1ZScsXG4gICAgICAgICAgICAgICAgICAgJ21hZ2VudGEnOiAgICdsaWdodE1hZ2VudGEnLFxuICAgICAgICAgICAgICAgICAgICdjeWFuJzogICAgICAnbGlnaHRDeWFuJyxcbiAgICAgICAgICAgICAgICAgICAnYmxhY2snOiAgICAgJ2RhcmtHcmF5JyxcbiAgICAgICAgICAgICAgICAgICAnbGlnaHRHcmF5JzogJ3doaXRlJyB9XG4gICAgXG4gICAgLCB0eXBlcyA9IHsgMDogICdzdHlsZScsXG4gICAgICAgICAgICAgICAgMjogICd1bnN0eWxlJyxcbiAgICAgICAgICAgICAgICAzOiAgJ2NvbG9yJyxcbiAgICAgICAgICAgICAgICA5OiAgJ2NvbG9yTGlnaHQnLFxuICAgICAgICAgICAgICAgIDQ6ICAnYmdDb2xvcicsXG4gICAgICAgICAgICAgICAgMTA6ICdiZ0NvbG9yTGlnaHQnIH1cblxuICAgICwgc3VidHlwZXMgPSB7ICBjb2xvcjogICAgICAgICBjb2xvckNvZGVzLFxuICAgICAgICAgICAgICAgICAgICBjb2xvckxpZ2h0OiAgICBjb2xvckNvZGVzTGlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6ICAgICAgIGNvbG9yQ29kZXMsXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3JMaWdodDogIGNvbG9yQ29kZXNMaWdodCxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6ICAgICAgICAgc3R5bGVDb2RlcyxcbiAgICAgICAgICAgICAgICAgICAgdW5zdHlsZTogICAgICAgc3R5bGVDb2RlcyAgICB9XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgY2xlYW4gPSBvYmogPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiBvYmopIHsgaWYgKCFvYmpba10pIHsgZGVsZXRlIG9ialtrXSB9IH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKE8ua2V5cyAob2JqKS5sZW5ndGggPT09IDApID8gdW5kZWZpbmVkIDogb2JqXG4gICAgICAgICAgICB9XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY2xhc3MgQ29sb3Ige1xuXG4gICAgY29uc3RydWN0b3IgKGJhY2tncm91bmQsIG5hbWUsIGJyaWdodG5lc3MpIHtcblxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBiYWNrZ3JvdW5kXG4gICAgICAgIHRoaXMubmFtZSAgICAgICA9IG5hbWVcbiAgICAgICAgdGhpcy5icmlnaHRuZXNzID0gYnJpZ2h0bmVzc1xuICAgIH1cblxuICAgIGdldCBpbnZlcnNlICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciAoIXRoaXMuYmFja2dyb3VuZCwgdGhpcy5uYW1lIHx8ICh0aGlzLmJhY2tncm91bmQgPyAnYmxhY2snIDogJ3doaXRlJyksIHRoaXMuYnJpZ2h0bmVzcylcbiAgICB9XG5cbiAgICBnZXQgY2xlYW4gKCkge1xuICAgICAgICByZXR1cm4gY2xlYW4gKHsgbmFtZTogICB0aGlzLm5hbWUgPT09ICdkZWZhdWx0JyA/ICcnIDogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZ2h0OiB0aGlzLmJyaWdodG5lc3MgPT09IENvZGUuYnJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGltOiAgICB0aGlzLmJyaWdodG5lc3MgPT09IENvZGUuZGltIH0pXG4gICAgfVxuXG4gICAgZGVmYXVsdEJyaWdodG5lc3MgKHZhbHVlKSB7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciAodGhpcy5iYWNrZ3JvdW5kLCB0aGlzLm5hbWUsIHRoaXMuYnJpZ2h0bmVzcyB8fCB2YWx1ZSlcbiAgICB9XG5cbiAgICBjc3MgKGludmVydGVkKSB7XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBpbnZlcnRlZCA/IHRoaXMuaW52ZXJzZSA6IHRoaXNcblxuICAgICAgICBjb25zdCByZ2JOYW1lID0gKChjb2xvci5icmlnaHRuZXNzID09PSBDb2RlLmJyaWdodCkgJiYgYXNCcmlnaHRbY29sb3IubmFtZV0pIHx8IGNvbG9yLm5hbWVcblxuICAgICAgICBjb25zdCBwcm9wID0gKGNvbG9yLmJhY2tncm91bmQgPyAnYmFja2dyb3VuZDonIDogJ2NvbG9yOicpXG4gICAgICAgICAgICAsIHJnYiAgPSBDb2xvcnMucmdiW3JnYk5hbWVdXG4gICAgICAgICAgICAsIGFscGhhID0gKHRoaXMuYnJpZ2h0bmVzcyA9PT0gQ29kZS5kaW0pID8gMC41IDogMVxuXG4gICAgICAgIHJldHVybiByZ2JcbiAgICAgICAgICAgICAgICA/IChwcm9wICsgJ3JnYmEoJyArIFsuLi5yZ2IsIGFscGhhXS5qb2luICgnLCcpICsgJyk7JylcbiAgICAgICAgICAgICAgICA6ICgoIWNvbG9yLmJhY2tncm91bmQgJiYgKGFscGhhIDwgMSkpID8gJ2NvbG9yOnJnYmEoMCwwLDAsMC41KTsnIDogJycpIC8vIENocm9tZSBkb2VzIG5vdCBzdXBwb3J0ICdvcGFjaXR5JyBwcm9wZXJ0eS4uLlxuICAgIH1cbn1cblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jbGFzcyBDb2RlIHtcblxuICAgIGNvbnN0cnVjdG9yIChuKSB7XG4gICAgICAgIGlmIChuICE9PSB1bmRlZmluZWQpIHsgdGhpcy52YWx1ZSA9IE51bWJlciAobikgfSB9XG5cbiAgICBnZXQgdHlwZSAoKSB7XG4gICAgICAgcmV0dXJuIHR5cGVzW01hdGguZmxvb3IgKHRoaXMudmFsdWUgLyAxMCldIH1cblxuICAgIGdldCBzdWJ0eXBlICgpIHtcbiAgICAgICAgcmV0dXJuIHN1YnR5cGVzW3RoaXMudHlwZV1bdGhpcy52YWx1ZSAlIDEwXSB9XG5cbiAgICBnZXQgc3RyICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlID8gKCdcXHUwMDFiXFxbJyArIHRoaXMudmFsdWUgKyAnbScpIDogJycpIH1cblxuICAgIHN0YXRpYyBzdHIgKHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2RlICh4KS5zdHIgfVxuXG4gICAgZ2V0IGlzQnJpZ2h0bmVzcyAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSA9PT0gQ29kZS5ub0JyaWdodG5lc3MpIHx8ICh0aGlzLnZhbHVlID09PSBDb2RlLmJyaWdodCkgfHwgKHRoaXMudmFsdWUgPT09IENvZGUuZGltKSB9XG59XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuTy5hc3NpZ24gKENvZGUsIHtcblxuICAgIHJlc2V0OiAgICAgICAgMCxcbiAgICBicmlnaHQ6ICAgICAgIDEsXG4gICAgZGltOiAgICAgICAgICAyLFxuICAgIGludmVyc2U6ICAgICAgNyxcbiAgICBub0JyaWdodG5lc3M6IDIyLFxuICAgIG5vSXRhbGljOiAgICAgMjMsXG4gICAgbm9VbmRlcmxpbmU6ICAyNCxcbiAgICBub0ludmVyc2U6ICAgIDI3LFxuICAgIG5vQ29sb3I6ICAgICAgMzksXG4gICAgbm9CZ0NvbG9yOiAgICA0OVxufSlcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCByZXBsYWNlQWxsID0gKHN0ciwgYSwgYikgPT4gc3RyLnNwbGl0IChhKS5qb2luIChiKVxuXG4vKiAgQU5TSSBicmlnaHRuZXNzIGNvZGVzIGRvIG5vdCBvdmVybGFwLCBlLmcuIFwie2JyaWdodH17ZGltfWZvb1wiIHdpbGwgYmUgcmVuZGVyZWQgYnJpZ2h0IChub3QgZGltKS5cbiAgICBTbyB3ZSBmaXggaXQgYnkgYWRkaW5nIGJyaWdodG5lc3MgY2FuY2VsaW5nIGJlZm9yZSBlYWNoIGJyaWdodG5lc3MgY29kZSwgc28gdGhlIGZvcm1lciBleGFtcGxlIGdldHNcbiAgICBjb252ZXJ0ZWQgdG8gXCJ7bm9CcmlnaHRuZXNzfXticmlnaHR9e25vQnJpZ2h0bmVzc317ZGltfWZvb1wiIOKAkyB0aGlzIHdheSBpdCBnZXRzIHJlbmRlcmVkIGFzIGV4cGVjdGVkLlxuICovXG5cbmNvbnN0IGRlbm9ybWFsaXplQnJpZ2h0bmVzcyA9IHMgPT4gcy5yZXBsYWNlICgvKFxcdTAwMWJcXFsoMXwyKW0pL2csICdcXHUwMDFiWzIybSQxJylcbmNvbnN0IG5vcm1hbGl6ZUJyaWdodG5lc3MgPSBzID0+IHMucmVwbGFjZSAoL1xcdTAwMWJcXFsyMm0oXFx1MDAxYlxcWygxfDIpbSkvZywgJyQxJylcblxuY29uc3Qgd3JhcCA9ICh4LCBvcGVuQ29kZSwgY2xvc2VDb2RlKSA9PiB7XG5cbiAgICBjb25zdCBvcGVuICA9IENvZGUuc3RyIChvcGVuQ29kZSksXG4gICAgICAgICAgY2xvc2UgPSBDb2RlLnN0ciAoY2xvc2VDb2RlKVxuXG4gICAgcmV0dXJuIFN0cmluZyAoeClcbiAgICAgICAgICAgICAgICAuc3BsaXQgKCdcXG4nKVxuICAgICAgICAgICAgICAgIC5tYXAgKGxpbmUgPT4gZGVub3JtYWxpemVCcmlnaHRuZXNzIChvcGVuICsgcmVwbGFjZUFsbCAobm9ybWFsaXplQnJpZ2h0bmVzcyAobGluZSksIGNsb3NlLCBvcGVuKSArIGNsb3NlKSlcbiAgICAgICAgICAgICAgICAuam9pbiAoJ1xcbicpXG59XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgY2FtZWwgPSAoYSwgYikgPT4gYSArIGIuY2hhckF0ICgwKS50b1VwcGVyQ2FzZSAoKSArIGIuc2xpY2UgKDEpXG5cblxuY29uc3Qgc3RyaW5nV3JhcHBpbmdNZXRob2RzID0gKCgpID0+IFtcblxuICAgICAgICAuLi5jb2xvckNvZGVzLm1hcCAoKGssIGkpID0+ICFrID8gW10gOiBbIC8vIGNvbG9yIG1ldGhvZHNcblxuICAgICAgICAgICAgW2ssICAgICAgICAgICAgICAgMzAgKyBpLCBDb2RlLm5vQ29sb3JdLFxuICAgICAgICAgICAgW2NhbWVsICgnYmcnLCBrKSwgNDAgKyBpLCBDb2RlLm5vQmdDb2xvcl0sXG4gICAgICAgIF0pLFxuXG4gICAgICAgIC4uLmNvbG9yQ29kZXNMaWdodC5tYXAgKChrLCBpKSA9PiAhayA/IFtdIDogWyAvLyBsaWdodCBjb2xvciBtZXRob2RzXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFtrLCAgICAgICAgICAgICAgICA5MCArIGksIENvZGUubm9Db2xvcl0sXG4gICAgICAgICAgICBbY2FtZWwgKCdiZycsIGspLCAxMDAgKyBpLCBDb2RlLm5vQmdDb2xvcl0sXG4gICAgICAgIF0pLFxuXG4gICAgICAgIC8qIFRISVMgT05FIElTIEZPUiBCQUNLV0FSRFMgQ09NUEFUSUJJTElUWSBXSVRIIFBSRVZJT1VTIFZFUlNJT05TIChoYWQgJ2JyaWdodCcgaW5zdGVhZCBvZiAnbGlnaHQnIGZvciBiYWNrZ3JvdW5kcylcbiAgICAgICAgICovXG4gICAgICAgIC4uLlsnJywgJ0JyaWdodFJlZCcsICdCcmlnaHRHcmVlbicsICdCcmlnaHRZZWxsb3cnLCAnQnJpZ2h0Qmx1ZScsICdCcmlnaHRNYWdlbnRhJywgJ0JyaWdodEN5YW4nXS5tYXAgKChrLCBpKSA9PiAhayA/IFtdIDogW1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBbJ2JnJyArIGssIDEwMCArIGksIENvZGUubm9CZ0NvbG9yXSxcbiAgICAgICAgXSksXG4gICAgICAgIFxuICAgICAgICAuLi5zdHlsZUNvZGVzLm1hcCAoKGssIGkpID0+ICFrID8gW10gOiBbIC8vIHN0eWxlIG1ldGhvZHNcblxuICAgICAgICAgICAgW2ssIGksICgoayA9PT0gJ2JyaWdodCcpIHx8IChrID09PSAnZGltJykpID8gQ29kZS5ub0JyaWdodG5lc3MgOiAoMjAgKyBpKV1cbiAgICAgICAgXSlcbiAgICBdXG4gICAgLnJlZHVjZSAoKGEsIGIpID0+IGEuY29uY2F0IChiKSlcbiAgICBcbikgKCk7XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgYXNzaWduU3RyaW5nV3JhcHBpbmdBUEkgPSAodGFyZ2V0LCB3cmFwQmVmb3JlID0gdGFyZ2V0KSA9PlxuXG4gICAgc3RyaW5nV3JhcHBpbmdNZXRob2RzLnJlZHVjZSAoKG1lbW8sIFtrLCBvcGVuLCBjbG9zZV0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTy5kZWZpbmVQcm9wZXJ0eSAobWVtbywgaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IGFzc2lnblN0cmluZ1dyYXBwaW5nQVBJIChzdHIgPT4gd3JhcEJlZm9yZSAod3JhcCAoc3RyLCBvcGVuLCBjbG9zZSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KVxuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmNvbnN0IFRFWFQgICAgPSAwLFxuICAgICAgQlJBQ0tFVCA9IDEsXG4gICAgICBDT0RFICAgID0gMlxuXG5mdW5jdGlvbiByYXdQYXJzZSAocykge1xuICAgIFxuICAgIGxldCBzdGF0ZSA9IFRFWFQsIGJ1ZmZlciA9ICcnLCB0ZXh0ID0gJycsIGNvZGUgPSAnJywgY29kZXMgPSBbXVxuICAgIGxldCBzcGFucyA9IFtdXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYyA9IHNbaV1cblxuICAgICAgICBidWZmZXIgKz0gY1xuXG4gICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcblxuICAgICAgICAgICAgY2FzZSBURVhUOlxuICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFx1MDAxYicpIHsgc3RhdGUgPSBCUkFDS0VUOyBidWZmZXIgPSBjOyB9XG4gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICB7IHRleHQgKz0gYyB9XG4gICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBCUkFDS0VUOlxuICAgICAgICAgICAgICAgIGlmIChjID09PSAnWycpIHsgc3RhdGUgPSBDT0RFOyBjb2RlID0gJyc7IGNvZGVzID0gW10gfVxuICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgIHsgc3RhdGUgPSBURVhUOyB0ZXh0ICs9IGJ1ZmZlciB9XG4gICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBDT0RFOlxuXG4gICAgICAgICAgICAgICAgaWYgKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgICAgICAgIHsgY29kZSArPSBjIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09PSAnOycpICAgICAgICAgICAgICAgICAgeyBjb2Rlcy5wdXNoIChuZXcgQ29kZSAoY29kZSkpOyBjb2RlID0gJycgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjID09PSAnbScpICYmIGNvZGUubGVuZ3RoKSB7IGNvZGVzLnB1c2ggKG5ldyBDb2RlIChjb2RlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgY29kZXMpIHsgc3BhbnMucHVzaCAoeyB0ZXh0LCBjb2RlIH0pOyB0ZXh0ID0gJycgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gVEVYVFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGUgPSBURVhUOyB0ZXh0ICs9IGJ1ZmZlciB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgIT09IFRFWFQpIHRleHQgKz0gYnVmZmVyXG5cbiAgICBpZiAodGV4dCkgc3BhbnMucHVzaCAoeyB0ZXh0LCBjb2RlOiBuZXcgQ29kZSAoKSB9KVxuXG4gICAgcmV0dXJuIHNwYW5zXG59XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEFOU0ktZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmNsYXNzIENvbG9ycyB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcyBhIHN0cmluZyBjb250YWluaW5nIEFOU0kgZXNjYXBlIGNvZGVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yIChzKSB7XG5cbiAgICAgICAgdGhpcy5zcGFucyA9IHMgPyByYXdQYXJzZSAocykgOiBbXVxuICAgIH1cblxuICAgIGdldCBzdHIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zcGFucy5yZWR1Y2UgKChzdHIsIHApID0+IHN0ciArIHAudGV4dCArIHAuY29kZS5zdHIsICcnKVxuICAgIH1cblxuICAgIGdldCBwYXJzZWQgKCkge1xuXG4gICAgICAgIGxldCBjb2xvciwgYmdDb2xvciwgYnJpZ2h0bmVzcywgc3R5bGVzXG5cbiAgICAgICAgZnVuY3Rpb24gcmVzZXQgKCkge1xuXG4gICAgICAgICAgICBjb2xvciAgICAgID0gbmV3IENvbG9yICgpLFxuICAgICAgICAgICAgYmdDb2xvciAgICA9IG5ldyBDb2xvciAodHJ1ZSAvKiBiYWNrZ3JvdW5kICovKSxcbiAgICAgICAgICAgIGJyaWdodG5lc3MgPSB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZXMgICAgID0gbmV3IFNldCAoKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzZXQgKClcblxuICAgICAgICByZXR1cm4gTy5hc3NpZ24gKG5ldyBDb2xvcnMgKCksIHtcblxuICAgICAgICAgICAgc3BhbnM6IHRoaXMuc3BhbnMubWFwIChzcGFuID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBzcGFuLmNvZGVcblxuICAgICAgICAgICAgICAgIGNvbnN0IGludmVydGVkICA9IHN0eWxlcy5oYXMgKCdpbnZlcnNlJyksXG4gICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lID0gc3R5bGVzLmhhcyAoJ3VuZGVybGluZScpICAgPyAndGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7JyA6ICcnLCAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBpdGFsaWMgICAgPSBzdHlsZXMuaGFzICgnaXRhbGljJykgICAgICA/ICdmb250LXN0eWxlOiBpdGFsaWM7JyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvbGQgICAgICA9IGJyaWdodG5lc3MgPT09IENvZGUuYnJpZ2h0ID8gJ2ZvbnQtd2VpZ2h0OiBib2xkOycgOiAnJ1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZm9yZUNvbG9yID0gY29sb3IuZGVmYXVsdEJyaWdodG5lc3MgKGJyaWdodG5lc3MpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZWRTcGFuID0gTy5hc3NpZ24gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY3NzOiBib2xkICsgaXRhbGljICsgdW5kZXJsaW5lICsgZm9yZUNvbG9yLmNzcyAoaW52ZXJ0ZWQpICsgYmdDb2xvci5jc3MgKGludmVydGVkKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuICh7IGJvbGQ6ICEhYm9sZCwgY29sb3I6IGZvcmVDb2xvci5jbGVhbiwgYmdDb2xvcjogYmdDb2xvci5jbGVhbiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIHN0eWxlcykgeyBzdHlsZWRTcGFuW2tdID0gdHJ1ZSB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYy5pc0JyaWdodG5lc3MpIHtcblxuICAgICAgICAgICAgICAgICAgICBicmlnaHRuZXNzID0gYy52YWx1ZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Bhbi5jb2RlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbi5jb2RlLnZhbHVlID09PSBDb2RlLnJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldCAoKVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3Bhbi5jb2RlLnR5cGUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yJyAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yTGlnaHQnICAgOiBjb2xvciAgID0gbmV3IENvbG9yIChmYWxzZSwgYy5zdWJ0eXBlKTsgYnJlYWtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JnQ29sb3InICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JnQ29sb3JMaWdodCcgOiBiZ0NvbG9yID0gbmV3IENvbG9yICh0cnVlLCAgYy5zdWJ0eXBlKTsgYnJlYWtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0eWxlJyAgOiBzdHlsZXMuYWRkICAgIChjLnN1YnR5cGUpOyBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Vuc3R5bGUnOiBzdHlsZXMuZGVsZXRlIChjLnN1YnR5cGUpOyBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlZFNwYW5cblxuICAgICAgICAgICAgfSkuZmlsdGVyIChzID0+IHMudGV4dC5sZW5ndGggPiAwKVxuICAgICAgICB9KVxuICAgIH1cblxuLyogIE91dHB1dHMgd2l0aCBDaHJvbWUgRGV2VG9vbHMtY29tcGF0aWJsZSBmb3JtYXQgICAgICovXG5cbiAgICBnZXQgYXNDaHJvbWVDb25zb2xlTG9nQXJndW1lbnRzICgpIHtcblxuICAgICAgICBjb25zdCBzcGFucyA9IHRoaXMucGFyc2VkLnNwYW5zXG5cbiAgICAgICAgcmV0dXJuIFtzcGFucy5tYXAgKHMgPT4gKCclYycgKyBzLnRleHQpKS5qb2luICgnJyksXG4gICAgICAgICAgICAgLi4uc3BhbnMubWFwIChzID0+IHMuY3NzKV1cbiAgICB9XG5cbiAgICBnZXQgYnJvd3NlckNvbnNvbGVBcmd1bWVudHMgKCkgLyogTEVHQUNZLCBERVBSRUNBVEVEICovIHsgcmV0dXJuIHRoaXMuYXNDaHJvbWVDb25zb2xlTG9nQXJndW1lbnRzIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIGluc3RhbGxzIFN0cmluZyBwcm90b3R5cGUgZXh0ZW5zaW9uc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVxdWlyZSAoJ2Fuc2ljb2xvcicpLm5pY2VcbiAgICAgKiBjb25zb2xlLmxvZyAoJ2ZvbycuYnJpZ2h0LnJlZClcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IG5pY2UgKCkge1xuXG4gICAgICAgIENvbG9ycy5uYW1lcy5mb3JFYWNoIChrID0+IHtcbiAgICAgICAgICAgIGlmICghKGsgaW4gU3RyaW5nLnByb3RvdHlwZSkpIHtcbiAgICAgICAgICAgICAgICBPLmRlZmluZVByb3BlcnR5IChTdHJpbmcucHJvdG90eXBlLCBrLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQ29sb3JzW2tdICh0aGlzKSB9IH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIENvbG9yc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIHBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIEFOU0kgZXNjYXBlIGNvZGVzXG4gICAgICogQHJldHVybiB7Q29sb3JzfSBwYXJzZWQgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlIChzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3JzIChzKS5wYXJzZWRcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBzdHJpcHMgQU5TSSBjb2RlcyBmcm9tIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHMgYSBzdHJpbmcgY29udGFpbmluZyBBTlNJIGVzY2FwZSBjb2Rlcy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNsZWFuIHN0cmluZy5cbiAgICAgKi9cbiAgICBzdGF0aWMgc3RyaXAgKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSAoL1tcXHUwMDFiXFx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtUFJaY2YtbnFyeT0+PF0vZywgJycpIC8vIGhvcGUgVjggY2FjaGVzIHRoZSByZWdleHBcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHNwYW5zID0gWy4uLmFuc2kucGFyc2UgKCdcXHUwMDFiWzdtXFx1MDAxYls3bWZvb1xcdTAwMWJbN21iYXJcXHUwMDFiWzI3bScpXVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BhbnNbU3ltYm9sLml0ZXJhdG9yXSAoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIFRoaXMgYWxsb3dzIGFuIGFsdGVybmF0aXZlIGltcG9ydCBzdHlsZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94cGwvYW5zaWNvbG9yL2lzc3Vlcy83I2lzc3VlY29tbWVudC01Nzg5MjM1NzhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGltcG9ydCB7IGFuc2ljb2xvciwgUGFyc2VkU3BhbiB9IGZyb20gJ2Fuc2ljb2xvcidcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGFuc2ljb2xvciAoKSB7XG4gICAgICAgIHJldHVybiBDb2xvcnNcbiAgICB9XG59XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXNzaWduU3RyaW5nV3JhcHBpbmdBUEkgKENvbG9ycywgc3RyID0+IHN0cilcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5Db2xvcnMubmFtZXMgPSBzdHJpbmdXcmFwcGluZ01ldGhvZHMubWFwICgoW2tdKSA9PiBrKVxuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbkNvbG9ycy5yZ2IgPSB7XG5cbiAgICBibGFjazogICAgICAgIFswLCAgICAgMCwgICAwXSwgICAgXG4gICAgZGFya0dyYXk6ICAgICBbMTAwLCAxMDAsIDEwMF0sXG4gICAgbGlnaHRHcmF5OiAgICBbMjAwLCAyMDAsIDIwMF0sXG4gICAgd2hpdGU6ICAgICAgICBbMjU1LCAyNTUsIDI1NV0sXG5cbiAgICByZWQ6ICAgICAgICAgIFsyMDQsICAgMCwgICAwXSxcbiAgICBsaWdodFJlZDogICAgIFsyNTUsICA1MSwgICAwXSxcbiAgICBcbiAgICBncmVlbjogICAgICAgIFswLCAgIDIwNCwgICAwXSxcbiAgICBsaWdodEdyZWVuOiAgIFs1MSwgIDIwNCwgIDUxXSxcbiAgICBcbiAgICB5ZWxsb3c6ICAgICAgIFsyMDQsIDEwMiwgICAwXSxcbiAgICBsaWdodFllbGxvdzogIFsyNTUsIDE1MywgIDUxXSxcbiAgICBcbiAgICBibHVlOiAgICAgICAgIFswLCAgICAgMCwgMjU1XSxcbiAgICBsaWdodEJsdWU6ICAgIFsyNiwgIDE0MCwgMjU1XSxcbiAgICBcbiAgICBtYWdlbnRhOiAgICAgIFsyMDQsICAgMCwgMjA0XSxcbiAgICBsaWdodE1hZ2VudGE6IFsyNTUsICAgMCwgMjU1XSxcbiAgICBcbiAgICBjeWFuOiAgICAgICAgIFswLCAgIDE1MywgMjU1XSxcbiAgICBsaWdodEN5YW46ICAgIFswLCAgIDIwNCwgMjU1XSxcbn1cblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbG9yc1xuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiJdfQ==","\"use strict\";\n\nconst { blank } = require ('printable-characters')\n\nmodule.exports = (bullet, arg) => {\n\n                    const isArray = Array.isArray (arg),\n                          lines   = isArray ? arg : arg.split ('\\n'),\n                          indent  = blank (bullet),\n                          result  = lines.map ((line, i) => (i === 0) ? (bullet + line) : (indent + line))\n                    \n                    return isArray ? result : result.join ('\\n')\n                }","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _objectEntries(obj) {\n    var entries = [];\n    var keys = Object.keys(obj);\n\n    for (var k = 0; k < keys.length; ++k) entries.push([keys[k], obj[keys[k]]]);\n\n    return entries;\n}\n\nvar merge = function merge(to, from) {\n\n    for (var prop in from) {\n        Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n    }\n\n    return to;\n};\n\n/*  ------------------------------------------------------------------------ */\n\nvar pipez = module.exports = function (functions_, prev) {\n\n    var functions = {}; // bound to self\n\n    var functionNames = Reflect.ownKeys(functions_); // guaranteed to be in property creation order (as defined by the standard)\n    var self = Object.assign(\n\n    /*  Function of functions (call chain)  */\n\n    function () {\n        for (var _len = arguments.length, initial = Array(_len), _key = 0; _key < _len; _key++) {\n            initial[_key] = arguments[_key];\n        }\n\n        return functionNames.reduce(function (memo, k) {\n            return functions[k].call(self, memo, { initialArguments: initial });\n        }, initial);\n    }, // @hide\n\n    /*  Additional methods     */\n\n    {\n        configure: function configure() {\n            var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\n            var modifiedFunctions = {};\n\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                var _loop = function _loop() {\n                    var k = _step.value;\n\n\n                    var override = overrides[k],\n                        before = overrides['+' + k] || function (x) {\n                        return x;\n                    },\n                        after = overrides[k + '+'] || function (x) {\n                        return x;\n                    };\n\n                    var boundArgs = typeof override === 'boolean' ? { yes: override } : override || {};\n\n                    modifiedFunctions[k] = function (x, args) {\n\n                        var fn = typeof override === 'function' ? override : functions[k]; // dont cache so people can dynamically change .impl ()\n\n                        var newArgs = Object.assign({}, boundArgs, args),\n                            maybeFn = newArgs.yes === false ? function (x) {\n                            return x;\n                        } : fn;\n\n                        return after.call(this, maybeFn.call(this, before.call(this, x, newArgs), newArgs), newArgs);\n                    };\n                };\n\n                for (var _iterator = functionNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    _loop();\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            return pipez(modifiedFunctions, self).methods(this.methods_);\n        },\n        from: function from(name) {\n\n            var subset = null;\n\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = functionNames[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var _k = _step2.value;\n\n                    if (_k === name) {\n                        subset = { takeFirstArgument: function takeFirstArgument(args) {\n                                return args[0];\n                            } };\n                    }\n                    if (subset) {\n                        subset[_k] = functions[_k];\n                    }\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n\n            return pipez(subset, self);\n        },\n        before: function before(name) {\n\n            var subset = {};\n\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n                for (var _iterator3 = functionNames[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                    var _k2 = _step3.value;\n\n                    if (_k2 === name) {\n                        break;\n                    }\n                    subset[_k2] = functions[_k2];\n                }\n            } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                        _iterator3.return();\n                    }\n                } finally {\n                    if (_didIteratorError3) {\n                        throw _iteratorError3;\n                    }\n                }\n            }\n\n            return pipez(subset, self);\n        },\n\n\n        methods_: {},\n\n        methods: function methods(_methods) {\n            return merge(this, merge(this.methods_, _methods));\n        },\n\n\n        get impl() {\n            return functions;\n        },\n        get prev() {\n            return prev;\n        }\n    });\n\n    var _iteratorNormalCompletion4 = true;\n    var _didIteratorError4 = false;\n    var _iteratorError4 = undefined;\n\n    try {\n        for (var _iterator4 = _objectEntries(functions_)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var _step4$value = _slicedToArray(_step4.value, 2),\n                _k3 = _step4$value[0],\n                f = _step4$value[1];\n\n            functions[_k3] = f.bind(self);\n        }\n    } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n            }\n        } finally {\n            if (_didIteratorError4) {\n                throw _iteratorError4;\n            }\n        }\n    }\n\n    return self;\n};\n\n/*  ------------------------------------------------------------------------ */\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3BpcGV6LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOzs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTSxRQUFRLFNBQVIsS0FBUSxDQUFDLEVBQUQsRUFBSyxJQUFMLEVBQWM7O0FBRXhCLFNBQUssSUFBTSxJQUFYLElBQW1CLElBQW5CLEVBQXlCO0FBQUUsZUFBTyxjQUFQLENBQXVCLEVBQXZCLEVBQTJCLElBQTNCLEVBQWlDLE9BQU8sd0JBQVAsQ0FBaUMsSUFBakMsRUFBdUMsSUFBdkMsQ0FBakM7QUFBZ0Y7O0FBRTNHLFdBQU8sRUFBUDtBQUNILENBTEQ7O0FBT0E7O0FBRUEsSUFBTSxRQUFRLE9BQU8sT0FBUCxHQUFpQixVQUFDLFVBQUQsRUFBYSxJQUFiLEVBQXNCOztBQUVqRCxRQUFJLFlBQVksRUFBaEIsQ0FGaUQsQ0FFOUI7O0FBRW5CLFFBQU0sZ0JBQWdCLFFBQVEsT0FBUixDQUFpQixVQUFqQixDQUF0QixDQUppRCxDQUlFO0FBQ25ELFFBQU0sT0FBTyxPQUFPLE1BQVA7O0FBRWI7O0FBRUk7QUFBQSwwQ0FBSSxPQUFKO0FBQUksbUJBQUo7QUFBQTs7QUFBQSxlQUFnQixjQUFjLE1BQWQsQ0FBc0IsVUFBQyxJQUFELEVBQU8sQ0FBUDtBQUFBLG1CQUFhLFVBQVUsQ0FBVixFQUFhLElBQWIsQ0FBbUIsSUFBbkIsRUFBeUIsSUFBekIsRUFBK0IsRUFBRSxrQkFBa0IsT0FBcEIsRUFBL0IsQ0FBYjtBQUFBLFNBQXRCLEVBQWtHLE9BQWxHLENBQWhCO0FBQUEsS0FKUyxFQUltSDs7QUFFaEk7O0FBRUk7QUFDSSxpQkFESix1QkFDK0I7QUFBQSxnQkFBaEIsU0FBZ0IsdUVBQUosRUFBSTs7O0FBRXZCLGdCQUFNLG9CQUFvQixFQUExQjs7QUFGdUI7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSx3QkFJWixDQUpZOzs7QUFNbkIsd0JBQU0sV0FBVyxVQUFVLENBQVYsQ0FBakI7QUFBQSx3QkFDTSxTQUFXLFVBQVUsTUFBTSxDQUFoQixLQUF1QjtBQUFBLCtCQUFLLENBQUw7QUFBQSxxQkFEeEM7QUFBQSx3QkFFTSxRQUFXLFVBQVUsSUFBSSxHQUFkLEtBQXVCO0FBQUEsK0JBQUssQ0FBTDtBQUFBLHFCQUZ4Qzs7QUFJQSx3QkFBTSxZQUFhLE9BQU8sUUFBUCxLQUFvQixTQUFyQixHQUFrQyxFQUFFLEtBQUssUUFBUCxFQUFsQyxHQUF1RCxZQUFZLEVBQXJGOztBQUVBLHNDQUFrQixDQUFsQixJQUF1QixVQUFVLENBQVYsRUFBYSxJQUFiLEVBQW1COztBQUV0Qyw0QkFBTSxLQUFNLE9BQU8sUUFBUCxLQUFvQixVQUFyQixHQUFtQyxRQUFuQyxHQUE4QyxVQUFVLENBQVYsQ0FBekQsQ0FGc0MsQ0FFZ0M7O0FBRXRFLDRCQUFNLFVBQVUsT0FBTyxNQUFQLENBQWUsRUFBZixFQUFtQixTQUFuQixFQUE4QixJQUE5QixDQUFoQjtBQUFBLDRCQUNNLFVBQVcsUUFBUSxHQUFSLEtBQWdCLEtBQWpCLEdBQTJCO0FBQUEsbUNBQUssQ0FBTDtBQUFBLHlCQUEzQixHQUFxQyxFQURyRDs7QUFHQSwrQkFBTyxNQUFNLElBQU4sQ0FBWSxJQUFaLEVBQ0ssUUFBUSxJQUFSLENBQWMsSUFBZCxFQUNJLE9BQU8sSUFBUCxDQUFhLElBQWIsRUFBbUIsQ0FBbkIsRUFBc0IsT0FBdEIsQ0FESixFQUNvQyxPQURwQyxDQURMLEVBRW1ELE9BRm5ELENBQVA7QUFHSCxxQkFWRDtBQVptQjs7QUFJdkIscUNBQWdCLGFBQWhCLDhIQUErQjtBQUFBO0FBbUI5QjtBQXZCc0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF5QnZCLG1CQUFPLE1BQU8saUJBQVAsRUFBMEIsSUFBMUIsRUFBZ0MsT0FBaEMsQ0FBeUMsS0FBSyxRQUE5QyxDQUFQO0FBQ0gsU0EzQkw7QUE2QkksWUE3QkosZ0JBNkJVLElBN0JWLEVBNkJnQjs7QUFFUixnQkFBSSxTQUFTLElBQWI7O0FBRlE7QUFBQTtBQUFBOztBQUFBO0FBSVIsc0NBQWdCLGFBQWhCLG1JQUErQjtBQUFBLHdCQUFwQixFQUFvQjs7QUFDM0Isd0JBQUksT0FBTSxJQUFWLEVBQWdCO0FBQUUsaUNBQVMsRUFBRSxtQkFBbUI7QUFBQSx1Q0FBUSxLQUFLLENBQUwsQ0FBUjtBQUFBLDZCQUFyQixFQUFUO0FBQWlEO0FBQ25FLHdCQUFJLE1BQUosRUFBWTtBQUFFLCtCQUFPLEVBQVAsSUFBWSxVQUFVLEVBQVYsQ0FBWjtBQUEwQjtBQUMzQztBQVBPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBU1IsbUJBQU8sTUFBTyxNQUFQLEVBQWUsSUFBZixDQUFQO0FBQ0gsU0F2Q0w7QUF5Q0ksY0F6Q0osa0JBeUNZLElBekNaLEVBeUNrQjs7QUFFVixnQkFBSSxTQUFTLEVBQWI7O0FBRlU7QUFBQTtBQUFBOztBQUFBO0FBSVYsc0NBQWdCLGFBQWhCLG1JQUErQjtBQUFBLHdCQUFwQixHQUFvQjs7QUFDM0Isd0JBQUksUUFBTSxJQUFWLEVBQWdCO0FBQUU7QUFBTztBQUN6QiwyQkFBTyxHQUFQLElBQVksVUFBVSxHQUFWLENBQVo7QUFDSDtBQVBTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBU1YsbUJBQU8sTUFBTyxNQUFQLEVBQWUsSUFBZixDQUFQO0FBQ0gsU0FuREw7OztBQXFESSxrQkFBVSxFQXJEZDs7QUF1REksZUF2REosbUJBdURhLFFBdkRiLEVBdURzQjtBQUFFLG1CQUFPLE1BQU8sSUFBUCxFQUFhLE1BQU8sS0FBSyxRQUFaLEVBQXNCLFFBQXRCLENBQWIsQ0FBUDtBQUFxRCxTQXZEN0U7OztBQXlESSxZQUFJLElBQUosR0FBWTtBQUFFLG1CQUFPLFNBQVA7QUFBa0IsU0F6RHBDO0FBMERJLFlBQUksSUFBSixHQUFZO0FBQUUsbUJBQU8sSUFBUDtBQUFhO0FBMUQvQixLQVJTLENBQWI7O0FBTGlEO0FBQUE7QUFBQTs7QUFBQTtBQTJFakQsOEJBQW1CLGVBQWdCLFVBQWhCLENBQW5CLG1JQUFnRDtBQUFBO0FBQUEsZ0JBQXRDLEdBQXNDO0FBQUEsZ0JBQW5DLENBQW1DOztBQUFFLHNCQUFVLEdBQVYsSUFBZSxFQUFFLElBQUYsQ0FBUSxJQUFSLENBQWY7QUFBOEI7QUEzRS9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBNkVqRCxXQUFPLElBQVA7QUFDSCxDQTlFRDs7QUFnRkEiLCJmaWxlIjoicGlwZXouZXM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgbWVyZ2UgPSAodG8sIGZyb20pID0+IHtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBmcm9tKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAodG8sIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgKGZyb20sIHByb3ApKSB9XG5cbiAgICByZXR1cm4gdG9cbn1cblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBwaXBleiA9IG1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uc18sIHByZXYpID0+IHtcblxuICAgIGxldCBmdW5jdGlvbnMgPSB7fSAvLyBib3VuZCB0byBzZWxmXG5cbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gUmVmbGVjdC5vd25LZXlzIChmdW5jdGlvbnNfKSAvLyBndWFyYW50ZWVkIHRvIGJlIGluIHByb3BlcnR5IGNyZWF0aW9uIG9yZGVyIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZClcbiAgICBjb25zdCBzZWxmID0gT2JqZWN0LmFzc2lnbiAoXG5cbiAgICAvKiAgRnVuY3Rpb24gb2YgZnVuY3Rpb25zIChjYWxsIGNoYWluKSAgKi9cblxuICAgICAgICAoLi4uaW5pdGlhbCkgPT4gZnVuY3Rpb25OYW1lcy5yZWR1Y2UgKChtZW1vLCBrKSA9PiBmdW5jdGlvbnNba10uY2FsbCAoc2VsZiwgbWVtbywgeyBpbml0aWFsQXJndW1lbnRzOiBpbml0aWFsIH0pLCBpbml0aWFsKSwgLy8gQGhpZGVcblxuICAgIC8qICBBZGRpdGlvbmFsIG1ldGhvZHMgICAgICovXG5cbiAgICAgICAge1xuICAgICAgICAgICAgY29uZmlndXJlIChvdmVycmlkZXMgPSB7fSkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZWRGdW5jdGlvbnMgPSB7fVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGZ1bmN0aW9uTmFtZXMpIHtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IG92ZXJyaWRlc1trXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICAgPSBvdmVycmlkZXNbJysnICsga10gfHwgKHggPT4geCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyICAgID0gb3ZlcnJpZGVzW2sgKyAnKyddIHx8ICh4ID0+IHgpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRBcmdzID0gKHR5cGVvZiBvdmVycmlkZSA9PT0gJ2Jvb2xlYW4nKSA/IHsgeWVzOiBvdmVycmlkZSB9IDogKG92ZXJyaWRlIHx8IHt9KVxuXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkRnVuY3Rpb25zW2tdID0gZnVuY3Rpb24gKHgsIGFyZ3MpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm4gPSAodHlwZW9mIG92ZXJyaWRlID09PSAnZnVuY3Rpb24nKSA/IG92ZXJyaWRlIDogZnVuY3Rpb25zW2tdIC8vIGRvbnQgY2FjaGUgc28gcGVvcGxlIGNhbiBkeW5hbWljYWxseSBjaGFuZ2UgLmltcGwgKClcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3QXJncyA9IE9iamVjdC5hc3NpZ24gKHt9LCBib3VuZEFyZ3MsIGFyZ3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVGbiA9IChuZXdBcmdzLnllcyA9PT0gZmFsc2UpID8gKHggPT4geCkgOiBmblxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWZ0ZXIuY2FsbCAodGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlRm4uY2FsbCAodGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUuY2FsbCAodGhpcywgeCwgbmV3QXJncyksIG5ld0FyZ3MpLCBuZXdBcmdzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpcGV6IChtb2RpZmllZEZ1bmN0aW9ucywgc2VsZikubWV0aG9kcyAodGhpcy5tZXRob2RzXylcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGZyb20gKG5hbWUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJzZXQgPSBudWxsXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgZnVuY3Rpb25OYW1lcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoayA9PT0gbmFtZSkgeyBzdWJzZXQgPSB7IHRha2VGaXJzdEFyZ3VtZW50OiBhcmdzID0+IGFyZ3NbMF0gfSB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzZXQpIHsgc3Vic2V0W2tdID0gZnVuY3Rpb25zW2tdIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGlwZXogKHN1YnNldCwgc2VsZilcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGJlZm9yZSAobmFtZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YnNldCA9IHt9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgZnVuY3Rpb25OYW1lcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoayA9PT0gbmFtZSkgeyBicmVhayB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldFtrXSA9IGZ1bmN0aW9uc1trXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBwaXBleiAoc3Vic2V0LCBzZWxmKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbWV0aG9kc186IHt9LFxuXG4gICAgICAgICAgICBtZXRob2RzIChtZXRob2RzKSB7IHJldHVybiBtZXJnZSAodGhpcywgbWVyZ2UgKHRoaXMubWV0aG9kc18sIG1ldGhvZHMpKSB9LFxuXG4gICAgICAgICAgICBnZXQgaW1wbCAoKSB7IHJldHVybiBmdW5jdGlvbnMgfSxcbiAgICAgICAgICAgIGdldCBwcmV2ICgpIHsgcmV0dXJuIHByZXYgfVxuICAgICAgICB9XG4gICAgKVxuXG4gICAgZm9yIChsZXQgW2ssIGZdIG9mIE9iamVjdC5lbnRyaWVzIChmdW5jdGlvbnNfKSkgeyBmdW5jdGlvbnNba10gPSBmLmJpbmQgKHNlbGYpIH1cblxuICAgIHJldHVybiBzZWxmXG59XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiJdfQ==","\"use strict\";\n\nfunction _objectValues(obj) {\n    var values = [];\n    var keys = Object.keys(obj);\n\n    for (var k = 0; k < keys.length; ++k) values.push(obj[keys[k]]);\n\n    return values;\n}\n\nfunction _objectEntries(obj) {\n    var entries = [];\n    var keys = Object.keys(obj);\n\n    for (var k = 0; k < keys.length; ++k) entries.push([keys[k], obj[keys[k]]]);\n\n    return entries;\n}\n\nconst bullet = require('string.bullet'),\n      isBrowser = typeof window !== 'undefined' && window.window === window && window.navigator,\n      isURL = x => typeof URL !== 'undefined' && x instanceof URL,\n      maxOf = (arr, pick) => arr.reduce((max, s) => Math.max(max, pick ? pick(s) : s), 0),\n      isInteger = Number.isInteger || (value => typeof value === 'number' && isFinite(value) && Math.floor(value) === value),\n      isTypedArray = x => x instanceof Float32Array || x instanceof Float64Array || x instanceof Int8Array || x instanceof Uint8Array || x instanceof Uint8ClampedArray || x instanceof Int16Array || x instanceof Int32Array || x instanceof Uint32Array;\n\nconst assignProps = (to, from) => {\n    for (const prop in from) {\n        Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n    };return to;\n};\n\nconst escapeStr = x => x.replace(/\\n/g, '\\\\n').replace(/\\'/g, \"\\\\'\").replace(/\\\"/g, '\\\\\"');\n\nconst { first, strlen } = require('printable-characters'); // handles ANSI codes and invisible characters\n\nconst limit = (s, n) => s && (strlen(s) <= n ? s : first(s, n - 1) + '…');\n\nconst configure = cfg => {\n\n    const stringify = x => {\n\n        const state = Object.assign({ parents: new Set(), siblings: new Map() }, cfg);\n\n        if (cfg.pretty === 'auto') {\n            const oneLine = stringify.configure({ pretty: false, siblings: new Map() })(x);\n            return oneLine.length <= cfg.maxLength ? oneLine : stringify.configure({ pretty: true, siblings: new Map() })(x);\n        }\n\n        var customFormat = cfg.formatter && cfg.formatter(x, stringify);\n\n        if (typeof customFormat === 'string') {\n            return customFormat;\n        }\n\n        if (typeof jQuery !== 'undefined' && x instanceof jQuery) {\n            x = x.toArray();\n        } else if (isTypedArray(x)) {\n            x = Array.from(x);\n        } else if (isURL(x)) {\n            x = x.toString();\n        }\n\n        if (isBrowser && x === window) {\n            return 'window';\n        } else if (!isBrowser && typeof global !== 'undefined' && x === global) {\n            return 'global';\n        } else if (x === null) {\n            return 'null';\n        } else if (x instanceof Date) {\n            return state.pure ? x.getTime() : \"📅  \" + x.toString();\n        } else if (x instanceof RegExp) {\n            return state.json ? '\"' + x.toString() + '\"' : x.toString();\n        } else if (state.parents.has(x)) {\n            return state.pure ? undefined : '<cyclic>';\n        } else if (!state.pure && state.siblings.has(x)) {\n            return '<ref:' + state.siblings.get(x) + '>';\n        } else if (x && typeof Symbol !== 'undefined' && (customFormat = x[Symbol.for('String.ify')]) && typeof customFormat === 'function' && typeof (customFormat = customFormat.call(x, stringify.configure(state))) === 'string') {\n\n            return customFormat;\n        } else if (typeof x === 'function') {\n            return cfg.pure ? x.toString() : x.name ? '<function:' + x.name + '>' : '<function>';\n        } else if (typeof x === 'string') {\n            return '\"' + escapeStr(limit(x, cfg.pure ? Number.MAX_SAFE_INTEGER : cfg.maxStringLength)) + '\"';\n        } else if (x instanceof Promise && !state.pure) {\n            return '<Promise>';\n        } else if (typeof x === 'object') {\n\n            state.parents.add(x);\n            state.siblings.set(x, state.siblings.size);\n\n            const result = stringify.configure(Object.assign({}, state, { pretty: state.pretty === false ? false : 'auto', depth: state.depth + 1 })).object(x);\n\n            state.parents.delete(x);\n\n            return result;\n        } else if (typeof x === 'number' && !isInteger(x) && cfg.precision > 0) {\n            return x.toFixed(cfg.precision);\n        } else {\n            return String(x);\n        }\n    };\n\n    /*  API  */\n\n    assignProps(stringify, {\n\n        state: cfg,\n\n        configure: newConfig => configure(Object.assign({}, cfg, newConfig)),\n\n        /*  TODO: generalize generation of these chain-style .configure helpers (maybe in a separate library, as it looks like a common pattern)    */\n\n        get pretty() {\n            return stringify.configure({ pretty: true });\n        },\n        get noPretty() {\n            return stringify.configure({ pretty: false });\n        },\n        get noFancy() {\n            return stringify.configure({ fancy: false });\n        },\n        get noRightAlignKeys() {\n            return stringify.configure({ rightAlignKeys: false });\n        },\n\n        get json() {\n            return stringify.configure({ json: true, pure: true });\n        },\n        get pure() {\n            return stringify.configure({ pure: true });\n        },\n\n        maxStringLength(n = Number.MAX_SAFE_INTEGER) {\n            return stringify.configure({ maxStringLength: n });\n        },\n        maxArrayLength(n = Number.MAX_SAFE_INTEGER) {\n            return stringify.configure({ maxArrayLength: n });\n        },\n        maxObjectLength(n = Number.MAX_SAFE_INTEGER) {\n            return stringify.configure({ maxObjectLength: n });\n        },\n        maxDepth(n = Number.MAX_SAFE_INTEGER) {\n            return stringify.configure({ maxDepth: n });\n        },\n        maxLength(n = Number.MAX_SAFE_INTEGER) {\n            return stringify.configure({ maxLength: n });\n        },\n        indentation(n) {\n            return stringify.configure({ indentation: n });\n        },\n\n        precision(p) {\n            return stringify.configure({ precision: p });\n        },\n        formatter(f) {\n            return stringify.configure({ formatter: f });\n        },\n\n        /*  Some undocumented internals    */\n\n        limit,\n\n        rightAlign: strings => {\n            var max = maxOf(strings, s => s.length);\n            return strings.map(s => ' '.repeat(max - s.length) + s);\n        },\n\n        object: x => {\n\n            if (x instanceof Set) {\n                x = Array.from(x.values());\n            } else if (x instanceof Map) {\n                x = Array.from(x.entries());\n            }\n\n            const isArray = Array.isArray(x);\n\n            if (isBrowser) {\n\n                if (x instanceof Element) {\n                    return '<' + (x.tagName.toLowerCase() + (x.id && '#' + x.id || '') + (x.className && '.' + x.className || '')) + '>';\n                } else if (x instanceof Text) {\n                    return '@' + stringify.limit(x.wholeText, 20);\n                }\n            }\n\n            const entries = _objectEntries(x);\n\n            const tooDeep = cfg.depth > cfg.maxDepth,\n                  tooBig = isArray ? entries.length > cfg.maxArrayLength : entries.length > cfg.maxObjectLength;\n\n            if (!cfg.pure && (tooDeep || tooBig)) {\n                return '<' + (isArray ? 'array' : 'object') + '[' + entries.length + ']>';\n            }\n\n            const quoteKey = cfg.json ? k => '\"' + escapeStr(k) + '\"' : k => /^[A-z][A-z0-9]*$/.test(k) ? k : \"'\" + escapeStr(k) + \"'\";\n\n            if (cfg.pretty) {\n\n                const values = _objectValues(x),\n                      right = cfg.rightAlignKeys && cfg.fancy,\n                      printedKeys = (right ? stringify.rightAlign : x => x)(Object.keys(x).map(k => quoteKey(k) + ': ')),\n                      printedValues = values.map(stringify),\n                      brace = isArray ? '[' : '{',\n                      endBrace = isArray ? ']' : '}';\n\n                if (cfg.fancy) {\n\n                    const leftPaddings = printedValues.map((x, i) => !right ? 0 : x[0] === '[' || x[0] === '{' ? 3 : typeof values[i] === 'string' ? 1 : 0),\n                          maxLeftPadding = maxOf(leftPaddings),\n                          items = leftPaddings.map((padding, i) => {\n                        const value = ' '.repeat(maxLeftPadding - padding) + printedValues[i];\n                        return isArray ? value : bullet(printedKeys[i], value);\n                    }),\n                          printed = bullet(brace + ' ', items.join(',\\n')),\n                          lines = printed.split('\\n'),\n                          lastLine = lines[lines.length - 1];\n\n                    return printed + (' '.repeat(maxOf(lines, l => l.length) - lastLine.length) + ' ' + endBrace);\n                } else {\n\n                    const indent = cfg.indentation.repeat(cfg.depth);\n\n                    return brace + '\\n' + printedValues.map((x, i) => indent + (isArray ? x : printedKeys[i] + x)).join(',\\n') + '\\n' + cfg.indentation.repeat(cfg.depth - 1) + endBrace;\n                }\n            } else {\n\n                const items = entries.map(kv => (isArray ? '' : quoteKey(kv[0]) + ': ') + stringify(kv[1])),\n                      content = items.join(', ');\n\n                return isArray ? '[' + content + ']' : '{ ' + content + ' }';\n            }\n        }\n    });\n\n    return stringify;\n};\n\nmodule.exports = configure({\n\n    depth: 0,\n    pure: false,\n    json: false,\n    //  color:           false, // not supported yet\n    maxDepth: 5,\n    maxLength: 50,\n    maxArrayLength: 60,\n    maxObjectLength: 200,\n    maxStringLength: 60,\n    precision: undefined,\n    formatter: undefined,\n    pretty: 'auto',\n    rightAlignKeys: true,\n    fancy: true,\n    indentation: '    '\n});\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQUcsQ0FBSCxDQUFYLENBQWhFLENBQWhCO0FBQUEsc0JBQ00sVUFBVSxNQUFNLElBQU4sQ0FBWSxJQUFaLENBRGhCOztBQUdBLHVCQUFPLFVBQ0ksTUFBTyxPQUFQLEdBQWtCLEdBRHRCLEdBRUksT0FBTyxPQUFQLEdBQWlCLElBRjVCO0FBR0g7QUFDSjtBQWxIbUIsS0FBeEI7O0FBcUhBLFdBQU8sU0FBUDtBQUNILENBMU1MOztBQTRNQSxPQUFPLE9BQVAsR0FBaUIsVUFBVzs7QUFFUixXQUFpQixDQUZUO0FBR1IsVUFBaUIsS0FIVDtBQUlSLFVBQWlCLEtBSlQ7QUFLWjtBQUNJLGNBQWlCLENBTlQ7QUFPUixlQUFpQixFQVBUO0FBUVIsb0JBQWlCLEVBUlQ7QUFTUixxQkFBaUIsR0FUVDtBQVVSLHFCQUFpQixFQVZUO0FBV1IsZUFBaUIsU0FYVDtBQVlSLGVBQWlCLFNBWlQ7QUFhUixZQUFnQixNQWJSO0FBY1Isb0JBQWlCLElBZFQ7QUFlUixXQUFpQixJQWZUO0FBZ0JSLGlCQUFnQjtBQWhCUixDQUFYLENBQWpCIiwiZmlsZSI6InN0cmluZy5pZnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYnVsbGV0ICAgICAgID0gcmVxdWlyZSAoJ3N0cmluZy5idWxsZXQnKSxcbiAgICAgIGlzQnJvd3NlciAgICA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgJiYgKHdpbmRvdy53aW5kb3cgPT09IHdpbmRvdykgJiYgd2luZG93Lm5hdmlnYXRvcixcbiAgICAgIGlzVVJMICAgICAgICA9IHggPT4gKHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnKSAmJiAoeCBpbnN0YW5jZW9mIFVSTCksXG4gICAgICBtYXhPZiAgICAgICAgPSAoYXJyLCBwaWNrKSA9PiBhcnIucmVkdWNlICgobWF4LCBzKSA9PiBNYXRoLm1heCAobWF4LCBwaWNrID8gcGljayAocykgOiBzKSwgMCksXG4gICAgICBpc0ludGVnZXIgICAgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8ICh2YWx1ZSA9PiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgJiYgaXNGaW5pdGUgKHZhbHVlKSAmJiAoTWF0aC5mbG9vciAodmFsdWUpID09PSB2YWx1ZSkpLFxuICAgICAgaXNUeXBlZEFycmF5ID0geCA9PiAoeCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHggaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh4IGluc3RhbmNlb2YgSW50OEFycmF5KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoeCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh4IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh4IGluc3RhbmNlb2YgSW50MTZBcnJheSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHggaW5zdGFuY2VvZiBJbnQzMkFycmF5KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoeCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KVxuXG5jb25zdCBhc3NpZ25Qcm9wcyA9ICh0bywgZnJvbSkgPT4geyBmb3IgKGNvbnN0IHByb3AgaW4gZnJvbSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkgKHRvLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIChmcm9tLCBwcm9wKSkgfTsgcmV0dXJuIHRvIH1cblxuY29uc3QgZXNjYXBlU3RyID0geCA9PiB4LnJlcGxhY2UgKC9cXG4vZywgJ1xcXFxuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlICgvXFwnL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlICgvXFxcIi9nLCAnXFxcXFwiJylcblxuY29uc3QgeyBmaXJzdCwgc3RybGVuIH0gPSByZXF1aXJlICgncHJpbnRhYmxlLWNoYXJhY3RlcnMnKSAvLyBoYW5kbGVzIEFOU0kgY29kZXMgYW5kIGludmlzaWJsZSBjaGFyYWN0ZXJzXG5cbmNvbnN0IGxpbWl0ID0gKHMsIG4pID0+IHMgJiYgKChzdHJsZW4gKHMpIDw9IG4pID8gcyA6IChmaXJzdCAocywgbiAtIDEpICsgJ+KApicpKVxuXG5jb25zdCBjb25maWd1cmUgPSBjZmcgPT4ge1xuXG4gICAgY29uc3Qgc3RyaW5naWZ5ID0geCA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gT2JqZWN0LmFzc2lnbiAoeyBwYXJlbnRzOiBuZXcgU2V0ICgpLCBzaWJsaW5nczogbmV3IE1hcCAoKSB9LCBjZmcpXG5cbiAgICAgICAgICAgIGlmIChjZmcucHJldHR5ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAgIG9uZUxpbmUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeS5jb25maWd1cmUgKHsgcHJldHR5OiBmYWxzZSwgc2libGluZ3M6IG5ldyBNYXAgKCkgfSkgKHgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvbmVMaW5lLmxlbmd0aCA8PSBjZmcubWF4TGVuZ3RoKSA/IG9uZUxpbmUgOiBzdHJpbmdpZnkuY29uZmlndXJlICh7IHByZXR0eTogdHJ1ZSwgIHNpYmxpbmdzOiBuZXcgTWFwICgpIH0pICh4KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VzdG9tRm9ybWF0ID0gY2ZnLmZvcm1hdHRlciAmJiBjZmcuZm9ybWF0dGVyICh4LCBzdHJpbmdpZnkpXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VzdG9tRm9ybWF0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21Gb3JtYXQgfVxuXG4gICAgICAgICAgXG4gICAgICAgICAgICBpZiAoKHR5cGVvZiBqUXVlcnkgIT09ICd1bmRlZmluZWQnKSAmJiAoeCBpbnN0YW5jZW9mIGpRdWVyeSkpIHtcbiAgICAgICAgICAgICAgICB4ID0geC50b0FycmF5ICgpIH1cbiAgICAgICAgICBcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVHlwZWRBcnJheSAoeCkpIHtcbiAgICAgICAgICAgICAgICB4ID0gQXJyYXkuZnJvbSAoeCkgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBlbHNlIGlmIChpc1VSTCAoeCkpIHtcbiAgICAgICAgICAgICAgICB4ID0geC50b1N0cmluZyAoKSB9XG5cbiAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIgJiYgKHggPT09IHdpbmRvdykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3dpbmRvdycgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICghaXNCcm93c2VyICYmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgJiYgKHggPT09IGdsb2JhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2dsb2JhbCcgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJyB9XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnB1cmUgPyB4LmdldFRpbWUgKCkgOiBcIvCfk4UgIFwiICsgeC50b1N0cmluZyAoKSB9XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuanNvbiA/ICdcIicgKyB4LnRvU3RyaW5nICgpICsgJ1wiJyA6IHgudG9TdHJpbmcgKCkgfVxuXG4gICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRzLmhhcyAoeCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUucHVyZSA/IHVuZGVmaW5lZCA6ICc8Y3ljbGljPicgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICghc3RhdGUucHVyZSAmJiBzdGF0ZS5zaWJsaW5ncy5oYXMgKHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICc8cmVmOicgKyBzdGF0ZS5zaWJsaW5ncy5nZXQgKHgpICsgJz4nIH1cblxuICAgICAgICAgICAgZWxzZSBpZiAoeCAmJiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICYmIChjdXN0b21Gb3JtYXQgPSB4W1N5bWJvbC5mb3IgKCdTdHJpbmcuaWZ5JyldKVxuICAgICAgICAgICAgICAgICAgICAgICAmJiAodHlwZW9mIGN1c3RvbUZvcm1hdCA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgJiYgKHR5cGVvZiAoY3VzdG9tRm9ybWF0ID0gY3VzdG9tRm9ybWF0LmNhbGwgKHgsIHN0cmluZ2lmeS5jb25maWd1cmUgKHN0YXRlKSkpID09PSAnc3RyaW5nJykpIHtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21Gb3JtYXQgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoY2ZnLnB1cmUgPyB4LnRvU3RyaW5nICgpIDogKHgubmFtZSA/ICgnPGZ1bmN0aW9uOicgKyB4Lm5hbWUgKyAnPicpIDogJzxmdW5jdGlvbj4nKSkgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIGVzY2FwZVN0ciAobGltaXQgKHgsIGNmZy5wdXJlID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBjZmcubWF4U3RyaW5nTGVuZ3RoKSkgKyAnXCInIH1cblxuICAgICAgICAgICAgZWxzZSBpZiAoKHggaW5zdGFuY2VvZiBQcm9taXNlKSAmJiAhc3RhdGUucHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnPFByb21pc2U+JyB9XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuXG4gICAgICAgICAgICAgICAgc3RhdGUucGFyZW50cy5hZGQgKHgpXG4gICAgICAgICAgICAgICAgc3RhdGUuc2libGluZ3Muc2V0ICh4LCBzdGF0ZS5zaWJsaW5ncy5zaXplKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoT2JqZWN0LmFzc2lnbiAoe30sIHN0YXRlLCB7IHByZXR0eTogc3RhdGUucHJldHR5ID09PSBmYWxzZSA/IGZhbHNlIDogJ2F1dG8nLCBkZXB0aDogc3RhdGUuZGVwdGggKyAxIH0pKS5vYmplY3QgKHgpXG5cbiAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRzLmRlbGV0ZSAoeClcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgfVxuXG4gICAgICAgICAgICBlbHNlIGlmICgodHlwZW9mIHggPT09ICdudW1iZXInKSAmJiAhaXNJbnRlZ2VyICh4KSAmJiAoY2ZnLnByZWNpc2lvbiA+IDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgudG9GaXhlZCAoY2ZnLnByZWNpc2lvbikgfVxuXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nICh4KSB9XG4gICAgICAgIH1cblxuICAgIC8qICBBUEkgICovXG5cbiAgICAgICAgYXNzaWduUHJvcHMgKHN0cmluZ2lmeSwge1xuXG4gICAgICAgICAgICBzdGF0ZTogY2ZnLFxuXG4gICAgICAgICAgICBjb25maWd1cmU6IG5ld0NvbmZpZyA9PiBjb25maWd1cmUgKE9iamVjdC5hc3NpZ24gKHt9LCBjZmcsIG5ld0NvbmZpZykpLFxuXG4gICAgICAgIC8qICBUT0RPOiBnZW5lcmFsaXplIGdlbmVyYXRpb24gb2YgdGhlc2UgY2hhaW4tc3R5bGUgLmNvbmZpZ3VyZSBoZWxwZXJzIChtYXliZSBpbiBhIHNlcGFyYXRlIGxpYnJhcnksIGFzIGl0IGxvb2tzIGxpa2UgYSBjb21tb24gcGF0dGVybikgICAgKi9cblxuICAgICAgICAgICAgZ2V0IHByZXR0eSAgICAgICAgICAgKCkgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBwcmV0dHk6IHRydWUgfSkgfSxcbiAgICAgICAgICAgIGdldCBub1ByZXR0eSAgICAgICAgICgpIHsgcmV0dXJuIHN0cmluZ2lmeS5jb25maWd1cmUgKHsgcHJldHR5OiBmYWxzZSB9KSB9LFxuICAgICAgICAgICAgZ2V0IG5vRmFuY3kgICAgICAgICAgKCkgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBmYW5jeTogIGZhbHNlIH0pIH0sXG4gICAgICAgICAgICBnZXQgbm9SaWdodEFsaWduS2V5cyAoKSB7IHJldHVybiBzdHJpbmdpZnkuY29uZmlndXJlICh7IHJpZ2h0QWxpZ25LZXlzOiBmYWxzZSB9KSB9LFxuXG4gICAgICAgICAgICBnZXQganNvbiAoKSB7IHJldHVybiBzdHJpbmdpZnkuY29uZmlndXJlICh7IGpzb246IHRydWUsIHB1cmU6IHRydWUgfSkgfSxcbiAgICAgICAgICAgIGdldCBwdXJlICgpIHsgcmV0dXJuIHN0cmluZ2lmeS5jb25maWd1cmUgKHsgcHVyZTogdHJ1ZSB9KSB9LFxuXG4gICAgICAgICAgICBtYXhTdHJpbmdMZW5ndGggKG4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBtYXhTdHJpbmdMZW5ndGg6IG4gfSkgfSxcbiAgICAgICAgICAgIG1heEFycmF5TGVuZ3RoICAobiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7IHJldHVybiBzdHJpbmdpZnkuY29uZmlndXJlICh7IG1heEFycmF5TGVuZ3RoOiBuIH0pIH0sXG4gICAgICAgICAgICBtYXhPYmplY3RMZW5ndGggKG4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBtYXhPYmplY3RMZW5ndGg6IG4gfSkgfSxcbiAgICAgICAgICAgIG1heERlcHRoICAgICAgICAobiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7IHJldHVybiBzdHJpbmdpZnkuY29uZmlndXJlICh7IG1heERlcHRoOiBuIH0pIH0sXG4gICAgICAgICAgICBtYXhMZW5ndGggICAgICAgKG4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBtYXhMZW5ndGg6IG4gfSkgfSxcbiAgICAgICAgICAgIGluZGVudGF0aW9uICAgICAobikgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBzdHJpbmdpZnkuY29uZmlndXJlICh7IGluZGVudGF0aW9uOiBuIH0pIH0sXG5cbiAgICAgICAgICAgIHByZWNpc2lvbiAocCkgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBwcmVjaXNpb246IHAgfSkgfSxcbiAgICAgICAgICAgIGZvcm1hdHRlciAoZikgeyByZXR1cm4gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBmb3JtYXR0ZXI6IGYgfSkgfSxcblxuICAgICAgICAvKiAgU29tZSB1bmRvY3VtZW50ZWQgaW50ZXJuYWxzICAgICovXG5cbiAgICAgICAgICAgIGxpbWl0LFxuXG4gICAgICAgICAgICByaWdodEFsaWduOiBzdHJpbmdzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gbWF4T2YgKHN0cmluZ3MsIHMgPT4gcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3MubWFwIChzID0+ICcgJy5yZXBlYXQgKG1heCAtIHMubGVuZ3RoKSArIHMpIH0sXG5cbiAgICAgICAgICAgIG9iamVjdDogeCA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gQXJyYXkuZnJvbSAoeC52YWx1ZXMgKCkpIH1cblxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IEFycmF5LmZyb20gKHguZW50cmllcyAoKSkgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgKHgpXG5cbiAgICAgICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPCcgKyAoeC50YWdOYW1lLnRvTG93ZXJDYXNlICgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeC5pZCAmJiAoJyMnICsgeC5pZCkpIHx8ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHguY2xhc3NOYW1lICYmICgnLicgKyB4LmNsYXNzTmFtZSkpIHx8ICcnKSkgKyAnPicgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeCBpbnN0YW5jZW9mIFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQCcgKyBzdHJpbmdpZnkubGltaXQgKHgud2hvbGVUZXh0LCAyMCkgfSB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMgKHgpXG5cbiAgICAgICAgICAgICAgICBjb25zdCB0b29EZWVwID0gKGNmZy5kZXB0aCA+IGNmZy5tYXhEZXB0aClcbiAgICAgICAgICAgICAgICAgICAgLCB0b29CaWcgID0gKGlzQXJyYXkgPyAoZW50cmllcy5sZW5ndGggPiBjZmcubWF4QXJyYXlMZW5ndGgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW50cmllcy5sZW5ndGggPiBjZmcubWF4T2JqZWN0TGVuZ3RoKSlcblxuICAgICAgICAgICAgICAgIGlmICghY2ZnLnB1cmUgJiYgKHRvb0RlZXAgfHwgdG9vQmlnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgKGlzQXJyYXkgPyAnYXJyYXknIDogJ29iamVjdCcpICsgJ1snICsgZW50cmllcy5sZW5ndGggKyAnXT4nXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcXVvdGVLZXkgPSAoY2ZnLmpzb24gPyAoayA9PiAnXCInICsgZXNjYXBlU3RyIChrKSArICdcIicpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrID0+IC9eW0Etel1bQS16MC05XSokLy50ZXN0IChrKSA/IGsgOiAoXCInXCIgKyBlc2NhcGVTdHIgKGspICsgXCInXCIpKSlcblxuICAgICAgICAgICAgICAgIGlmIChjZmcucHJldHR5KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzICAgICAgICA9IE9iamVjdC52YWx1ZXMgKHgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCAgICAgICAgID0gY2ZnLnJpZ2h0QWxpZ25LZXlzICYmIGNmZy5mYW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlZEtleXMgICA9IChyaWdodCA/IHN0cmluZ2lmeS5yaWdodEFsaWduIDogeCA9PiB4KSAoT2JqZWN0LmtleXMgKHgpLm1hcCAoayA9PiBxdW90ZUtleSAoaykgKyAnOiAnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZWRWYWx1ZXMgPSB2YWx1ZXMubWFwIChzdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAgICAgICAgID0gaXNBcnJheSA/ICdbJyA6ICd7JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQnJhY2UgICAgICA9IGlzQXJyYXkgPyAnXScgOiAnfSdcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmZhbmN5KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRQYWRkaW5ncyA9IHByaW50ZWRWYWx1ZXMubWFwICgoeCwgaSkgPT4gKCFyaWdodCA/IDAgOiAoKHhbMF0gPT09ICdbJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHhbMF0gPT09ICd7JykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgodHlwZW9mIHZhbHVlc1tpXSA9PT0gJ3N0cmluZycpID8gMSA6IDApKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMZWZ0UGFkZGluZyA9IG1heE9mIChsZWZ0UGFkZGluZ3MpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGxlZnRQYWRkaW5ncy5tYXAgKChwYWRkaW5nLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICcgJy5yZXBlYXQgKG1heExlZnRQYWRkaW5nIC0gcGFkZGluZykgKyBwcmludGVkVmFsdWVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNBcnJheSA/IHZhbHVlIDogYnVsbGV0IChwcmludGVkS2V5c1tpXSwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVkICAgID0gYnVsbGV0IChicmFjZSArICcgJywgaXRlbXMuam9pbiAoJyxcXG4nKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyAgICAgID0gcHJpbnRlZC5zcGxpdCAoJ1xcbicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExpbmUgICA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmludGVkICsgICgnICcucmVwZWF0IChtYXhPZiAobGluZXMsIGwgPT4gbC5sZW5ndGgpIC0gbGFzdExpbmUubGVuZ3RoKSArICcgJyArIGVuZEJyYWNlKVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGVudCA9IGNmZy5pbmRlbnRhdGlvbi5yZXBlYXQgKGNmZy5kZXB0aClcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJyYWNlICsgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlZFZhbHVlcy5tYXAgKCh4LCBpKSA9PiBpbmRlbnQgKyAoaXNBcnJheSA/IHggOiAocHJpbnRlZEtleXNbaV0gKyB4KSkpLmpvaW4gKCcsXFxuJykgKyAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmcuaW5kZW50YXRpb24ucmVwZWF0IChjZmcuZGVwdGggLSAxKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQnJhY2VcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyAgID0gZW50cmllcy5tYXAgKGt2ID0+IChpc0FycmF5ID8gJycgOiAocXVvdGVLZXkgKGt2WzBdKSArICc6ICcpKSArIHN0cmluZ2lmeSAoa3ZbMV0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGl0ZW1zLmpvaW4gKCcsICcpXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgnWycgICsgY29udGVudCArICAnXScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoJ3sgJyArIGNvbnRlbnQgKyAnIH0nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc3RyaW5naWZ5XG4gICAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbmZpZ3VyZSAoe1xuXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoOiAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgcHVyZTogICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAganNvbjogICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyAgY29sb3I6ICAgICAgICAgICBmYWxzZSwgLy8gbm90IHN1cHBvcnRlZCB5ZXRcbiAgICAgICAgICAgICAgICAgICAgbWF4RGVwdGg6ICAgICAgICA1LFxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg6ICAgICAgIDUwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBcnJheUxlbmd0aDogIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhPYmplY3RMZW5ndGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyaW5nTGVuZ3RoOiA2MCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBwcmV0dHk6ICAgICAgICAgJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICByaWdodEFsaWduS2V5czogIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGZhbmN5OiAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb246ICAgICcgICAgJyxcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiJdfQ==","\"use strict\";\n\n/*  ------------------------------------------------------------------------ */\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineEnumerableProperties(obj, descs) { for (var key in descs) { var desc = descs[key]; desc.configurable = desc.enumerable = true; if (\"value\" in desc) desc.writable = true; Object.defineProperty(obj, key, desc); } return obj; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }\n\nvar O = Object,\n    StackTracey = require('stacktracey'),\n    ansi = require('ansicolor'),\n    bullet = require('string.bullet'),\n    pipez = require('pipez');\n\n/*  ------------------------------------------------------------------------ */\n\nvar _stringify = require('string.ify').configure({\n    formatter: function formatter(x, stringify) {\n\n        if (x instanceof Error && !(typeof Symbol !== 'undefined' && x[Symbol.for('String.ify')])) {\n\n            if (stringify.state.depth > 0) return '<Error: ' + x.message + '>'; // prevents unwanted pretty printing for Errors that are properties of complex objects\n\n            var indent = '    ',\n                why = stringify.limit((x.message || '').replace(/\\r|\\n/g, '').trim(), stringify.state.maxErrorMessageLength || 120),\n                stack = new StackTracey(x).pretty,\n                stackIndented = stack.split('\\n').map(function (x) {\n                return indent + x;\n            }).join('\\n'),\n                isAssertion = 'actual' in x && 'expected' in x,\n                type = x.constructor.name || 'Error';\n\n            if (isAssertion) {\n\n                var str = stringify.configure({ maxStringLength: Number.MAX_VALUE, maxDepth: 8 });\n\n                var actual = bullet(indent + 'actual:   ', str(x.actual)),\n                    expected = bullet(indent + 'expected: ', str(x.expected));\n\n                if (actual.split('\\n').length > 1 || expected.split('\\n').length > 1) // if multiline actual/expected, need extra whitespace inbetween\n                    actual += '\\n';\n\n                return '[' + type + '] ' + why + '\\n\\n' + ansi.red(actual) + '\\n' + ansi.green(expected) + '\\n\\n' + stackIndented + '\\n';\n            } else {\n                return '[' + type + '] ' + why + '\\n\\n' + stackIndented + '\\n';\n            }\n        }\n    }\n});\n\n/*  ------------------------------------------------------------------------ */\n\nvar _require = require('printable-characters'),\n    isBlank = _require.isBlank,\n    blank = _require.blank,\n    changeLastNonemptyLine = function changeLastNonemptyLine(lines, fn) {\n\n    for (var i = lines.length - 1; i >= 0; i--) {\n\n        if (i === 0 || !isBlank(lines[i])) {\n\n            lines[i] = fn(lines[i]);\n            break;\n        }\n    }\n    return lines;\n};\n\n/*  ------------------------------------------------------------------------ */\n\nvar log = pipez({\n\n    /*  ------------------------------------------------------------------------ */\n\n    stringify: function stringify(args, cfg) {\n        var print = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : cfg.print || _stringify.configure(cfg);\n        return args.map(function (arg) {\n            return typeof arg === 'string' ? arg : print(arg);\n        });\n    },\n\n    trim: function trim(tokens, _ref) {\n        var _ref$max = _ref.max,\n            max = _ref$max === undefined ? undefined : _ref$max;\n        return !max ? tokens : tokens.map(function (t) {\n            return _stringify.limit(t, max);\n        });\n    },\n\n    lines: function lines(tokens, _ref2) {\n        var _ref2$linebreak = _ref2.linebreak,\n            linebreak = _ref2$linebreak === undefined ? '\\n' : _ref2$linebreak;\n\n\n        var lines = [[]];\n        var leftPad = [];\n\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = tokens[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var t = _step.value;\n\n                var _t$split = t.split(linebreak),\n                    _t$split2 = _toArray(_t$split),\n                    first = _t$split2[0],\n                    rest = _t$split2.slice(1);\n\n                lines[lines.length - 1].push(first);\n                lines = [].concat(_toConsumableArray(lines), _toConsumableArray(rest.map(function (t) {\n                    return t ? [].concat(leftPad, [t]) : [];\n                })));\n\n                var pad = blank(!rest.length ? t : rest[rest.length - 1]);\n\n                if (pad) {\n                    leftPad.push(pad);\n                }\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n\n        return lines;\n    },\n\n    concat: function concat(lines, _ref3) {\n        var _ref3$separator = _ref3.separator,\n            separator = _ref3$separator === undefined ? ' ' : _ref3$separator;\n        return lines.map(function (tokens) {\n            return tokens.join(separator);\n        });\n    },\n\n    indent: function indent(lines, _ref4) {\n        var _ref4$level = _ref4.level,\n            level = _ref4$level === undefined ? 0 : _ref4$level,\n            _ref4$pattern = _ref4.pattern,\n            pattern = _ref4$pattern === undefined ? '\\t' : _ref4$pattern;\n        return lines.map(function (line) {\n            return pattern.repeat(level) + line;\n        });\n    },\n\n    tag: function tag(lines, _ref5) {\n        var _ref5$level = _ref5.level,\n            level = _ref5$level === undefined ? '' : _ref5$level,\n            _ref5$levelColor = _ref5.levelColor,\n            levelColor = _ref5$levelColor === undefined ? {\n            'info': ansi.cyan,\n            'warn': ansi.yellow,\n            'debug': ansi.blue,\n            'error': ansi.bright.red } : _ref5$levelColor;\n        return bullet((levelColor[level] || function (s) {\n            return s;\n        })(level.toUpperCase().padStart(6) + '\\t'), lines);\n    },\n\n    time: function time(lines, _ref6) {\n        var _ref6$when = _ref6.when,\n            when = _ref6$when === undefined ? new Date() : _ref6$when,\n            _ref6$format = _ref6.format,\n            format = _ref6$format === undefined ? 'locale' : _ref6$format,\n            _ref6$locale = _ref6.locale,\n            locale = _ref6$locale === undefined ? [] : _ref6$locale,\n            _ref6$options = _ref6.options,\n            options = _ref6$options === undefined ? {} : _ref6$options,\n            _ref6$print = _ref6.print,\n            print = _ref6$print === undefined ? function (when) {\n            return ansi.darkGray(format === 'iso' ? when.toISOString() : format === 'locale' ? when.toLocaleString(locale, options) : format === 'utc' ? when.toUTCString() : when.toString()) + '\\t';\n        } : _ref6$print;\n        return bullet(print(when), lines);\n    },\n\n    locate: function locate(lines, _ref7) {\n        var _ref7$shift = _ref7.shift,\n            shift = _ref7$shift === undefined ? 0 : _ref7$shift,\n            _ref7$where = _ref7.where,\n            where = _ref7$where === undefined ? new StackTracey().clean.at(1 + shift) : _ref7$where,\n            _ref7$join = _ref7.join,\n            join = _ref7$join === undefined ? function (a, sep, b) {\n            return a && b ? a + sep + b : a || b;\n        } : _ref7$join,\n            _ref7$print = _ref7.print,\n            print = _ref7$print === undefined ? function (_ref8) {\n            var calleeShort = _ref8.calleeShort,\n                _ref8$fileName = _ref8.fileName,\n                fileName = _ref8$fileName === undefined ? [] : _ref8$fileName,\n                _ref8$line = _ref8.line,\n                line = _ref8$line === undefined ? [] : _ref8$line;\n            return ansi.darkGray('(' + join(calleeShort, ' @ ', join(fileName, ':', line)) + ')');\n        } : _ref7$print;\n        return changeLastNonemptyLine(lines, function (line) {\n            return join(line, ' ', print(where));\n        });\n    },\n\n    join: function join(lines, _ref9) {\n        var _ref9$linebreak = _ref9.linebreak,\n            linebreak = _ref9$linebreak === undefined ? '\\n' : _ref9$linebreak;\n        return lines.join(linebreak);\n    },\n\n    render: function render(text, _ref10) {\n        var _ref10$engine = _ref10.engine,\n            engine = _ref10$engine === undefined ? typeof window !== 'undefined' && window.window === window && window.navigator ? navigator.userAgent.indexOf('Chrome') >= 0 ? 'chrome' : 'generic' : 'ansi' : _ref10$engine,\n            _ref10$engines = _ref10.engines,\n            engines = _ref10$engines === undefined ? {/* configurable */} : _ref10$engines,\n            _ref10$consoleMethod = _ref10.consoleMethod,\n            consoleMethod = _ref10$consoleMethod === undefined ? 'log' : _ref10$consoleMethod,\n            _ref10$defaults = _ref10.defaults,\n            defaults = _ref10$defaults === undefined ? {\n\n            ansi: function ansi(s) {\n                return console[consoleMethod](s);\n            },\n            chrome: function chrome(s) {\n                var _console;\n\n                return (_console = console)[consoleMethod].apply(_console, _toConsumableArray(ansi.parse(s).asChromeConsoleLogArguments));\n            },\n            generic: function generic(s) {\n                return console[consoleMethod](ansi.strip(s));\n            }\n        } : _ref10$defaults;\n        return text && O.assign(defaults, engines)[engine](text), text;\n    },\n\n    returnValue: function returnValue(__, _ref11) {\n        var _ref11$initialArgumen = _slicedToArray(_ref11.initialArguments, 1),\n            firstArgument = _ref11$initialArgumen[0];\n\n        return firstArgument;\n    }\n\n    /*  ------------------------------------------------------------------------ */\n\n}).configure({\n\n    time: false, // disables some steps (until enabled back explicitly)\n    tag: false\n\n    /*  ------------------------------------------------------------------------ */\n\n}).methods({\n\n    get noop() {\n        return pipez({ returnValue: function returnValue(args) {\n                return args[0];\n            } }).methods(this.methods_);\n    },\n    get null() {\n        return this.noop;\n    }, // LEGACY, DEPRECATED (left here for backward compatibility)\n\n    indent: function indent(level) {\n        return this.configure({ indent: { level: level } });\n    },\n\n\n    get error() {\n        return this.configure({ tag: { level: 'error' }, render: { consoleMethod: 'error' } });\n    },\n    get warn() {\n        return this.configure({ tag: { level: 'warn' }, render: { consoleMethod: 'warn' } });\n    },\n    get info() {\n        return this.configure({ tag: { level: 'info' }, render: { consoleMethod: 'info' } });\n    },\n    get debug() {\n        return this.configure({ tag: { level: 'debug' }, render: { consoleMethod: 'debug' } });\n    },\n\n    maxArrayLength: function maxArrayLength(n) {\n        return this.configure({ stringify: { maxArrayLength: n } });\n    },\n    maxObjectLength: function maxObjectLength(n) {\n        return this.configure({ stringify: { maxObjectLength: n } });\n    },\n    maxDepth: function maxDepth(n) {\n        return this.configure({ stringify: { maxDepth: n } });\n    },\n    maxLength: function maxLength(n) {\n        return this.configure({ stringify: { maxLength: n } });\n    },\n\n\n    get unlimited() {\n        return this.configure({ stringify: { maxStringLength: Number.MAX_VALUE,\n                maxObjectLength: Number.MAX_VALUE,\n                maxArrayLength: Number.MAX_VALUE,\n                maxDepth: Number.MAX_VALUE,\n                maxErrorMessageLength: Number.MAX_VALUE } });\n    },\n\n    get noPretty() {\n        return this.configure({ stringify: { pretty: false } });\n    },\n    get noFancy() {\n        return this.configure({ stringify: { fancy: false } });\n    },\n    get noRightAlignKeys() {\n        return this.configure({ stringify: { rightAlignKeys: false } });\n    },\n    get noLocate() {\n        return this.configure({ locate: false });\n    },\n    precision: function precision(n) {\n        return this.configure({ stringify: { precision: n } });\n    },\n\n\n    get serialize() {\n        return this.before('render');\n    },\n    get deserialize() {\n        return this.from('render');\n    },\n\n    newline: function newline() {\n        return this.from('join')(['']);\n    },\n    handleNodeErrors: function handleNodeErrors() {\n        var _this = this;\n\n        process.on('uncaughtException', function (e) {\n            _this.bright.red.error.noLocate(e);process.exit(1);\n        });\n        process.on('unhandledRejection', function (e) {\n            _this.bright.red.error.noLocate(e);process.exit(1);\n        });\n        return this;\n    }\n});\n\n/*  ------------------------------------------------------------------------ */\n\nansi.names.forEach(function (color) {\n    var _log$methods, _mutatorMap;\n\n    log.methods((_log$methods = {}, _mutatorMap = {}, _mutatorMap[color] = _mutatorMap[color] || {}, _mutatorMap[color].get = function () {\n        return this.configure({ 'concat+': function concat(lines) {\n                return lines.map(ansi[color]);\n            } });\n    }, _defineEnumerableProperties(_log$methods, _mutatorMap), _log$methods));\n});\n\n/*  ------------------------------------------------------------------------ */\n\nmodule.exports = log;\n\n/*  ------------------------------------------------------------------------ */\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWtDUixvQkFsQ1EsOEJBa0NZO0FBQUE7O0FBQ2hCLGdCQUFRLEVBQVIsQ0FBWSxtQkFBWixFQUFrQyxhQUFLO0FBQUUsa0JBQUssTUFBTCxDQUFZLEdBQVosQ0FBZ0IsS0FBaEIsQ0FBc0IsUUFBdEIsQ0FBZ0MsQ0FBaEMsRUFBb0MsUUFBUSxJQUFSLENBQWMsQ0FBZDtBQUFrQixTQUEvRjtBQUNBLGdCQUFRLEVBQVIsQ0FBWSxvQkFBWixFQUFrQyxhQUFLO0FBQUUsa0JBQUssTUFBTCxDQUFZLEdBQVosQ0FBZ0IsS0FBaEIsQ0FBc0IsUUFBdEIsQ0FBZ0MsQ0FBaEMsRUFBb0MsUUFBUSxJQUFSLENBQWMsQ0FBZDtBQUFrQixTQUEvRjtBQUNBLGVBQU8sSUFBUDtBQUNIO0FBdENPLENBL0ZBLENBQVo7O0FBd0lBOztBQUVBLEtBQUssS0FBTCxDQUFXLE9BQVgsQ0FBb0IsaUJBQVM7QUFBQTs7QUFFekIsUUFBSSxPQUFKLG1EQUVTLEtBRlQsZ0JBRVMsS0FGVCxxQkFFUyxLQUZULG9CQUVtQjtBQUFFLGVBQU8sS0FBSyxTQUFMLENBQWdCLEVBQUUsV0FBVztBQUFBLHVCQUFTLE1BQU0sR0FBTixDQUFXLEtBQUssS0FBTCxDQUFYLENBQVQ7QUFBQSxhQUFiLEVBQWhCLENBQVA7QUFBeUUsS0FGOUY7QUFJSCxDQU5EOztBQVFBOztBQUVBLE9BQU8sT0FBUCxHQUFpQixHQUFqQjs7QUFFQSIsImZpbGUiOiJvbG9sb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBPICAgICAgICAgICAgICAgICA9IE9iamVjdFxuICAgICwgU3RhY2tUcmFjZXkgICAgICAgPSByZXF1aXJlICgnc3RhY2t0cmFjZXknKVxuICAgICwgYW5zaSAgICAgICAgICAgICAgPSByZXF1aXJlICgnYW5zaWNvbG9yJylcbiAgICAsIGJ1bGxldCAgICAgICAgICAgID0gcmVxdWlyZSAoJ3N0cmluZy5idWxsZXQnKVxuICAgICwgcGlwZXogICAgICAgICAgICAgPSByZXF1aXJlICgncGlwZXonKVxuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblxuY29uc3Qgc3RyaW5naWZ5ID0gcmVxdWlyZSAoJ3N0cmluZy5pZnknKS5jb25maWd1cmUgKHtcblxuICAgIGZvcm1hdHRlciAoeCwgc3RyaW5naWZ5KSB7XG5cbiAgICAgICAgaWYgKCh4IGluc3RhbmNlb2YgRXJyb3IpICYmICEodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgeFtTeW1ib2wuZm9yICgnU3RyaW5nLmlmeScpXSkpIHtcblxuICAgICAgICAgICAgaWYgKHN0cmluZ2lmeS5zdGF0ZS5kZXB0aCA+IDApIHJldHVybiBgPEVycm9yOiAke3gubWVzc2FnZX0+YCAvLyBwcmV2ZW50cyB1bndhbnRlZCBwcmV0dHkgcHJpbnRpbmcgZm9yIEVycm9ycyB0aGF0IGFyZSBwcm9wZXJ0aWVzIG9mIGNvbXBsZXggb2JqZWN0c1xuXG4gICAgICAgICAgICBjb25zdCBpbmRlbnQgICAgICAgID0gJyAgICAnXG4gICAgICAgICAgICAgICAgLCB3aHkgICAgICAgICAgID0gc3RyaW5naWZ5LmxpbWl0ICgoeC5tZXNzYWdlIHx8ICcnKS5yZXBsYWNlICgvXFxyfFxcbi9nLCAnJykudHJpbSAoKSwgc3RyaW5naWZ5LnN0YXRlLm1heEVycm9yTWVzc2FnZUxlbmd0aCB8fCAxMjApXG4gICAgICAgICAgICAgICAgLCBzdGFjayAgICAgICAgID0gbmV3IFN0YWNrVHJhY2V5ICh4KS5wcmV0dHlcbiAgICAgICAgICAgICAgICAsIHN0YWNrSW5kZW50ZWQgPSBzdGFjay5zcGxpdCAoJ1xcbicpLm1hcCAoeCA9PiBpbmRlbnQgKyB4KS5qb2luICgnXFxuJylcbiAgICAgICAgICAgICAgICAsIGlzQXNzZXJ0aW9uID0gKCdhY3R1YWwnIGluIHgpICYmICgnZXhwZWN0ZWQnIGluIHgpXG4gICAgICAgICAgICAgICAgLCB0eXBlICAgICAgICA9IHguY29uc3RydWN0b3IubmFtZSB8fCAnRXJyb3InXG5cbiAgICAgICAgICAgIGlmIChpc0Fzc2VydGlvbikge1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gc3RyaW5naWZ5LmNvbmZpZ3VyZSAoeyBtYXhTdHJpbmdMZW5ndGg6IE51bWJlci5NQVhfVkFMVUUsIG1heERlcHRoOiA4IH0pXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFjdHVhbCAgID0gYnVsbGV0IChpbmRlbnQgKyAnYWN0dWFsOiAgICcsIHN0ciAoeC5hY3R1YWwpKVxuICAgICAgICAgICAgICAgICAgLCBleHBlY3RlZCA9IGJ1bGxldCAoaW5kZW50ICsgJ2V4cGVjdGVkOiAnLCBzdHIgKHguZXhwZWN0ZWQpKVxuXG4gICAgICAgICAgICAgICAgaWYgKChhY3R1YWwuc3BsaXQgKCdcXG4nKS5sZW5ndGggPiAxKSB8fCAoZXhwZWN0ZWQuc3BsaXQgKCdcXG4nKS5sZW5ndGggPiAxKSkgLy8gaWYgbXVsdGlsaW5lIGFjdHVhbC9leHBlY3RlZCwgbmVlZCBleHRyYSB3aGl0ZXNwYWNlIGluYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICBhY3R1YWwgKz0gJ1xcbidcblxuICAgICAgICAgICAgICAgIHJldHVybiBgWyR7dHlwZX1dICR7d2h5fVxcblxcbiR7YW5zaS5yZWQgKGFjdHVhbCl9XFxuJHthbnNpLmdyZWVuIChleHBlY3RlZCl9XFxuXFxuJHtzdGFja0luZGVudGVkfVxcbmBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBbJHt0eXBlfV0gJHt3aHl9XFxuXFxuJHtzdGFja0luZGVudGVkfVxcbmBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pXG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgeyBpc0JsYW5rLCBibGFuayB9ID0gcmVxdWlyZSAoJ3ByaW50YWJsZS1jaGFyYWN0ZXJzJylcblxuICAgICwgY2hhbmdlTGFzdE5vbmVtcHR5TGluZSA9IChsaW5lcywgZm4pID0+IHtcblxuICAgICAgICBmb3IgKGxldCBpID0gbGluZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKChpID09PSAwKSB8fCAhaXNCbGFuayAobGluZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGluZXNbaV0gPSBmbiAobGluZXNbaV0pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgfVxuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmNvbnN0IGxvZyA9IHBpcGV6ICh7XG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIHN0cmluZ2lmeTogKGFyZ3MsIGNmZywgcHJpbnQgPSBjZmcucHJpbnQgfHwgc3RyaW5naWZ5LmNvbmZpZ3VyZSAoY2ZnKSkgPT4gYXJncy5tYXAgKGFyZyA9PiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpID8gYXJnIDogcHJpbnQgKGFyZykpLFxuICAgIFxuICAgIHRyaW06ICh0b2tlbnMsIHsgbWF4ID0gdW5kZWZpbmVkIH0pID0+ICFtYXggPyB0b2tlbnMgOiB0b2tlbnMubWFwICh0ID0+IHN0cmluZ2lmeS5saW1pdCAodCwgbWF4KSksXG5cbiAgICBsaW5lczogKHRva2VucywgeyBsaW5lYnJlYWsgPSAnXFxuJyB9KSA9PiB7XG5cbiAgICAgICAgbGV0IGxpbmVzID0gW1tdXVxuICAgICAgICBsZXQgbGVmdFBhZCA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRva2Vucykge1xuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gdC5zcGxpdCAobGluZWJyZWFrKVxuXG4gICAgICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5wdXNoIChmaXJzdClcbiAgICAgICAgICAgIGxpbmVzID0gWy4uLmxpbmVzLCAuLi5yZXN0Lm1hcCAodCA9PiB0ID8gWy4uLmxlZnRQYWQsIHRdIDogW10pXVxuXG4gICAgICAgICAgICBjb25zdCBwYWQgPSBibGFuayAoIXJlc3QubGVuZ3RoID8gdCA6IHJlc3RbcmVzdC5sZW5ndGggLSAxXSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHBhZCkgeyBsZWZ0UGFkLnB1c2ggKHBhZCkgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpbmVzXG4gICAgfSxcblxuICAgIGNvbmNhdDogKGxpbmVzLCB7IHNlcGFyYXRvciA9ICcgJyB9KSA9PiBsaW5lcy5tYXAgKHRva2VucyA9PiB0b2tlbnMuam9pbiAoc2VwYXJhdG9yKSksXG5cbiAgICBpbmRlbnQ6IChsaW5lcywgeyBsZXZlbCA9IDAsIHBhdHRlcm4gPSAnXFx0JyB9KSA9PiBsaW5lcy5tYXAgKGxpbmUgPT4gcGF0dGVybi5yZXBlYXQgKGxldmVsKSArIGxpbmUpLFxuICAgIFxuICAgIHRhZzogKGxpbmVzLCB7IGxldmVsID0gJycsXG4gICAgICAgICAgICAgICAgICAgbGV2ZWxDb2xvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nOiBhbnNpLmN5YW4sXG4gICAgICAgICAgICAgICAgICAgICAgICd3YXJuJzogYW5zaS55ZWxsb3csXG4gICAgICAgICAgICAgICAgICAgICAgICdkZWJ1Zyc6IGFuc2kuYmx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzogYW5zaS5icmlnaHQucmVkIH0gfSkgPT4gYnVsbGV0ICgobGV2ZWxDb2xvcltsZXZlbF0gfHwgKHMgPT4gcykpIChsZXZlbC50b1VwcGVyQ2FzZSAoKS5wYWRTdGFydCAoNikgKyAnXFx0JyksIGxpbmVzKSxcblxuICAgIHRpbWU6IChsaW5lcywgeyB3aGVuICAgPSBuZXcgRGF0ZSAoKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gJ2xvY2FsZScsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0ge30sXG4gICAgICAgICAgICAgICAgICAgIHByaW50ICA9IHdoZW4gPT4gYW5zaS5kYXJrR3JheSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmb3JtYXQgPT09ICdpc28nKSAgICA/IHdoZW4udG9JU09TdHJpbmcgKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZm9ybWF0ID09PSAnbG9jYWxlJykgPyB3aGVuLnRvTG9jYWxlU3RyaW5nIChsb2NhbGUsIG9wdGlvbnMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZvcm1hdCA9PT0gJ3V0YycpICAgID8gd2hlbi50b1VUQ1N0cmluZyAoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4udG9TdHJpbmcgKCkpKSkpICsgJ1xcdCcgfSkgPT4gYnVsbGV0IChwcmludCAod2hlbiksIGxpbmVzKSxcblxuICAgIGxvY2F0ZTogKGxpbmVzLCB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSAwLFxuICAgICAgICAgICAgICAgICAgICB3aGVyZSA9IChuZXcgU3RhY2tUcmFjZXkgKCkuY2xlYW4uYXQgKDEgKyBzaGlmdCkpLFxuICAgICAgICAgICAgICAgICAgICBqb2luICA9ICgoYSwgc2VwLCBiKSA9PiAoYSAmJiBiKSA/IChhICsgc2VwICsgYikgOiAoYSB8fCBiKSksXG4gICAgICAgICAgICAgICAgICAgIHByaW50ID0gKHsgY2FsbGVlU2hvcnQsIGZpbGVOYW1lID0gW10sIGxpbmUgPSBbXSB9KSA9PiBhbnNpLmRhcmtHcmF5ICgnKCcgKyBqb2luIChjYWxsZWVTaG9ydCwgJyBAICcsIGpvaW4gKGZpbGVOYW1lLCAnOicsIGxpbmUpKSArICcpJylcblxuICAgICAgICAgICAgICAgIH0pID0+IGNoYW5nZUxhc3ROb25lbXB0eUxpbmUgKGxpbmVzLCBsaW5lID0+IGpvaW4gKGxpbmUsICcgJywgcHJpbnQgKHdoZXJlKSkpLFxuXG4gICAgam9pbjogKGxpbmVzLCB7IGxpbmVicmVhayA9ICdcXG4nIH0pID0+IGxpbmVzLmpvaW4gKGxpbmVicmVhayksXG5cbiAgICByZW5kZXI6ICh0ZXh0LCB7XG5cbiAgICAgICAgZW5naW5lID0gKCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgJiYgKHdpbmRvdy53aW5kb3cgPT09IHdpbmRvdykgJiYgd2luZG93Lm5hdmlnYXRvcilcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZiAoJ0Nocm9tZScpID49IDApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnY2hyb21lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdnZW5lcmljJ1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYW5zaScsXG5cbiAgICAgICAgZW5naW5lcyA9IHsgLyogY29uZmlndXJhYmxlICovIH0sXG5cbiAgICAgICAgY29uc29sZU1ldGhvZCA9ICdsb2cnLFxuXG4gICAgICAgIGRlZmF1bHRzID0ge1xuXG4gICAgICAgICAgICBhbnNpOiAgICBzID0+IGNvbnNvbGVbY29uc29sZU1ldGhvZF0gKHMpLFxuICAgICAgICAgICAgY2hyb21lOiAgcyA9PiBjb25zb2xlW2NvbnNvbGVNZXRob2RdICguLi5hbnNpLnBhcnNlIChzKS5hc0Nocm9tZUNvbnNvbGVMb2dBcmd1bWVudHMpLFxuICAgICAgICAgICAgZ2VuZXJpYzogcyA9PiBjb25zb2xlW2NvbnNvbGVNZXRob2RdIChhbnNpLnN0cmlwIChzKSlcbiAgICAgICAgfVxuXG4gICAgfSkgPT4gKCh0ZXh0ICYmIE8uYXNzaWduIChkZWZhdWx0cywgZW5naW5lcylbZW5naW5lXSAodGV4dCksIHRleHQpKSxcblxuICAgIHJldHVyblZhbHVlOiAoX18sIHsgaW5pdGlhbEFyZ3VtZW50czogW2ZpcnN0QXJndW1lbnRdIH0pID0+IGZpcnN0QXJndW1lbnRcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG59KS5jb25maWd1cmUgKHtcblxuICAgIHRpbWU6IGZhbHNlLCAvLyBkaXNhYmxlcyBzb21lIHN0ZXBzICh1bnRpbCBlbmFibGVkIGJhY2sgZXhwbGljaXRseSlcbiAgICB0YWc6ICBmYWxzZVxuXG4vKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbn0pLm1ldGhvZHMgKHtcblxuICAgIGdldCBub29wICgpIHsgcmV0dXJuIHBpcGV6ICh7IHJldHVyblZhbHVlOiBhcmdzID0+IGFyZ3NbMF0gfSkubWV0aG9kcyAodGhpcy5tZXRob2RzXykgfSxcbiAgICBnZXQgbnVsbCAoKSB7IHJldHVybiB0aGlzLm5vb3AgfSwgLy8gTEVHQUNZLCBERVBSRUNBVEVEIChsZWZ0IGhlcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG5cbiAgICBpbmRlbnQgKGxldmVsKSB7IHJldHVybiB0aGlzLmNvbmZpZ3VyZSAoeyBpbmRlbnQ6IHsgbGV2ZWw6IGxldmVsIH19KSB9LFxuXG4gICAgZ2V0IGVycm9yICgpIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHRhZzogeyBsZXZlbDogJ2Vycm9yJyB9LCByZW5kZXI6IHsgY29uc29sZU1ldGhvZDogJ2Vycm9yJyB9IH0pIH0sXG4gICAgZ2V0IHdhcm4gKCkgIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHRhZzogeyBsZXZlbDogJ3dhcm4nIH0sICByZW5kZXI6IHsgY29uc29sZU1ldGhvZDogJ3dhcm4nIH0gfSkgfSxcbiAgICBnZXQgaW5mbyAoKSAgeyByZXR1cm4gdGhpcy5jb25maWd1cmUgKHsgdGFnOiB7IGxldmVsOiAnaW5mbycgfSwgIHJlbmRlcjogeyBjb25zb2xlTWV0aG9kOiAnaW5mbycgfSB9KSB9LFxuICAgIGdldCBkZWJ1ZyAoKSAgeyByZXR1cm4gdGhpcy5jb25maWd1cmUgKHsgdGFnOiB7IGxldmVsOiAnZGVidWcnIH0sICByZW5kZXI6IHsgY29uc29sZU1ldGhvZDogJ2RlYnVnJyB9IH0pIH0sXG5cbiAgICBtYXhBcnJheUxlbmd0aCAobikgIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHN0cmluZ2lmeTogeyBtYXhBcnJheUxlbmd0aDogbiB9IH0pIH0sXG4gICAgbWF4T2JqZWN0TGVuZ3RoIChuKSB7IHJldHVybiB0aGlzLmNvbmZpZ3VyZSAoeyBzdHJpbmdpZnk6IHsgbWF4T2JqZWN0TGVuZ3RoOiBuIH0gfSkgfSxcbiAgICBtYXhEZXB0aCAobikgICAgICAgIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHN0cmluZ2lmeTogeyBtYXhEZXB0aDogbiB9IH0pIH0sXG4gICAgbWF4TGVuZ3RoIChuKSAgICAgICB7IHJldHVybiB0aGlzLmNvbmZpZ3VyZSAoeyBzdHJpbmdpZnk6IHsgbWF4TGVuZ3RoOiBuIH0gfSkgfSxcbiAgICBcbiAgICBnZXQgdW5saW1pdGVkICgpIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHN0cmluZ2lmeTogeyBtYXhTdHJpbmdMZW5ndGg6IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2JqZWN0TGVuZ3RoOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFycmF5TGVuZ3RoOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlcHRoOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEVycm9yTWVzc2FnZUxlbmd0aDogTnVtYmVyLk1BWF9WQUxVRSB9IH0pIH0sXG5cbiAgICBnZXQgbm9QcmV0dHkgKCkgeyByZXR1cm4gdGhpcy5jb25maWd1cmUgKHsgc3RyaW5naWZ5OiB7IHByZXR0eTogZmFsc2UgfSB9KSB9LFxuICAgIGdldCBub0ZhbmN5ICgpIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHN0cmluZ2lmeTogeyBmYW5jeTogZmFsc2UgfSB9KSB9LFxuICAgIGdldCBub1JpZ2h0QWxpZ25LZXlzICgpIHsgcmV0dXJuIHRoaXMuY29uZmlndXJlICh7IHN0cmluZ2lmeTogeyByaWdodEFsaWduS2V5czogZmFsc2UgfSB9KSB9LFxuICAgIGdldCBub0xvY2F0ZSAoKSB7IHJldHVybiB0aGlzLmNvbmZpZ3VyZSAoeyBsb2NhdGU6IGZhbHNlIH0pIH0sXG4gICAgcHJlY2lzaW9uIChuKSB7IHJldHVybiB0aGlzLmNvbmZpZ3VyZSAoeyBzdHJpbmdpZnk6IHsgcHJlY2lzaW9uOiBuIH0gfSkgfSxcblxuICAgIGdldCBzZXJpYWxpemUgKCkgeyByZXR1cm4gdGhpcy5iZWZvcmUgKCdyZW5kZXInKSB9LFxuICAgIGdldCBkZXNlcmlhbGl6ZSAoKSB7IHJldHVybiB0aGlzLmZyb20gKCdyZW5kZXInKSB9LFxuXG4gICAgbmV3bGluZSAoKSB7IHJldHVybiB0aGlzLmZyb20gKCdqb2luJykoWycnXSkgfSxcblxuICAgIGhhbmRsZU5vZGVFcnJvcnMgKCkge1xuICAgICAgICBwcm9jZXNzLm9uICgndW5jYXVnaHRFeGNlcHRpb24nLCAgZSA9PiB7IHRoaXMuYnJpZ2h0LnJlZC5lcnJvci5ub0xvY2F0ZSAoZSk7IHByb2Nlc3MuZXhpdCAoMSkgfSlcbiAgICAgICAgcHJvY2Vzcy5vbiAoJ3VuaGFuZGxlZFJlamVjdGlvbicsIGUgPT4geyB0aGlzLmJyaWdodC5yZWQuZXJyb3Iubm9Mb2NhdGUgKGUpOyBwcm9jZXNzLmV4aXQgKDEpIH0pXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxufSlcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hbnNpLm5hbWVzLmZvckVhY2ggKGNvbG9yID0+IHtcblxuICAgIGxvZy5tZXRob2RzICh7XG5cbiAgICAgICAgZ2V0IFtjb2xvcl0gKCkgeyByZXR1cm4gdGhpcy5jb25maWd1cmUgKHsgJ2NvbmNhdCsnOiBsaW5lcyA9PiBsaW5lcy5tYXAgKGFuc2lbY29sb3JdKSB9KSB9XG4gICAgfSlcbn0pXG5cbi8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBsb2dcblxuLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbiJdfQ==","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* global window self */\n\nvar isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n/* eslint-disable no-restricted-globals */\nvar isWebWorker = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) === 'object' && self.constructor && self.constructor.name === 'DedicatedWorkerGlobalScope';\n/* eslint-enable no-restricted-globals */\n\nvar isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\n/**\n * @see https://github.com/jsdom/jsdom/releases/tag/12.0.0\n * @see https://github.com/jsdom/jsdom/issues/1537\n */\n/* eslint-disable no-undef */\nvar isJsDom = function isJsDom() {\n  return typeof window !== 'undefined' && window.name === 'nodejs' || navigator.userAgent.includes('Node.js') || navigator.userAgent.includes('jsdom');\n};\n\nexports.isBrowser = isBrowser;\nexports.isWebWorker = isWebWorker;\nexports.isNode = isNode;\nexports.isJsDom = isJsDom;","import ololog from 'ololog';\nimport { bgLightCyan, bgLightMagenta, bgBlack, bgYellow, yellow, white } from 'ansicolor';\nimport { isWebWorker } from 'browser-or-node';\n\nconst defaultLogger = ololog.configure({\n  tag: true,\n  time: {\n    yes: true,\n    format: 'iso',\n    print: date =>\n      `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}.${date.getMilliseconds()}`,\n  },\n  locate: { shift: 4 },\n});\n\nexport const logWorklet = (...argumentz) =>\n  defaultLogger.info.apply(undefined, [`${bgLightCyan('AudioWorklet')}`].concat(argumentz));\n\nexport const logSPN = (...argumentz) =>\n  defaultLogger.info.apply(\n    undefined,\n    [`${bgLightMagenta('ScriptProcessorNode')}`].concat(argumentz)\n  );\n\nexport const logSAB = (...argumentz) =>\n  defaultLogger.info.apply(undefined, [`${bgBlack(white('SAB'))}`].concat(argumentz));\n\nexport const logVAN = (...argumentz) =>\n  defaultLogger.info.apply(\n    undefined,\n    [isWebWorker ? `${yellow('VANILLA')}` : `${bgYellow(white('VANILLA'))}`].concat(argumentz)\n  );\n\nexport default defaultLogger;\n","export default function _isPlaceholder(a) {\n  return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry1(fn) {\n  return function f1(a) {\n    if (arguments.length === 0 || _isPlaceholder(a)) {\n      return f1;\n    } else {\n      return fn.apply(this, arguments);\n    }\n  };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curry2(fn) {\n  return function f2(a, b) {\n    switch (arguments.length) {\n      case 0:\n        return f2;\n\n      case 1:\n        return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n          return fn(a, _b);\n        });\n\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n          return fn(_a, b);\n        }) : _isPlaceholder(b) ? _curry1(function (_b) {\n          return fn(a, _b);\n        }) : fn(a, b);\n    }\n  };\n}","export default function _arity(n, fn) {\n  /* eslint-disable no-unused-vars */\n  switch (n) {\n    case 0:\n      return function () {\n        return fn.apply(this, arguments);\n      };\n\n    case 1:\n      return function (a0) {\n        return fn.apply(this, arguments);\n      };\n\n    case 2:\n      return function (a0, a1) {\n        return fn.apply(this, arguments);\n      };\n\n    case 3:\n      return function (a0, a1, a2) {\n        return fn.apply(this, arguments);\n      };\n\n    case 4:\n      return function (a0, a1, a2, a3) {\n        return fn.apply(this, arguments);\n      };\n\n    case 5:\n      return function (a0, a1, a2, a3, a4) {\n        return fn.apply(this, arguments);\n      };\n\n    case 6:\n      return function (a0, a1, a2, a3, a4, a5) {\n        return fn.apply(this, arguments);\n      };\n\n    case 7:\n      return function (a0, a1, a2, a3, a4, a5, a6) {\n        return fn.apply(this, arguments);\n      };\n\n    case 8:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n        return fn.apply(this, arguments);\n      };\n\n    case 9:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n        return fn.apply(this, arguments);\n      };\n\n    case 10:\n      return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n        return fn.apply(this, arguments);\n      };\n\n    default:\n      throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n  }\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _curryN from \"./internal/_curryN.js\";\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n *      const sumArgs = (...args) => R.sum(args);\n *\n *      const curriedAddFourNumbers = R.curryN(4, sumArgs);\n *      const f = curriedAddFourNumbers(1, 2);\n *      const g = f(3);\n *      g(4); //=> 10\n */\n\nvar curryN =\n/*#__PURE__*/\n_curry2(function curryN(length, fn) {\n  if (length === 1) {\n    return _curry1(fn);\n  }\n\n  return _arity(length, _curryN(length, [], fn));\n});\n\nexport default curryN;","import _arity from \"./_arity.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n\nexport default function _curryN(length, received, fn) {\n  return function () {\n    var combined = [];\n    var argsIdx = 0;\n    var left = length;\n    var combinedIdx = 0;\n\n    while (combinedIdx < received.length || argsIdx < arguments.length) {\n      var result;\n\n      if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n        result = received[combinedIdx];\n      } else {\n        result = arguments[argsIdx];\n        argsIdx += 1;\n      }\n\n      combined[combinedIdx] = result;\n\n      if (!_isPlaceholder(result)) {\n        left -= 1;\n      }\n\n      combinedIdx += 1;\n    }\n\n    return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn));\n  };\n}","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\n/**\n * Returns a curried equivalent of the provided function. The curried function\n * has two unusual capabilities. First, its arguments needn't be provided one\n * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> a) -> (* -> a)\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curryN, R.partial\n * @example\n *\n *      const addFourNumbers = (a, b, c, d) => a + b + c + d;\n *\n *      const curriedAddFourNumbers = R.curry(addFourNumbers);\n *      const f = curriedAddFourNumbers(1, 2);\n *      const g = f(3);\n *      g(4); //=> 10\n */\n\nvar curry =\n/*#__PURE__*/\n_curry1(function curry(fn) {\n  return curryN(fn.length, fn);\n});\n\nexport default curry;","export default function _isNumber(x) {\n  return Object.prototype.toString.call(x) === '[object Number]';\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _isNumber from \"./internal/_isNumber.js\";\n/**\n * Returns a list of numbers from `from` (inclusive) to `to` (exclusive).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> Number -> [Number]\n * @param {Number} from The first number in the list.\n * @param {Number} to One more than the last number in the list.\n * @return {Array} The list of numbers in the set `[a, b)`.\n * @example\n *\n *      R.range(1, 5);    //=> [1, 2, 3, 4]\n *      R.range(50, 53);  //=> [50, 51, 52]\n */\n\nvar range =\n/*#__PURE__*/\n_curry2(function range(from, to) {\n  if (!(_isNumber(from) && _isNumber(to))) {\n    throw new TypeError('Both arguments to range must be numbers');\n  }\n\n  var result = [];\n  var n = from;\n\n  while (n < to) {\n    result.push(n);\n    n += 1;\n  }\n\n  return result;\n});\n\nexport default range;","/*\n   csound instantiation module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\n/**\n * @typedef {Object} Csound\n * @property {function} csoundCreate\n * @property {function} csoundDestroy\n * @property {function} csoundGetAPIVersion\n */\n/**\n * Creates new csound object\n * @callback csoundCreate\n * @return {Csound}\n */\n/**\n * Parses an orchestra string\n * @param {Object} wasm\n * @return {csoundCreate}\n */\nexport const csoundCreate = wasm => () => wasm.exports.csoundCreateWasi();\n\ncsoundCreate.toString = () => 'csoundCreate = async (csound) => undefined;';\n\n/**\n * Destroys an instance of Csound and frees memory\n * @callback csoundDestroy\n * @param {Csound} csound\n * @return {undefined}\n */\n/**\n * @param {Object} wasm\n * @return {csoundDestroy}\n */\nexport const csoundDestroy = wasm => csound => wasm.exports.csoundDestroy(csound);\n\ncsoundDestroy.toString = () => 'csoundDestroy = async (csound) => undefined;';\n\n/**\n * Returns the API version as int\n * @callback csoundGetAPIVersion\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetAPIVersion}\n */\nexport const csoundGetAPIVersion = wasm => () => wasm.exports.csoundGetAPIVersion();\n\ncsoundGetAPIVersion.toString = () => 'csoundGetAPIVersion = async (csound) => Number;';\n\n/**\n * Returns the Csound version as int\n * @callback csoundGetVersion\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetVersion}\n */\nexport const csoundGetVersion = wasm => () => wasm.exports.csoundGetVersion();\n\ncsoundGetVersion.toString = () => 'csoundGetVersion = async (csound) => Number;';\n\n/**\n * Initialise Csound with specific flags.\n * This function is called internally by csoundCreate(),\n * so there is generally no need to use it explicitly\n * unless you need to avoid default initilization that\n * sets signal handlers and atexit() callbacks.\n * @callback csoundGetVersion\n * @param {Csound} csound\n * @return {number} - Return value is zero on success,\n *     positive if initialisation was done already, and negative on error.\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetVersion}\n */\nexport const csoundInitialize = wasm => flags => wasm.exports.csoundInitialize(flags);\n\ncsoundInitialize.toString = () => 'csoundInitialize = async (csound) => Number;';\n","// import { TextDecoder, TextEncoder } from 'text-encoding-shim';\n\nconst sizeOf = {\n  int: 4,\n  MYFLT: 4,\n  char: 1,\n};\n\nexport const decoder = new TextDecoder('utf-8');\nexport const encoder = new TextEncoder('utf-8');\n\nexport const uint2String = (uint) => decoder.decode(uint);\n\nexport const trimNull = (a) => {\n  const c = a.indexOf('\\0');\n  if (c > -1) {\n    // eslint-disable-next-line unicorn/prefer-string-slice\n    return a.substr(0, c);\n  }\n  return a;\n};\n\n// eslint-disable-next-line no-unused-vars\nexport const cleanStdout = (stdout) => {\n  const pattern = [\n    '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n    '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))',\n  ].join('|');\n  const regexPattern = new RegExp(pattern, 'g');\n  return stdout.replace(regexPattern, '');\n};\n\nexport const string2ptr = (wasm, string) => {\n  if (typeof string !== 'string') {\n    console.error('Expected string but got', typeof string);\n    return;\n  }\n\n  const { buffer } = wasm.exports.memory;\n  const stringBuf = encoder.encode(string);\n  const offset = wasm.exports.allocStringMem(stringBuf.length);\n  const outBuf = new Uint8Array(buffer, offset, stringBuf.length + 1);\n  outBuf.set(stringBuf);\n  return offset;\n};\n\nexport const sizeofStruct = (jsStruct) => {\n  const result = jsStruct.reduce((total, [_, primitive, ...rest]) => {\n    if (primitive === 'char') {\n      return (total += sizeOf[primitive] * rest[0]);\n    } else {\n      return (total += sizeOf[primitive]);\n    }\n  }, 0);\n  return result;\n};\n\nexport const freeStringPtr = (wasm, ptr) => {\n  wasm.exports.freeStringMem(ptr);\n};\n\nexport const structBuffer2Object = (jsStruct, buffer) => {\n  const [result] = jsStruct.reduce(\n    ([parameters, offset], [parameterName, primitive, ...rest]) => {\n      const currentSize = primitive === 'char' ? sizeOf[primitive] * rest[0] : sizeOf[primitive];\n      const currentValue =\n        primitive === 'char'\n          ? trimNull(uint2String(buffer.subarray(offset, currentSize))) || ''\n          : buffer[offset];\n      parameters[parameterName] = currentValue;\n      return [parameters, offset + currentSize];\n    },\n    [{}, 0],\n  );\n  return result;\n};\n\nexport const nearestPowerOf2 = (n) => {\n  return 1 << (31 - Math.clz32(n));\n};\n\nexport const isIos = () => /iPhone|iPad|iPod/.test(navigator.userAgent);\n\nconst isFirefox = () => navigator.userAgent.toLowerCase().includes('firefox');\n\nexport const isSabSupported = () =>\n  !isFirefox() &&\n  typeof window.Atomics !== 'undefined' &&\n  typeof window.SharedArrayBuffer !== 'undefined';\n\nexport const areWorkletsSupportet = () =>\n  typeof AudioNode !== 'undefined' && typeof AudioWorkletNode !== 'undefined';\n\nexport const WebkitAudioContext = () => {\n  if (typeof window.webkitAudioContext !== 'undefined') {\n    return window.webkitAudioContext;\n  } else if (typeof window.AudioContext !== 'undefined') {\n    return window.AudioContext;\n  }\n};\n\nexport const isScriptProcessorNodeSupported = () => {\n  const audioContext = WebkitAudioContext();\n  return (\n    typeof audioContext !== 'undefined' &&\n    typeof audioContext.prototype.createScriptProcessor !== 'undefined'\n  );\n};\n\nexport const makeProxyCallback = (proxyPort, apiK) => async (...arguments_) => {\n  return await proxyPort.callUncloned(apiK, arguments_);\n};\n\nexport const stopableStates = new Set([\n  'realtimePerformanceStarted',\n  'realtimePerformancePaused',\n  'realtimePerformanceResumed',\n  'renderStarted',\n]);\n","/*\n   csound performance module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\nimport { freeStringPtr, string2ptr } from '@root/utils';\n\n/**\n * Parses a csound orchestra string\n * @callback csoundParseOrc\n * @param {Csound} csound\n * @param {string} orc\n * @return {Object}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCreate}\n */\nexport const csoundParseOrc = wasm => (csound, orc) => wasm.exports.csoundParseOrc(csound, orc);\n\ncsoundParseOrc.toString = () => 'csoundParseOrc = async (csound, orchestra) => Object;';\n\n/**\n * Compiles AST tree\n * @callback csoundCompileTree\n * @param {Csound} csound\n * @param {Object} tree\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCompileTree}\n */\nexport const csoundCompileTree = wasm => (csound, tree) =>\n  wasm.exports.csoundCompileTree(csound, tree);\n\ncsoundCompileTree.toString = () => 'csoundCompileTree = async (csound, tree) => Number;';\n\n// TODO\n// csoundDeleteTree (CSOUND *csound, TREE *tree)\n\n/**\n * Compiles a csound orchestra string\n * @callback csoundCompileOrc\n * @param {Csound} csound\n * @param {string} orc\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCompileOrc}\n */\nexport const csoundCompileOrc = wasm => (csound, orc) => {\n  const stringPtr = string2ptr(wasm, orc);\n  const result = wasm.exports.csoundCompileOrc(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundCompileOrc.toString = () => 'csoundCompileOrc = async (csound, orchestra) => Number;';\n\n/**\n * Compiles a csound orchestra string\n * @callback csoundEvalCode\n * @param {Csound} csound\n * @param {string} orc\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundEvalCode}\n */\nexport const csoundEvalCode = wasm => (csound, orc) => {\n  const stringPtr = string2ptr(wasm, orc);\n  const result = wasm.exports.csoundEvalCode(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundEvalCode.toString = () => 'csoundEvalCode = async (csound, orchestra) => Number;';\n\n// TODO\n// csoundInitializeCscore (CSOUND *, FILE *insco, FILE *outsco)\n\n// TODO\n// csoundCompileArgs (CSOUND *, int argc, const char **argv)\n\n/**\n * Prepares Csound for performance\n * @callback csoundStart\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundStart}\n */\nexport const csoundStart = wasm => csound => wasm.exports.csoundStartWasi(csound);\n\ncsoundStart.toString = () => 'csoundStart = async (csound) => Number;';\n\n// TODO\n// csoundCompile (CSOUND *, int argc, const char **argv)\n\n/**\n * Compiles a Csound input file but does not perform it.\n * @callback csoundCompileCsd\n * @param {Csound} csound\n * @param {string} path\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCompileCsd}\n */\nexport const csoundCompileCsd = wasm => (csound, path) => {\n  const stringPtr = string2ptr(wasm, path);\n  const result = wasm.exports.csoundCompileCsd(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundCompileCsd.toString = () => 'csoundCompileCsd = async (csound, path) => Number;';\n\n/**\n * Compiles a CSD string but does not perform it.\n * @callback csoundCompileCsdText\n * @param {Csound} csound\n * @param {string} orc\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCompileCsdText}\n */\nexport const csoundCompileCsdText = wasm => (csound, orc) => {\n  const stringPtr = string2ptr(wasm, orc);\n  const result = wasm.exports.csoundCompileCsdText(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundCompileCsdText.toString = () =>\n  'csoundCompileCsdText = async (csound, csoundDocument) => Number;';\n\n/**\n * Performs(plays) audio until end is reached\n * @callback csoundPerform\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundPerform}\n */\nexport const csoundPerform = wasm => csound => wasm.exports.csoundPerform(csound);\n\ncsoundPerform.toString = () => 'csoundPerform = async (csound) => Number;';\n\n/**\n * Performs(plays) 1 ksmps worth of sample(s)\n * @callback csoundPerformKsmps\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundPerformKsmps}\n */\nexport const csoundPerformKsmps = wasm => csound => wasm.exports.csoundPerformKsmpsWasi(csound);\n\ncsoundPerformKsmps.toString = () => 'csoundPerformKsmps = async (csound) => Number;';\n\n/**\n * Performs(plays) 1 buffer worth of audio\n * @callback csoundPerformBuffer\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundPerformBuffer}\n */\nexport const csoundPerformBuffer = wasm => csound => wasm.exports.csoundPerformBuffer(csound);\n\ncsoundPerformBuffer.toString = () => 'csoundPerformBuffer = async (csound) => Number;';\n\n/**\n * Stops a csoundPerform\n * @callback csoundStop\n * @param {Csound} csound\n * @return {null}\n */\n/**\n * @param {Object} wasm\n * @return {csoundStop}\n */\nexport const csoundStop = wasm => csound => wasm.exports.csoundStop(csound);\n\ncsoundStop.toString = () => 'csoundStop = async (csound) => undefined;';\n\n/**\n * Prints information about the end of a performance,\n * and closes audio and MIDI devices.\n * @callback csoundCleanup\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundCleanup}\n */\nexport const csoundCleanup = wasm => csound => wasm.exports.csoundCleanup(csound);\n\ncsoundCleanup.toString = () => 'csoundCleanup = async (csound) => Number;';\n\n/**\n * Prints information about the end of a performance,\n * and closes audio and MIDI devices.\n * @callback csoundReset\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundReset}\n */\nexport const csoundReset = wasm => csound => wasm.exports.csoundResetWasi(csound);\n\ncsoundReset.toString = () => 'csoundReset = async (csound) => Number;';\n","export const CSOUND_PARAMS = [\n  /* debug mode, 0 or 1 */\n  ['debug_mode', 'int'],\n  /* number of frames in in/out buffers */\n  ['buffer_frames', 'int'],\n  /* number of frames in in/out hardware buffers */\n  ['hardware_buffer_frames', 'int'],\n  /* graph displays, 0 or 1 */\n  ['displays', 'int'],\n  /* use ASCII graphs, 0 or 1 */\n  ['ascii_graphs', 'int'],\n  /* use postscript graphs, 0 or 1 */\n  ['postscript_graphs', 'int'],\n  /* message printout control */\n  ['message_level', 'int'],\n  /* tempo (sets Beatmode)  */\n  ['tempo', 'int'],\n  /* bell, 0 or 1 */\n  ['ring_bell', 'int'],\n  /* use cscore for processing */\n  ['use_cscore', 'int'],\n  /* terminate performance at the end */\n  ['terminate_on_midi', 'int'],\n  /* print heart beat, 0 or 1 */\n  ['heartbeat', 'int'],\n  /* defer GEN01 load, 0 or 1 */\n  ['defer_gen01_load', 'int'],\n  /* pfield to map midi key no */\n  ['midi_key', 'int'],\n  /* pfield to map midi key no as cps */\n  ['midi_key_cps', 'int'],\n  /* pfield to map midi key no as oct */\n  ['midi_key_oct', 'int'],\n  /* pfield to map midi key no as pch */\n  ['midi_key_pch', 'int'],\n  /* pfield to map midi velocity */\n  ['midi_velocity', 'int'],\n  /* pfield to map midi velocity as amplitude */\n  ['midi_velocity_amp', 'int'],\n  /* disable relative paths from files, 0 or 1 */\n  ['no_default_paths', 'int'],\n  /* number of threads for multicore performance */\n  ['number_of_threads', 'int'],\n  /* do not compile, only check syntax */\n  ['syntax_check_only', 'int'],\n  /* csd line error reporting */\n  ['csd_line_counts', 'int'],\n  /* deprecated, kept for backwards comp.  */\n  ['compute_weights', 'int'],\n  /* use realtime priority mode, 0 or 1 */\n  ['realtime_mode', 'int'],\n  /* use sample-level score event accuracy */\n  ['sample_accurate', 'int'],\n  /* overriding sample rate */\n  ['sample_rate_override', 'MYFLT'],\n  /* overriding control rate */\n  ['control_rate_override', 'MYFLT'],\n  /* overriding number of out channels */\n  ['nchnls_override', 'int'],\n  /* overriding number of in channels */\n  ['nchnls_i_override', 'int'],\n  /* overriding 0dbfs */\n  ['e0dbfs_override', 'MYFLT'],\n  /* daemon mode */\n  ['daemon', 'int'],\n  /* ksmps override */\n  ['ksmps_override', 'int'],\n  /* fft_lib */\n  ['FFT_library', 'int'],\n];\n\n// typedef struct {\n//   char device_name[64];\n//   char interface_name[64];\n//   char device_id[64];\n//   char midi_module[64];\n//   int isOutput;\n// } CS_MIDIDEVICE;\nexport const CS_MIDIDEVICE = [\n  /* debug mode, 0 or 1 */\n  ['device_name', 'char', 64],\n  ['interface_name', 'char', 64],\n  ['device_id', 'char', 64],\n  ['midi_module', 'char', 64],\n  ['isOutput', 'int'],\n];\n","/*\n   csound attribute module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\n/* eslint-disable unicorn/prevent-abbreviations */\n\nimport { freeStringPtr, sizeofStruct, string2ptr, structBuffer2Object } from '@root/utils';\nimport { CSOUND_PARAMS } from '@root/structures';\nimport { curry } from 'ramda';\n\n/**\n * Returns the sample rate from Csound instance\n * @callback csoundGetSr\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetSr}\n */\nexport const csoundGetSr = curry((wasm, csound) => wasm.exports.csoundGetSr(csound));\n\ncsoundGetSr.toString = () => 'csoundGetSr = async (csound) => Number;';\n\n/**\n * Returns the control rate from Csound instance\n * @callback csoundGetKr\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetKr}\n */\nexport const csoundGetKr = curry((wasm, csound) => wasm.exports.csoundGetKr(csound));\n\ncsoundGetKr.toString = () => 'csoundGetKr = async (csound) => Number;';\n\n/**\n * Returns the ksmps value (kr/sr) from Csound instance\n * @callback csoundGetKsmps\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetKsmps}\n */\nexport const csoundGetKsmps = curry((wasm, csound) => wasm.exports.csoundGetKsmps(csound));\n\ncsoundGetKsmps.toString = () => 'csoundGetKsmps = async (csound) => Number;';\n\n/**\n * Returns the number of output channels from Csound instance\n * @callback csoundGetNchnls\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetNchnls}\n */\nexport const csoundGetNchnls = curry((wasm, csound) => wasm.exports.csoundGetNchnls(csound));\n\ncsoundGetNchnls.toString = () => 'csoundGetNchnls = async (csound) => Number;';\n\n/**\n * Returns the number of input channels from Csound instance\n * @callback csoundGetNchnlsInput\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetNchnlsInput}\n */\nexport const csoundGetNchnlsInput = curry((wasm, csound) =>\n  wasm.exports.csoundGetNchnlsInput(csound)\n);\n\ncsoundGetNchnlsInput.toString = () => 'csoundGetNchnlsInput = async (csound) => Number;';\n\n/**\n * Returns the value of csoundGet0dBFS\n * @callback csoundGet0dBFS\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGet0dBFS}\n */\nexport const csoundGet0dBFS = curry((wasm, csound) => wasm.exports.csoundGet0dBFS(csound));\n\ncsoundGet0dBFS.toString = () => 'csoundGet0dBFS = async (csound) => Number;';\n\n/**\n * Returns the A4 frequency reference\n * @callback csoundGetA4\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetA4}\n */\nexport const csoundGetA4 = curry((wasm, csound) => wasm.exports.csoundGetA4(csound));\n\ncsoundGetA4.toString = () => 'csoundGetA4 = async (csound) => Number;';\n\n/**\n * Return the current performance time in samples\n * @callback csoundGetCurrentTimeSamples\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetCurrentTimeSamples}\n */\nexport const csoundGetCurrentTimeSamples = curry((wasm, csound) =>\n  wasm.exports.csoundGetCurrentTimeSamples(csound)\n);\n\ncsoundGetCurrentTimeSamples.toString = () =>\n  'csoundGetCurrentTimeSamples = async (csound) => Number;';\n\n/**\n * Return the size of MYFLT in number of bytes\n * @callback csoundGetSizeOfMYFLT\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetSizeOfMYFLT}\n */\nexport const csoundGetSizeOfMYFLT = curry((wasm, csound) =>\n  wasm.exports.csoundGetSizeOfMYFLT(csound)\n);\n\ncsoundGetSizeOfMYFLT.toString = () => 'csoundGetSizeOfMYFLT = async (csound) => Number;';\n\n// TODO (do these make any sense in wasm?)\n// csoundGetHostData\n// csoundSetHostData\n\n/**\n * Set a single csound option (flag),\n * no spaces are allowed in the string.\n * @callback csoundSetOption\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundSetOption}\n */\nexport const csoundSetOption = curry((wasm, csound, option) => {\n  const stringPtr = string2ptr(wasm, option);\n  const result = wasm.exports.csoundSetOption(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n});\n\ncsoundSetOption.toString = () => 'csoundSetOption = async (csound, option) => Number;';\n\n/**\n * Configure Csound with a given set of\n * parameters defined in the CSOUND_PARAMS structure.\n * These parameters are the part of the OPARMS struct\n * that are configurable through command line flags.\n * The CSOUND_PARAMS structure can be obtained using\n * csoundGetParams().\n * These options should only be changed before\n * performance has started.\n * @callback csoundSetParams\n * @param {Csound} csound\n * @param {Object} csoundParams\n * @return {undefined}\n */\n/**\n * @param {Object} wasm\n * @return {csoundSetParams}\n */\nexport const csoundSetParams = curry((wasm, csound, csoundParameters) => {\n  wasm.exports.csoundSetParams(csound, csoundParameters);\n});\n\ncsoundSetParams.toString = () => 'csoundSetParams = async (csound, csoundParams) => undefined;';\n\n/**\n * Get the current set of parameters\n * from a Csound instance\n * in a CSOUND_PARAMS structure.\n * @callback csoundGetParams\n * @param {Csound} csound\n * @return {Object} - CSOUND_PARAMS object\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetParams}\n */\nexport const csoundGetParams = curry((wasm, csound) => {\n  const { buffer } = wasm.exports.memory;\n  const structLength = sizeofStruct(CSOUND_PARAMS);\n  const structOffset = wasm.exports.allocCsoundParamsStruct();\n  const structBuffer = new Uint8Array(buffer, structOffset, structLength);\n  wasm.exports.csoundGetParams(csound, structOffset);\n  const currentCsoundParameters = structBuffer2Object(CSOUND_PARAMS, structBuffer);\n  wasm.exports.freeCsoundParams(structOffset);\n  return currentCsoundParameters;\n});\n\ncsoundGetParams.toString = () => 'csoundGetParams = async (csound) => CSOUND_PARAMS;';\n\n/**\n * Returns whether Csound is set to print debug messages\n * sent through the DebugMsg() internal API function.\n * Anything different to 0 means true.\n * @callback csoundGetDebug\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetDebug}\n */\nexport const csoundGetDebug = curry((wasm, csound) => wasm.exports.csoundGetDebug(csound));\n\ncsoundGetDebug.toString = () => 'csoundGetDebug = async (csound) => Number;';\n\n/**\n * Return the size of MYFLT in number of bytes\n * @callback csoundSetDebug\n * @param {Csound} csound\n * @param {number} debug\n * @return {undefined}\n */\n/**\n * @param {Object} wasm\n * @return {csoundSetDebug}\n */\nexport const csoundSetDebug = curry((wasm, csound, debug) => {\n  wasm.exports.csoundSetDebug(csound, debug);\n});\n\ncsoundSetDebug.toString = () => 'csoundSetDebug = async (csound, number) => undefined;';\n","/*\n   Realtime Audio I/O module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\n/**\n * Returns the number of samples in Csound's input buffer.\n * @callback csoundGetInputBufferSize\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetInputBufferSize}\n */\nexport const csoundGetInputBufferSize = wasm => csound =>\n  wasm.exports.csoundGetInputBufferSize(csound);\n\ncsoundGetInputBufferSize.toString = () => 'csoundGetInputBufferSize = async (csound) => Number;';\n\n/**\n * Returns the number of samples in Csound's output buffer.\n * @callback csoundGetOutputBufferSize\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetOutputBufferSize}\n */\nexport const csoundGetOutputBufferSize = wasm => csound =>\n  wasm.exports.csoundGetOutputBufferSize(csound);\n\ncsoundGetOutputBufferSize.toString = () => 'csoundGetOutputBufferSize = async (csound) => Number;';\n\n/**\n * Returns the address of the Csound audio input buffer.\n * @callback csoundGetInputBuffer\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetInputBuffer}\n */\nexport const csoundGetInputBuffer = wasm => csound => wasm.exports.csoundGetInputBuffer(csound);\n\ncsoundGetInputBuffer.toString = () => 'csoundGetInputBuffer = async (csound) => Number;';\n\n/**\n * Returns the address of the Csound audio output buffer.\n * @callback csoundGetOutputBuffer\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetOutputBuffer}\n */\nexport const csoundGetOutputBuffer = wasm => csound => wasm.exports.csoundGetOutputBuffer(csound);\n\ncsoundGetOutputBuffer.toString = () => 'csoundGetOutputBuffer = async (csound) => Number;';\n\n/**\n * Returns the address of the Csound audio input working buffer (spin).\n * Enables external software to write audio into Csound before calling csoundPerformKsmps.\n * @callback csoundGetSpin\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetSpin}\n */\nexport const csoundGetSpin = wasm => csound => wasm.exports.csoundGetSpin(csound);\n\ncsoundGetSpin.toString = () => 'csoundGetSpin = async (csound) => Number;';\n\n/**\n * Returns the address of the Csound audio output working buffer (spout).\n * Enables external software to read audio from Csound after calling csoundPerformKsmps.\n * @callback csoundGetSpout\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetSpout}\n */\nexport const csoundGetSpout = wasm => csound => wasm.exports.csoundGetSpout(csound);\n\ncsoundGetSpout.toString = () => 'csoundGetSpout = async (csound) => Number;';\n\n// PUBLIC void \tcsoundSetRTAudioModule (CSOUND *csound, const char *module)\n// PUBLIC int \tcsoundGetModule (CSOUND *csound, int number, char **name, char **type)\n\n// PUBLIC void \tcsoundClearSpin (CSOUND *)\n// PUBLIC void \tcsoundAddSpinSample (CSOUND *csound, int frame, int channel, MYFLT sample)\n// PUBLIC void \tcsoundSetSpinSample (CSOUND *csound, int frame, int channel, MYFLT sample)\n\n// PUBLIC MYFLT \tcsoundGetSpoutSample (CSOUND *csound, int frame, int channel)\n// PUBLIC void ** \tcsoundGetRtRecordUserData (CSOUND *)\n// PUBLIC void ** \tcsoundGetRtPlayUserData (CSOUND *)\n// PUBLIC void \tcsoundSetHostImplementedAudioIO (CSOUND *, int state, int bufSize)\n// PUBLIC int \tcsoundGetAudioDevList (CSOUND *csound, CS_AUDIODEVICE *list, int isOutput)\n// PUBLIC void \tcsoundSetPlayopenCallback (CSOUND *, int(*playopen__)(CSOUND *, const csRtAudioParams *parm))\n// PUBLIC void \tcsoundSetRtplayCallback (CSOUND *, void(*rtplay__)(CSOUND *, const MYFLT *outBuf, int nbytes))\n// PUBLIC void \tcsoundSetRecopenCallback (CSOUND *, int(*recopen_)(CSOUND *, const csRtAudioParams *parm))\n// PUBLIC void \tcsoundSetRtrecordCallback (CSOUND *, int(*rtrecord__)(CSOUND *, MYFLT *inBuf, int nbytes))\n// PUBLIC void \tcsoundSetRtcloseCallback (CSOUND *, void(*rtclose__)(CSOUND *))\n// PUBLIC void \tcsoundSetAudioDeviceListCallback (CSOUND *csound, int(*audiodevlist__)(CSOUND *, CS_AUDIODEVICE *list, int isOutput))\n","import { range } from 'ramda';\nimport { CS_MIDIDEVICE } from '@root/structures';\nimport {\n  freeStringPtr,\n  sizeofStruct,\n  structBuffer2Object,\n  trimNull,\n  uint2String,\n} from '@root/utils';\n\nexport const csoundSetMidiCallbacks = wasm => csound => {\n  wasm.exports.csoundSetMidiCallbacks(csound);\n};\n\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport const csoundGetMIDIDevList = wasm => (csound, isOutput) => {\n  const { buffer } = wasm.exports.memory;\n  const numberOfDevices = wasm.exports.csoundGetMIDIDevList(csound, undefined, isOutput ? 1 : 0);\n  if (numberOfDevices === 0) return [];\n  const structLength = sizeofStruct(CS_MIDIDEVICE);\n  const structOffset = wasm.exports.allocCsMidiDeviceStruct(numberOfDevices);\n  wasm.exports.csoundGetMIDIDevList(csound, structOffset, isOutput ? 1 : 0);\n  const structBuffer = new Uint8Array(buffer, structOffset, structLength * numberOfDevices);\n  const out = range(0, numberOfDevices).map(i =>\n    structBuffer2Object(CS_MIDIDEVICE, structBuffer.subarray(i * structLength, structLength))\n  );\n  wasm.exports.freeCsMidiDeviceStruct(structOffset);\n  return out;\n};\n\nexport const csoundGetRtMidiName = wasm => csound => {\n  const { buffer } = wasm.exports.memory;\n  const ptr = wasm.exports.getRtMidiName(csound);\n  const stringBuffer = new Uint8Array(buffer, ptr, 128);\n  return trimNull(uint2String(stringBuffer)) || '';\n};\n\nexport const csoundGetMidiOutFileName = wasm => csound => {\n  const { buffer } = wasm.exports.memory;\n  const ptr = wasm.exports.getMidiOutFileName(csound);\n  const stringBuffer = new Uint8Array(buffer, ptr, 128);\n  ptr && ptr.length > 0 && freeStringPtr(ptr);\n  return trimNull(uint2String(stringBuffer)) || '';\n};\n\nexport const _isRequestingRtMidiInput = wasm => csound => {\n  return wasm.exports.isRequestingRtMidiInput(csound);\n};\n\nexport const csoundPushMidiMessage = wasm => (csound, status, data1, data2) => {\n  return wasm.exports.pushMidiMessage(csound, status, data1, data2);\n};\n\n// PUBLIC void \tcsoundSetMIDIModule (CSOUND *csound, const char *module)\n// PUBLIC void \tcsoundSetHostImplementedMIDIIO (CSOUND *csound, int state)\n// PUBLIC int \tcsoundGetMIDIDevList (CSOUND *csound, CS_MIDIDEVICE *list, int isOutput)\n// PUBLIC void \tcsoundSetExternalMidiInOpenCallback (CSOUND *, int(*func)(CSOUND *, void **userData, const char *devName))\n// PUBLIC void \tcsoundSetExternalMidiReadCallback (CSOUND *, int(*func)(CSOUND *, void *userData, unsigned char *buf, int nBytes))\n// PUBLIC void \tcsoundSetExternalMidiInCloseCallback (CSOUND *, int(*func)(CSOUND *, void *userData))\n// PUBLIC void \tcsoundSetExternalMidiOutOpenCallback (CSOUND *, int(*func)(CSOUND *, void **userData, const char *devName))\n// PUBLIC void \tcsoundSetExternalMidiWriteCallback (CSOUND *, int(*func)(CSOUND *, void *userData, const unsigned char *buf, int nBytes))\n// PUBLIC void \tcsoundSetExternalMidiOutCloseCallback (CSOUND *, int(*func)(CSOUND *, void *userData))\n// PUBLIC void \tcsoundSetExternalMidiErrorStringCallback (CSOUND *, const char *(*func)(int))\n// PUBLIC void \tcsoundSetMIDIDeviceListCallback (CSOUND *csound, int(*mididevlist__)(CSOUND *, CS_MIDIDEVICE *list, int isOutput))\n","/*\n   csound control-events module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\nimport { freeStringPtr, string2ptr } from '@root/utils';\n\n/**\n * Inputs an immediate score event\n * without any pre-process parsing\n * @callback csoundInputMessage\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundInputMessage}\n */\nexport const csoundInputMessage = wasm => (csound, scoEvent) => {\n  const stringPtr = string2ptr(wasm, scoEvent);\n  const result = wasm.exports.csoundInputMessage(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundInputMessage.toString = () => 'csoundInputMessage = async (csound, scoreEvent) => Number;';\n\n/**\n * Inputs an immediate score event\n * without any pre-process parsing\n * @callback csoundInputMessageAsync\n * @param {Csound} csound\n * @return {number}\n */\n/**\n * @param {Object} wasm\n * @return {csoundInputMessageAsync}\n */\nexport const csoundInputMessageAsync = wasm => (csound, scoEvent) => {\n  const stringPtr = string2ptr(wasm, scoEvent);\n  const result = wasm.exports.csoundInputMessageAsync(csound, stringPtr);\n  freeStringPtr(wasm, stringPtr);\n  return result;\n};\n\ncsoundInputMessageAsync.toString = () =>\n  'csoundInputMessageAsync = async (csound, scoreEvent) => Number;';\n\n// csoundGetChannelPtr (CSOUND *, MYFLT **p, const char *name, int type)\n// csoundListChannels (CSOUND *, controlChannelInfo_t **lst)\n// csoundDeleteChannelList (CSOUND *, controlChannelInfo_t *lst)\n// csoundSetControlChannelHints (CSOUND *, const char *name, controlChannelHints_t hints)\n// csoundGetControlChannelHints (CSOUND *, const char *name, controlChannelHints_t *hints)\n// csoundGetChannelLock (CSOUND *, const char *name)\n// csoundGetControlChannel (CSOUND *csound, const char *name, int *err)\n// csoundSetControlChannel (CSOUND *csound, const char *name, MYFLT val)\n// csoundGetAudioChannel (CSOUND *csound, const char *name, MYFLT *samples)\n// csoundSetAudioChannel (CSOUND *csound, const char *name, MYFLT *samples)\n// csoundGetStringChannel (CSOUND *csound, const char *name, char *string)\n// csoundSetStringChannel (CSOUND *csound, const char *name, char *string)\n// csoundGetChannelDatasize (CSOUND *csound, const char *name)\n// csoundSetInputChannelCallback (CSOUND *csound, channelCallback_t inputChannelCalback)\n// csoundSetOutputChannelCallback (CSOUND *csound, channelCallback_t outputChannelCalback)\n// csoundSetPvsChannel (CSOUND *, const PVSDATEXT *fin, const char *name)\n// csoundGetPvsChannel (CSOUND *csound, PVSDATEXT *fout, const char *name)\n// csoundScoreEvent (CSOUND *, char type, const MYFLT *pFields, long numFields)\n// csoundScoreEventAsync (CSOUND *, char type, const MYFLT *pFields, long numFields)\n// csoundScoreEventAbsolute (CSOUND *, char type, const MYFLT *pfields, long numFields, double time_ofs)\n// csoundScoreEventAbsoluteAsync (CSOUND *, char type, const MYFLT *pfields, long numFields, double time_ofs)\n// csoundKillInstance (CSOUND *csound, MYFLT instr, char *instrName, int mode, int allow_release)\n// csoundRegisterSenseEventCallback (CSOUND *, void(*func)(CSOUND *, void *), void *userData)\n// csoundKeyPress (CSOUND *, char c)\n// csoundRegisterKeyboardCallback (CSOUND *, int(*func)(void *userData, void *p, unsigned int type), void *userData, unsigned int type)\n// csoundRemoveKeyboardCallback (CSOUND *csound, int(*func)(void *, void *, unsigned int))\n","/*\n   csound general i/o module from <csound.h>\n   https://csound.com/docs/api/modules.html\n*/\n\nimport { trimNull, uint2String } from '@root/utils';\n\n/**\n * Returns the audio output name (-o)\n * @callback csoundGetOutputName\n * @param {Csound} csound\n * @return {string}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetOutputName}\n */\nexport const csoundGetOutputName = wasm => csound => {\n  const { buffer } = wasm.exports.memory;\n  const ptr = wasm.exports.csoundGetOutputName(csound);\n  const stringBuffer = new Uint8Array(buffer, ptr, 64);\n  return trimNull(uint2String(stringBuffer)) || '';\n};\n\ncsoundGetOutputName.toString = () => 'csoundGetOutputName = async (csound) => String;';\n\n/**\n * Returns the audio input name (-i)\n * @callback csoundGetInputName\n * @param {Csound} csound\n * @return {string}\n */\n/**\n * @param {Object} wasm\n * @return {csoundGetInputName}\n */\nexport const csoundGetInputName = wasm => csound => {\n  const { buffer } = wasm.exports.memory;\n  const ptr = wasm.exports.csoundGetInputName(csound);\n  const stringBuffer = new Uint8Array(buffer, ptr, 64);\n  return trimNull(uint2String(stringBuffer)) || '';\n};\n\ncsoundGetInputName.toString = () => 'csoundGetInputName = async (csound) => String;';\n\n// PUBLIC void \tcsoundSetOutput (CSOUND *csound, const char *name, const char *type, const char *format)\n// PUBLIC void \tcsoundGetOutputFormat (CSOUND *csound, char *type, char *format)\n// PUBLIC void \tcsoundSetInput (CSOUND *csound, const char *name)\n// PUBLIC void \tcsoundSetMIDIInput (CSOUND *csound, const char *name)\n// PUBLIC void \tcsoundSetMIDIFileInput (CSOUND *csound, const char *name)\n// PUBLIC void \tcsoundSetMIDIOutput (CSOUND *csound, const char *name)\n// PUBLIC void \tcsoundSetMIDIFileOutput (CSOUND *csound, const char *name)\n// PUBLIC void \tcsoundSetFileOpenCallback (CSOUND *p, void(*func)(CSOUND *, const char *, int, int, int))\n","import { freeStringPtr, string2ptr } from '@root/utils';\n\n/* eslint-disable unicorn/prevent-abbreviations */\n\n/**\n * Append 'value' to environment variable 'name'\n * added for internal usage of csound-wasm, feel\n * free to use as well ;)\n */\nexport const csoundAppendEnv = wasm => (csound, variable, value) => {\n  const varStringPtr = string2ptr(wasm, variable);\n  const valueStringPtr = string2ptr(wasm, value);\n  const res = wasm.exports.csoundAppendEnv(csound, varStringPtr, valueStringPtr);\n  freeStringPtr(wasm, varStringPtr);\n  freeStringPtr(wasm, valueStringPtr);\n  return res;\n};\n\ncsoundAppendEnv.toString = () => 'csoundAppendEnv = async (csound, variable, value) => Number;';\n\n/**\n * Internal function for setting-up browser-fs\n */\nexport const setupWasmBrowserFS = wasm => () => {\n  wasm.exports.setupWasmBrowserFS();\n};\n","import { assoc, keys, reduce } from 'ramda';\nimport {\n  csoundCreate,\n  csoundDestroy,\n  csoundGetAPIVersion,\n  csoundGetVersion,\n  csoundInitialize,\n} from '@module/instantiation';\nimport {\n  csoundParseOrc,\n  csoundCompileTree,\n  csoundCompileOrc,\n  csoundEvalCode,\n  csoundStart,\n  csoundCompileCsd,\n  csoundCompileCsdText,\n  csoundPerform,\n  csoundPerformKsmps,\n  csoundPerformBuffer,\n  csoundStop,\n  csoundCleanup,\n  csoundReset,\n} from '@module/performance';\nimport {\n  csoundGetSr,\n  csoundGetKr,\n  csoundGetKsmps,\n  csoundGetNchnls,\n  csoundGetNchnlsInput,\n  csoundGet0dBFS,\n  csoundGetA4,\n  csoundGetCurrentTimeSamples,\n  csoundGetSizeOfMYFLT,\n  csoundSetOption,\n  csoundSetParams,\n  csoundGetParams,\n  csoundGetDebug,\n  csoundSetDebug,\n} from '@module/attributes';\nimport {\n  csoundGetInputBufferSize,\n  csoundGetOutputBufferSize,\n  csoundGetInputBuffer,\n  csoundGetOutputBuffer,\n  csoundGetSpin,\n  csoundGetSpout,\n} from '@module/rtaudio';\nimport {\n  csoundGetMIDIDevList,\n  csoundSetMidiCallbacks,\n  csoundGetRtMidiName,\n  csoundGetMidiOutFileName,\n  csoundPushMidiMessage,\n  _isRequestingRtMidiInput,\n} from '@module/rtmidi';\nimport { csoundInputMessage, csoundInputMessageAsync } from '@module/control-events';\nimport { csoundGetInputName, csoundGetOutputName } from '@module/general-io';\nimport { csoundAppendEnv, setupWasmBrowserFS } from '@module/extra';\n\n/*\n   Don't call these functions directly.\n   They are closures that take wasm instance as\n   first argument before they can be called as\n   documented.\n*/\nexport const api = {\n  // @module/instantiation\n  csoundCreate,\n  csoundDestroy,\n  csoundGetAPIVersion,\n  csoundGetVersion,\n  csoundInitialize,\n  // @module/performance\n  csoundParseOrc,\n  csoundCompileTree,\n  csoundCompileOrc,\n  csoundEvalCode,\n  csoundStart,\n  csoundCompileCsd,\n  csoundCompileCsdText,\n  csoundPerform,\n  csoundPerformKsmps,\n  csoundPerformBuffer,\n  csoundStop,\n  csoundCleanup,\n  csoundReset,\n  // @module/attributes\n  csoundGetSr,\n  csoundGetKr,\n  csoundGetKsmps,\n  csoundGetNchnls,\n  csoundGetNchnlsInput,\n  csoundGet0dBFS,\n  csoundGetA4,\n  csoundGetCurrentTimeSamples,\n  csoundGetSizeOfMYFLT,\n  csoundSetOption,\n  csoundSetParams,\n  csoundGetParams,\n  csoundGetDebug,\n  csoundSetDebug,\n  // @module/rtaudio\n  csoundGetInputBufferSize,\n  csoundGetOutputBufferSize,\n  csoundGetInputBuffer,\n  csoundGetOutputBuffer,\n  csoundGetSpin,\n  csoundGetSpout,\n  // @module/rtmidi\n  csoundGetMIDIDevList,\n  csoundSetMidiCallbacks,\n  csoundGetRtMidiName,\n  csoundGetMidiOutFileName,\n  csoundPushMidiMessage,\n  _isRequestingRtMidiInput,\n  // @module/control_events\n  csoundInputMessage,\n  csoundInputMessageAsync,\n  // @module/general_io\n  csoundGetInputName,\n  csoundGetOutputName,\n  // @module/extra\n  csoundAppendEnv,\n  setupWasmBrowserFS,\n};\n\nexport default function(wasm) {\n  return reduce((accumulator, k) => assoc(k, api[k](wasm), accumulator), {}, keys(api));\n}\n","export const DEFAULT_HARDWARE_BUFFER_SIZE = 4096;\nexport const DEFAULT_SOFTWARE_BUFFER_SIZE = 512;\nexport const MAX_CHANNELS = 32;\nexport const MAX_HARDWARE_BUFFER_SIZE = 16384;\nexport const MIDI_BUFFER_SIZE = 1024;\nexport const MIDI_BUFFER_PAYLOAD_SIZE = 3;\n\nexport const initialSharedState = [\n  0, // 1 = Worklet requests new buffer data (atomic notify)\n  0, // 1 = Csound is currently performing\n  0, // 1 = Csound is currently paused\n  0, // 1 = STOP\n  2, // n = nchnls\n  0, // n = ncnls_i\n  DEFAULT_HARDWARE_BUFFER_SIZE, // n = [hardware -B] bufferSize\n  DEFAULT_SOFTWARE_BUFFER_SIZE, // n = [software -b] bufferSize\n  0, // n = number of input buffers available\n  0, // n = number of output buffers available\n  0, // n = buffer read index of input buffer\n  0, // n = buffer read index of output buffer\n  0, // n = buffer write index of input buffer\n  0, // n = buffer write index of output buffer\n  0, // n = the read index of the callback buffer\n  0, // n = amount of callbacks waiting from main thread\n  44100, // sample rate\n  0, // n = if 1 then is requesting rtmidi\n  0, // n = rtmidi buffer index\n  0, // n = available rtmidi events in buffer\n];\n\n// Enum helper for SAB\nexport const AUDIO_STATE = {\n  ATOMIC_NOTIFY: 0,\n  IS_PERFORMING: 1,\n  IS_PAUSED: 2,\n  STOP: 3,\n  NCHNLS: 4,\n  NCHNLS_I: 5,\n  HW_BUFFER_SIZE: 6,\n  SW_BUFFER_SIZE: 7,\n  AVAIL_IN_BUFS: 8,\n  AVAIL_OUT_BUFS: 9,\n  INPUT_READ_INDEX: 10,\n  OUTPUT_READ_INDEX: 11,\n  INPUT_WRITE_INDEX: 12,\n  OUTPUT_WRITE_INDEX: 13,\n  CALLBACK_BUFFER_INDEX: 14,\n  AVAIL_CALLBACKS: 15,\n  SAMPLE_RATE: 16,\n  IS_REQUESTING_RTMIDI: 17,\n  RTMIDI_INDEX: 18,\n  AVAIL_RTMIDI_EVENTS: 19,\n};\n","import { logVAN } from '@root/logger';\n\nconst loggerPool = new Set();\n\n// debug mode: console.log always all messages\nif (!__PROD__) {\n  loggerPool.add(console.log);\n}\n\n// exec log-event: msg => cb(msg)\nexport const messageEventHandler = worker => event => {\n  if (event.data.log) {\n    loggerPool.forEach(callback => callback(event.data.log));\n    (worker.messageCallbacks || []).forEach(callback => callback(event.data.log));\n  } else {\n    worker.onPlayStateChange(event.data.playStateChange);\n  }\n};\n\nexport const emitInternalCsoundLogEvent = (worker, message) => {\n  if (typeof message === 'string') {\n    loggerPool.forEach(callback => callback(message));\n    if (worker) {\n      (worker.messageCallbacks || []).forEach(callback => callback(message));\n    }\n  }\n};\n\nexport let { port1: mainMessagePort, port2: workerMessagePort } = new MessageChannel();\n\nexport let { port1: mainMessagePortAudio, port2: workerMessagePortAudio } = new MessageChannel();\n\nexport let {\n  port1: csoundWorkerFrameRequestPort,\n  port2: audioWorkerFrameRequestPort,\n} = new MessageChannel();\n\nexport let {\n  port1: csoundWorkerAudioInputPort,\n  port2: audioWorkerAudioInputPort,\n} = new MessageChannel();\n\nexport let { port1: csoundWorkerRtMidiPort, port2: csoundMainRtMidiPort } = new MessageChannel();\n\nconst iterableMessageChannel = () => {\n  const { port1, port2 } = new MessageChannel();\n  return [port1, port2];\n};\n\nconst safelyClosePorts = ([p1, p2]) => {\n  if (typeof p1.close !== 'undefined') {\n    try {\n      p1.close();\n      // eslint-disable unicorn/prefer-optional-catch-binding\n    } catch (_) {}\n  }\n  if (typeof p2.close !== 'undefined') {\n    try {\n      p2.close();\n      // eslint-disable unicorn/prefer-optional-catch-binding\n    } catch (_) {}\n  }\n};\n\nexport const restartMessagePortAudio = () => {\n  safelyClosePorts([mainMessagePortAudio, workerMessagePortAudio]);\n  [mainMessagePortAudio, workerMessagePortAudio] = iterableMessageChannel();\n};\n\nexport const restartWorkerAudioInputPort = () => {\n  safelyClosePorts([csoundWorkerAudioInputPort, audioWorkerAudioInputPort]);\n  [csoundWorkerAudioInputPort, audioWorkerAudioInputPort] = iterableMessageChannel();\n};\n\nexport const restartWorkerFrameRequestPort = () => {\n  safelyClosePorts([csoundWorkerFrameRequestPort, audioWorkerFrameRequestPort]);\n  [csoundWorkerFrameRequestPort, audioWorkerFrameRequestPort] = iterableMessageChannel();\n};\n\nexport const cleanupPorts = csoundWorkerMain => {\n  logVAN(`cleanupPorts`);\n\n  safelyClosePorts([mainMessagePort, workerMessagePort]);\n  [mainMessagePort, workerMessagePort] = iterableMessageChannel();\n\n  safelyClosePorts([mainMessagePortAudio, workerMessagePortAudio]);\n  [mainMessagePortAudio, workerMessagePortAudio] = iterableMessageChannel();\n\n  safelyClosePorts([csoundWorkerFrameRequestPort, audioWorkerFrameRequestPort]);\n  [csoundWorkerFrameRequestPort, audioWorkerFrameRequestPort] = iterableMessageChannel();\n\n  safelyClosePorts([csoundWorkerAudioInputPort, audioWorkerAudioInputPort]);\n  [csoundWorkerAudioInputPort, audioWorkerAudioInputPort] = iterableMessageChannel();\n\n  safelyClosePorts([csoundWorkerRtMidiPort, csoundMainRtMidiPort]);\n  [csoundWorkerRtMidiPort, csoundMainRtMidiPort] = iterableMessageChannel();\n\n  mainMessagePort.addEventListener('message', messageEventHandler(csoundWorkerMain));\n  mainMessagePortAudio.addEventListener('message', messageEventHandler(csoundWorkerMain));\n\n  mainMessagePort.start();\n  mainMessagePortAudio.start();\n\n  // csoundWorkerMain.csoundWorker.postMessage({ msg: 'initRequestPort' }, [\n  //   csoundWorkerFrameRequestPort,\n  // ]);\n  // csoundWorkerMain.csoundWorker.postMessage({ msg: 'initAudioInputPort' }, [\n  //   csoundWorkerAudioInputPort,\n  // ]);\n  // csoundWorkerMain.csoundWorker.postMessage({ msg: 'initRtMidiEventPort' }, [\n  //   csoundWorkerRtMidiPort,\n  // ]);\n};\n","import * as Comlink from 'comlink';\nimport { logVAN } from '@root/logger';\nimport { api as API } from '@root/libcsound';\nimport VanillaWorker from '@root/workers/vanilla.worker';\nimport {\n  DEFAULT_HARDWARE_BUFFER_SIZE,\n  DEFAULT_SOFTWARE_BUFFER_SIZE,\n  MAX_CHANNELS,\n  MAX_HARDWARE_BUFFER_SIZE,\n  MIDI_BUFFER_PAYLOAD_SIZE,\n  MIDI_BUFFER_SIZE,\n} from '@root/constants.js';\nimport { makeProxyCallback } from '@root/utils';\nimport {\n  cleanupPorts,\n  csoundMainRtMidiPort,\n  messageEventHandler,\n  mainMessagePortAudio,\n  mainMessagePort,\n  workerMessagePort,\n  csoundWorkerAudioInputPort,\n  csoundWorkerRtMidiPort,\n  csoundWorkerFrameRequestPort,\n} from '@root/mains/messages.main';\n\nclass VanillaWorkerMainThread {\n  constructor(audioWorker, wasmDataURI) {\n    this.audioStreamIn = new Float64Array(\n      MAX_CHANNELS * MAX_HARDWARE_BUFFER_SIZE * Float64Array.BYTES_PER_ELEMENT,\n    );\n\n    this.audioStreamOut = new Float64Array(\n      MAX_CHANNELS * MAX_HARDWARE_BUFFER_SIZE * Float64Array.BYTES_PER_ELEMENT,\n    );\n\n    this.midiBuffer = new Int32Array(\n      MIDI_BUFFER_SIZE * MIDI_BUFFER_PAYLOAD_SIZE * Int32Array.BYTES_PER_ELEMENT,\n    );\n\n    audioWorker.csoundWorkerMain = this;\n    this.audioWorker = audioWorker;\n    this.wasmDataURI = wasmDataURI;\n    this.exportApi = {};\n    this.csound = undefined;\n    this.currentPlayState = undefined;\n    this.messageCallbacks = [];\n    this.csoundPlayStateChangeCallbacks = [];\n    this.midiPortStarted = false;\n    this.onPlayStateChange = this.onPlayStateChange.bind(this);\n  }\n\n  get api() {\n    return this.exportApi;\n  }\n\n  handleMidiInput({ data: payload }) {\n    csoundMainRtMidiPort.postMessage && csoundMainRtMidiPort.postMessage(payload);\n  }\n\n  async prepareRealtimePerformance() {\n    if (!this.csound) {\n      console.error(`fatal error: csound instance not found?`);\n      return;\n    }\n\n    this.audioWorker.sampleRate = await this.exportApi.csoundGetSr(this.csound);\n    this.audioWorker.isRequestingInput = (\n      await this.exportApi.csoundGetInputName(this.csound)\n    ).includes('adc');\n    this.audioWorker.isRequestingMidi = await this.exportApi._isRequestingRtMidiInput(this.csound);\n    this.audioWorker.outputsCount = await this.exportApi.csoundGetNchnls(this.csound);\n    // TODO fix upstream: await this.exportApi.csoundGetNchnlsInput(this.csound);\n    this.audioWorker.inputsCount = this.audioWorker.isRequestingInput ? 1 : 0;\n    this.audioWorker.hardwareBufferSize = DEFAULT_HARDWARE_BUFFER_SIZE;\n    this.audioWorker.softwareBufferSize = DEFAULT_SOFTWARE_BUFFER_SIZE;\n    if (this.audioWorker.scriptProcessorNode) {\n      this.audioWorker.softwareBufferSize *= 2;\n    }\n\n    logVAN(`vars for rtPerf set`);\n  }\n\n  async onPlayStateChange(newPlayState) {\n    this.currentPlayState = newPlayState;\n\n    switch (newPlayState) {\n      case 'realtimePerformanceStarted': {\n        logVAN(`event realtimePerformanceStarted from worker, now preparingRT..`);\n        await this.prepareRealtimePerformance();\n        break;\n      }\n\n      case 'realtimePerformanceEnded': {\n        logVAN(`realtimePerformanceEnded`);\n        this.midiPortStarted = false;\n        this.csound = undefined;\n        this.currentPlayState = undefined;\n        cleanupPorts(this);\n        // await this.initialize();\n        break;\n      }\n\n      case 'renderEnded': {\n        logVAN(`event: renderEnded received, beginning cleanup`);\n        cleanupPorts(this);\n        // await this.initialize();\n        break;\n      }\n\n      default: {\n        break;\n      }\n    }\n\n    // forward the message from worker to the audioWorker\n    try {\n      if (!this.audioWorker) {\n        console.error(`fatal error: audioWorker not initialized!`);\n      } else {\n        this.audioWorker.onPlayStateChange(newPlayState);\n      }\n    } catch (error) {\n      console.error(`Csound thread crashed while receiving an IPC message: ${error}`);\n    }\n\n    this.csoundPlayStateChangeCallbacks.forEach((callback) => {\n      try {\n        callback(newPlayState);\n      } catch (error) {\n        console.error(error);\n      }\n    });\n  }\n\n  async addMessageCallback(callback) {\n    if (typeof callback === 'function') {\n      this.messageCallbacks.push(callback);\n    } else {\n      console.error(`Can't assign ${typeof callback} as a message callback`);\n    }\n  }\n\n  async setMessageCallback(callback) {\n    if (typeof callback === 'function') {\n      this.messageCallbacks = [callback];\n    } else {\n      console.error(`Can't assign ${typeof callback} as a message callback`);\n    }\n  }\n\n  async csoundPause() {\n    if (this.audioWorker && typeof this.audioWorker.workletProxy !== 'undefined') {\n      await this.audioWorker.workletProxy.pause();\n    }\n    this.onPlayStateChange('realtimePerformancePaused');\n  }\n\n  async csoundResume() {\n    if (this.audioWorker && typeof this.audioWorker.workletProxy !== 'undefined') {\n      await this.audioWorker.workletProxy.resume();\n    }\n    this.onPlayStateChange('realtimePerformanceResumed');\n  }\n\n  // User-land hook to csound's play-state changes\n  async setCsoundPlayStateChangeCallback(callback) {\n    if (typeof callback !== 'function') {\n      console.error(`Can't assign ${typeof callback} as a playstate change callback`);\n    } else {\n      this.csoundPlayStateChangeCallbacks = [callback];\n    }\n  }\n\n  async addCsoundPlayStateChangeCallback(callback) {\n    if (typeof callback !== 'function') {\n      console.error(`Can't assign ${typeof callback} as a playstate change callback`);\n    } else {\n      this.csoundPlayStateChangeCallbacks.push(callback);\n    }\n  }\n\n  async initialize() {\n    logVAN(`vanilla.main: initialize`);\n    this.csoundWorker = this.csoundWorker || new Worker(VanillaWorker());\n    const audioStreamIn = this.audioStreamIn;\n    const audioStreamOut = this.audioStreamOut;\n    const midiBuffer = this.midiBuffer;\n\n    logVAN(`mainMessagePort mainMessagePortAudio ports connected to event-listeners`);\n    mainMessagePort.addEventListener('message', messageEventHandler(this));\n    mainMessagePortAudio.addEventListener('message', messageEventHandler(this));\n\n    mainMessagePort.start();\n    mainMessagePortAudio.start();\n    logVAN(`mainMessagePort- mainMessagePortAudio .start()`);\n\n    const proxyPort = Comlink.wrap(this.csoundWorker);\n    this.proxyPort = proxyPort;\n    await proxyPort.initialize(this.wasmDataURI);\n    this.exportApi.setMessageCallback = this.setMessageCallback.bind(this);\n    this.exportApi.addMessageCallback = this.addMessageCallback.bind(this);\n    this.exportApi.setCsoundPlayStateChangeCallback = this.setCsoundPlayStateChangeCallback.bind(\n      this,\n    );\n    this.exportApi.addCsoundPlayStateChangeCallback = this.addCsoundPlayStateChangeCallback.bind(\n      this,\n    );\n    this.exportApi.csoundPause = this.csoundPause.bind(this);\n    this.exportApi.csoundResume = this.csoundResume.bind(this);\n    this.exportApi.copyToFs = makeProxyCallback(proxyPort, 'copyToFs');\n    this.exportApi.readFromFs = makeProxyCallback(proxyPort, 'readFromFs');\n    this.exportApi.llFs = makeProxyCallback(proxyPort, 'llFs');\n    this.exportApi.lsFs = makeProxyCallback(proxyPort, 'lsFs');\n    this.exportApi.rmrfFs = makeProxyCallback(proxyPort, 'rmrfFs');\n\n    for (const apiK of Object.keys(API)) {\n      const reference = API[apiK];\n      const proxyCallback = makeProxyCallback(proxyPort, apiK);\n      switch (apiK) {\n        case 'csoundStart': {\n          const csoundStart = async function (csound) {\n            if (!csound || typeof csound !== 'number') {\n              console.error('csoundStart expects first parameter to be instance of Csound');\n              return -1;\n            }\n\n            this.csound = csound;\n            this.csoundWorker.postMessage({ msg: 'initMessagePort' }, [workerMessagePort]);\n            this.csoundWorker.postMessage({ msg: 'initRequestPort' }, [\n              csoundWorkerFrameRequestPort,\n            ]);\n            this.csoundWorker.postMessage({ msg: 'initAudioInputPort' }, [\n              csoundWorkerAudioInputPort,\n            ]);\n            this.csoundWorker.postMessage({ msg: 'initRtMidiEventPort' }, [csoundWorkerRtMidiPort]);\n            logVAN(`4x message-ports sent to the worker`);\n            await proxyCallback({\n              audioStreamIn,\n              audioStreamOut,\n              midiBuffer,\n              csound,\n            });\n          };\n\n          csoundStart.toString = () => reference.toString();\n          this.exportApi.csoundStart = csoundStart.bind(this);\n          break;\n        }\n\n        case 'csoundStop': {\n          const brodcastTheEnd = async () =>\n            await this.onPlayStateChange('realtimePerformanceEnded');\n          const csoundStop = async function (csound) {\n            if (!csound || typeof csound !== 'number') {\n              console.error('csoundStop expects first parameter to be instance of Csound');\n              return -1;\n            }\n\n            await proxyCallback(csound);\n            if (this.currentPlayState === 'realtimePerformancePaused') {\n              try {\n                await proxyPort.callUncloned('csoundPerformKsmps', [csound]);\n              } catch (_) {}\n              try {\n                await brodcastTheEnd();\n              } catch (_) {}\n            }\n            if (this.currentPlayState !== 'realtimePerformanceEnded') {\n              await brodcastTheEnd();\n            }\n          };\n          this.exportApi.csoundStop = csoundStop.bind(this);\n          csoundStop.toString = () => reference.toString();\n          break;\n        }\n\n        default: {\n          proxyCallback.toString = () => reference.toString();\n          this.exportApi[apiK] = proxyCallback;\n          break;\n        }\n      }\n    }\n    logVAN(`exportAPI generated`);\n  }\n}\n\nexport default VanillaWorkerMainThread;\n","/*! unmute-ios-audio. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = unmuteIosAudio\n\nconst USER_ACTIVATION_EVENTS = [\n  'auxclick',\n  'click',\n  'contextmenu',\n  'dblclick',\n  'keydown',\n  'keyup',\n  'mousedown',\n  'mouseup',\n  'touchend'\n]\n\nfunction unmuteIosAudio () {\n  const AudioContext = window.webkitAudioContext\n\n  // To detect iOS, check for iOS user agent (spoofed by many mobile browsers)\n  // and confirm Safari-only webkitAudioContext is present.\n  const isIos = /iPhone|iPad|iPod/.test(navigator.userAgent) && AudioContext != null\n\n  if (!isIos) return\n\n  // state can be 'blocked', 'pending', 'allowed'\n  let htmlAudioState = 'blocked'\n  let webAudioState = 'blocked'\n\n  let audio\n  let context\n  let source\n\n  const sampleRate = (new AudioContext()).sampleRate\n  const silentAudioFile = createSilentAudioFile(sampleRate)\n\n  USER_ACTIVATION_EVENTS.forEach(eventName => {\n    window.addEventListener(\n      eventName, handleUserActivation, { capture: true, passive: true }\n    )\n  })\n\n  // Return a seven samples long 8 bit mono WAVE file\n  function createSilentAudioFile (sampleRate) {\n    const arrayBuffer = new ArrayBuffer(10)\n    const dataView = new DataView(arrayBuffer)\n\n    dataView.setUint32(0, sampleRate, true)\n    dataView.setUint32(4, sampleRate, true)\n    dataView.setUint16(8, 1, true)\n\n    const missingCharacters =\n      window.btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)))\n        .slice(0, 13)\n\n    return `data:audio/wav;base64,UklGRisAAABXQVZFZm10IBAAAAABAAEA${missingCharacters}AgAZGF0YQcAAACAgICAgICAAAA=`\n  }\n\n  function handleUserActivation (e) {\n    if (htmlAudioState === 'blocked') {\n      htmlAudioState = 'pending'\n      createHtmlAudio()\n    }\n    if (webAudioState === 'blocked') {\n      webAudioState = 'pending'\n      createWebAudio()\n    }\n  }\n\n  function createHtmlAudio () {\n    audio = document.createElement('audio')\n\n    audio.setAttribute('x-webkit-airplay', 'deny') // Disable the iOS control center media widget\n    audio.preload = 'auto'\n    audio.loop = true\n    audio.src = silentAudioFile\n    audio.load()\n\n    audio.play().then(\n      () => {\n        htmlAudioState = 'allowed'\n        maybeCleanup()\n      },\n      () => {\n        htmlAudioState = 'blocked'\n\n        audio.pause()\n        audio.removeAttribute('src')\n        audio.load()\n        audio = null\n      }\n    )\n  }\n\n  function createWebAudio () {\n    context = new AudioContext()\n\n    source = context.createBufferSource()\n    source.buffer = context.createBuffer(1, 1, 22050) // .045 msec of silence\n    source.connect(context.destination)\n    source.start()\n\n    if (context.state === 'running') {\n      webAudioState = 'allowed'\n      maybeCleanup()\n    } else {\n      webAudioState = 'blocked'\n\n      source.disconnect(context.destination)\n      source = null\n\n      context.close()\n      context = null\n    }\n  }\n\n  function maybeCleanup () {\n    if (htmlAudioState !== 'allowed' || webAudioState !== 'allowed') return\n\n    USER_ACTIVATION_EVENTS.forEach(eventName => {\n      window.removeEventListener(\n        eventName, handleUserActivation, { capture: true, passive: true }\n      )\n    })\n  }\n}\n","import * as Comlink from 'comlink';\nimport { api as API } from '@root/libcsound';\nimport {\n  messageEventHandler,\n  mainMessagePortAudio,\n  mainMessagePort,\n  workerMessagePort,\n} from '@root/mains/messages.main';\nimport SABWorker from '@root/workers/sab.worker';\nimport {\n  AUDIO_STATE,\n  MAX_CHANNELS,\n  MAX_HARDWARE_BUFFER_SIZE,\n  MIDI_BUFFER_PAYLOAD_SIZE,\n  MIDI_BUFFER_SIZE,\n  initialSharedState,\n} from '@root/constants';\nimport { logSAB } from '@root/logger';\nimport { makeProxyCallback, stopableStates } from '@root/utils';\n\nclass SharedArrayBufferMainThread {\n  constructor(audioWorker, wasmDataURI) {\n    this.audioWorker = audioWorker;\n    this.csoundInstance = undefined;\n    this.wasmDataURI = wasmDataURI;\n    this.currentPlayState = undefined;\n    this.exportApi = {};\n    this.messageCallbacks = [];\n    this.csoundPlayStateChangeCallbacks = [];\n\n    this.audioStateBuffer = new SharedArrayBuffer(\n      initialSharedState.length * Int32Array.BYTES_PER_ELEMENT\n    );\n\n    this.audioStatePointer = new Int32Array(this.audioStateBuffer);\n\n    this.audioStreamIn = new SharedArrayBuffer(\n      MAX_CHANNELS * MAX_HARDWARE_BUFFER_SIZE * Float64Array.BYTES_PER_ELEMENT\n    );\n    this.audioStreamOut = new SharedArrayBuffer(\n      MAX_CHANNELS * MAX_HARDWARE_BUFFER_SIZE * Float64Array.BYTES_PER_ELEMENT\n    );\n\n    this.midiBufferSAB = new SharedArrayBuffer(\n      MIDI_BUFFER_SIZE * MIDI_BUFFER_PAYLOAD_SIZE * Int32Array.BYTES_PER_ELEMENT\n    );\n\n    this.midiBuffer = new Int32Array(this.midiBufferSAB);\n    this.onPlayStateChange = this.onPlayStateChange.bind(this);\n    logSAB(`SharedArrayBufferMainThread got constructed`);\n  }\n\n  get api() {\n    return this.exportApi;\n  }\n\n  handleMidiInput({ data: [status, data1, data2] }) {\n    const currentQueueLength = Atomics.load(\n      this.audioStatePointer,\n      AUDIO_STATE.AVAIL_RTMIDI_EVENTS\n    );\n    const rtmidiBufferIndex = Atomics.load(this.audioStatePointer, AUDIO_STATE.RTMIDI_INDEX);\n    const nextIndex =\n      (currentQueueLength * MIDI_BUFFER_PAYLOAD_SIZE + rtmidiBufferIndex) % MIDI_BUFFER_SIZE;\n\n    Atomics.store(this.midiBuffer, nextIndex, status);\n    Atomics.store(this.midiBuffer, nextIndex + 1, data1);\n    Atomics.store(this.midiBuffer, nextIndex + 2, data2);\n    Atomics.add(this.audioStatePointer, AUDIO_STATE.AVAIL_RTMIDI_EVENTS, 1);\n  }\n\n  async addMessageCallback(callback) {\n    if (typeof callback === 'function') {\n      this.messageCallbacks.push(callback);\n    } else {\n      console.error(`Can't assign ${typeof callback} as a message callback`);\n    }\n  }\n\n  async setMessageCallback(callback) {\n    if (typeof callback === 'function') {\n      this.messageCallbacks = [callback];\n    } else {\n      console.error(`Can't assign ${typeof callback} as a message callback`);\n    }\n  }\n\n  // User-land hook to csound's play-state changes\n  async setCsoundPlayStateChangeCallback(callback) {\n    if (typeof callback !== 'function') {\n      console.error(`Can't assign ${typeof callback} as a playstate change callback`);\n    } else {\n      this.csoundPlayStateChangeCallbacks = [callback];\n    }\n  }\n\n  async addCsoundPlayStateChangeCallback(callback) {\n    if (typeof callback !== 'function') {\n      console.error(`Can't assign ${typeof callback} as a playstate change callback`);\n    } else {\n      this.csoundPlayStateChangeCallbacks.push(callback);\n    }\n  }\n\n  async csoundPause() {\n    if (\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.IS_PAUSED) !== 1 &&\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.STOP) !== 1 &&\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.IS_PERFORMING) === 1\n    ) {\n      Atomics.store(this.audioStatePointer, AUDIO_STATE.IS_PAUSED, 1);\n      this.onPlayStateChange('realtimePerformancePaused');\n    }\n  }\n\n  async csoundResume() {\n    if (\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.IS_PAUSED) === 1 &&\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.STOP) !== 1 &&\n      Atomics.load(this.audioStatePointer, AUDIO_STATE.IS_PERFORMING) === 1\n    ) {\n      Atomics.store(this.audioStatePointer, AUDIO_STATE.IS_PAUSED, 0);\n      Atomics.notify(this.audioStatePointer, AUDIO_STATE.IS_PAUSED);\n      this.onPlayStateChange('realtimePerformanceResumed');\n    }\n  }\n\n  async onPlayStateChange(newPlayState) {\n    this.currentPlayState = newPlayState;\n\n    switch (newPlayState) {\n      case 'realtimePerformanceStarted': {\n        logSAB(\n          `event: realtimePerformanceStarted received,` +\n            ` proceeding to call prepareRealtimePerformance`\n        );\n        await this.prepareRealtimePerformance();\n        break;\n      }\n      case 'realtimePerformanceEnded': {\n        logSAB(`event: realtimePerformanceEnded received, beginning cleanup`);\n\n        // re-initialize SAB\n        initialSharedState.forEach((value, index) => {\n          Atomics.store(this.audioStatePointer, index, value);\n        });\n        break;\n      }\n\n      case 'renderEnded': {\n        logSAB(`event: renderEnded received, beginning cleanup`);\n        break;\n      }\n      default: {\n        break;\n      }\n    }\n\n    // forward the message from worker to the audioWorker\n    try {\n      await this.audioWorker.onPlayStateChange(newPlayState);\n    } catch (error) {\n      console.error(error);\n    }\n\n    this.csoundPlayStateChangeCallbacks.forEach(callback => {\n      try {\n        callback(newPlayState);\n      } catch (error) {\n        console.error(error);\n      }\n    });\n  }\n\n  async prepareRealtimePerformance() {\n    logSAB(`prepareRealtimePerformance`);\n    const outputsCount = Atomics.load(this.audioStatePointer, AUDIO_STATE.NCHNLS);\n    const inputCount = Atomics.load(this.audioStatePointer, AUDIO_STATE.NCHNLS_I);\n\n    this.audioWorker.isRequestingInput = inputCount > 0;\n    this.audioWorker.isRequestingMidi = Atomics.load(\n      this.audioStatePointer,\n      AUDIO_STATE.IS_REQUESTING_RTMIDI\n    );\n\n    const sampleRate = Atomics.load(this.audioStatePointer, AUDIO_STATE.SAMPLE_RATE);\n\n    const hardwareBufferSize = Atomics.load(this.audioStatePointer, AUDIO_STATE.HW_BUFFER_SIZE);\n\n    const softwareBufferSize = Atomics.load(this.audioStatePointer, AUDIO_STATE.SW_BUFFER_SIZE);\n\n    this.audioWorker.sampleRate = sampleRate;\n    this.audioWorker.inputCount = inputCount;\n    this.audioWorker.outputsCount = outputsCount;\n    this.audioWorker.hardwareBufferSize = hardwareBufferSize;\n    this.audioWorker.softwareBufferSize = softwareBufferSize;\n  }\n\n  async initialize() {\n    logSAB(`initialization: instantiate the SABWorker Thread`);\n    const csoundWorker = new Worker(SABWorker());\n    this.csoundWorker = csoundWorker;\n    const audioStateBuffer = this.audioStateBuffer;\n    const audioStreamIn = this.audioStreamIn;\n    const audioStreamOut = this.audioStreamOut;\n    const midiBuffer = this.midiBuffer;\n\n    // This will sadly create circular structure\n    // that's still mostly harmless.\n    logSAB(`providing the audioWorker a pointer to SABMain's instance`);\n    this.audioWorker.csoundWorkerMain = this;\n    this.hasSharedArrayBuffer = true;\n\n    // both audio worker and csound worker use 1 handler\n    // simplifies flow of data (csound main.worker is always first to receive)\n    logSAB(`adding message eventListeners for mainMessagePort and mainMessagePortAudio`);\n    mainMessagePort.addEventListener('message', messageEventHandler(this));\n    mainMessagePortAudio.addEventListener('message', messageEventHandler(this));\n    logSAB(\n      `(postMessage) making a message channel from SABMain to SABWorker via workerMessagePort`\n    );\n    csoundWorker.postMessage({ msg: 'initMessagePort' }, [workerMessagePort]);\n\n    mainMessagePort.start();\n    mainMessagePortAudio.start();\n    logSAB(`mainMessagePort and mainMessagePortAudio ports .started`);\n    // workerMessagePort.start();\n\n    const proxyPort = Comlink.wrap(csoundWorker);\n    await proxyPort.initialize(this.wasmDataURI);\n    logSAB(`A proxy port from SABMain to SABWorker established`);\n\n    this.exportApi.setMessageCallback = this.setMessageCallback.bind(this);\n    this.exportApi.addMessageCallback = this.addMessageCallback.bind(this);\n    this.exportApi.setCsoundPlayStateChangeCallback = this.setCsoundPlayStateChangeCallback.bind(\n      this\n    );\n    this.exportApi.addCsoundPlayStateChangeCallback = this.addCsoundPlayStateChangeCallback.bind(\n      this\n    );\n\n    this.exportApi.csoundPause = this.csoundPause.bind(this);\n    this.exportApi.csoundResume = this.csoundResume.bind(this);\n\n    this.exportApi.copyToFs = makeProxyCallback(proxyPort, 'copyToFs');\n    this.exportApi.readFromFs = makeProxyCallback(proxyPort, 'readFromFs');\n    this.exportApi.llFs = makeProxyCallback(proxyPort, 'llFs');\n    this.exportApi.lsFs = makeProxyCallback(proxyPort, 'lsFs');\n    this.exportApi.rmrfFs = makeProxyCallback(proxyPort, 'rmrfFs');\n\n    for (const apiK of Object.keys(API)) {\n      const proxyCallback = makeProxyCallback(proxyPort, apiK);\n      const reference = API[apiK];\n\n      switch (apiK) {\n        case 'csoundCreate': {\n          const csoundCreate = async () => {\n            const csoundInstance = await proxyCallback();\n            this.csoundInstance = csoundInstance;\n            return csoundInstance;\n          };\n          this.exportApi.csoundCreate = csoundCreate.bind(this);\n          csoundCreate.toString = () => reference.toString();\n          break;\n        }\n        case 'csoundStart': {\n          const csoundStart = async function(csound) {\n            if (!csound || typeof csound !== 'number') {\n              console.error('csoundStart expects first parameter to be instance of Csound');\n              return -1;\n            }\n\n            await proxyCallback({\n              audioStateBuffer,\n              audioStreamIn,\n              audioStreamOut,\n              midiBuffer,\n              csound,\n            });\n          };\n\n          csoundStart.toString = () => reference.toString();\n          this.exportApi.csoundStart = csoundStart.bind(this);\n          break;\n        }\n\n        case 'csoundStop': {\n          const csoundStop = async csound => {\n            logSAB(\n              \"Checking if it's safe to call stop:\",\n              stopableStates.has(this.currentPlayState)\n            );\n            if (stopableStates.has(this.currentPlayState)) {\n              logSAB(\"Marking SAB's state to STOP\");\n              Atomics.store(this.audioStatePointer, AUDIO_STATE.STOP, 1);\n              logSAB('Marking that performance is not running anymore (stops the audio too)');\n              Atomics.store(this.audioStatePointer, AUDIO_STATE.IS_PERFORMING, 0);\n\n              // Double check if the thread didn't defenitely get the STOP message\n              setTimeout(() => {\n                logSAB('Double checking if SAB stopped');\n                if (this.currentPlayState !== 'realtimePerformanceEnded') {\n                  logSAB(\"stopping didn't cause the correct event to be triggered\");\n                  if (Atomics.load(this.audioStatePointer, AUDIO_STATE.STOP) === 0) {\n                    logSAB(\n                      'stopped state got reset to 0 (could be fatal, but also race condition)'\n                    );\n                    Atomics.store(this.audioStatePointer, AUDIO_STATE.STOP, 1);\n                  }\n                  logSAB('making a second Atomic notify to SAB, pray for the best');\n                  Atomics.notify(this.audioStatePointer, AUDIO_STATE.ATOMIC_NOTIFY);\n                }\n              }, 1000);\n\n              // A potential case where the thread is locked because of pause\n              if (this.currentPlayState === 'realtimePerformancePaused') {\n                Atomics.store(this.audioStatePointer, AUDIO_STATE.IS_PAUSED, 0);\n                Atomics.notify(this.audioStatePointer, AUDIO_STATE.IS_PAUSED);\n              }\n            }\n          };\n          this.exportApi.csoundStop = csoundStop.bind(this);\n          csoundStop.toString = () => reference.toString();\n          break;\n        }\n\n        default: {\n          proxyCallback.toString = () => reference.toString();\n          this.exportApi[apiK] = proxyCallback;\n          break;\n        }\n      }\n    }\n    logSAB(`PUBLIC API Generated and stored`);\n  }\n}\n\nexport default SharedArrayBufferMainThread;\n","import * as Comlink from 'comlink';\nimport WorkletWorker from '@root/workers/worklet.worker';\nimport log, { logWorklet } from '@root/logger';\nimport {\n  audioWorkerAudioInputPort,\n  audioWorkerFrameRequestPort,\n  emitInternalCsoundLogEvent,\n  workerMessagePortAudio,\n} from '@root/mains/messages.main';\n\nconst connectedMidiDevices = new Set();\n\nclass AudioWorkletMainThread {\n  constructor() {\n    this.audioCtx = undefined;\n    this.audioWorkletNode = undefined;\n    this.currentPlayState = undefined;\n    this.csoundWorkerMain = undefined;\n    this.workletProxy = undefined;\n\n    // never default these, get it from\n    // csound-worker before starting\n    this.sampleRate = undefined;\n    this.inputsCount = undefined;\n    this.outputsCount = undefined;\n    this.hardwareBufferSize = undefined;\n    this.softwareBufferSize = undefined;\n\n    this.initialize = this.initialize.bind(this);\n    this.connectPorts = this.connectPorts.bind(this);\n    this.onPlayStateChange = this.onPlayStateChange.bind(this);\n    logWorklet('AudioWorkletMainThread was constructed');\n  }\n\n  async onPlayStateChange(newPlayState) {\n    this.currentPlayState = newPlayState;\n    switch (newPlayState) {\n      case 'realtimePerformanceStarted': {\n        logWorklet('event received: realtimePerformanceStarted');\n        await this.initialize();\n        break;\n      }\n      case 'realtimePerformanceEnded': {\n        logWorklet(\n          'event received: realtimePerformanceEnded' + !this.csoundWorkerMain.hasSharedArrayBuffer\n            ? ` cleaning up Vanilla ports`\n            : '',\n        );\n        this.audioCtx.close();\n        this.audioWorkletNode.disconnect();\n        delete this.audioWorkletNode;\n        this.audioCtx = undefined;\n        this.currentPlayState = undefined;\n        this.workletProxy = undefined;\n        this.sampleRate = undefined;\n        this.inputsCount = undefined;\n        this.outputsCount = undefined;\n        this.hardwareBufferSize = undefined;\n        this.softwareBufferSize = undefined;\n        break;\n      }\n      default: {\n        break;\n      }\n    }\n  }\n\n  // SAB bypasses this mechanism!\n  connectPorts() {\n    logWorklet('initializing MessagePort on worker threads');\n\n    this.audioWorkletNode.port.postMessage({ msg: 'initMessagePort' }, [workerMessagePortAudio]);\n\n    this.audioWorkletNode.port.postMessage({ msg: 'initAudioInputPort' }, [\n      audioWorkerAudioInputPort,\n    ]);\n\n    this.audioWorkletNode.port.postMessage({ msg: 'initRequestPort' }, [\n      audioWorkerFrameRequestPort,\n    ]);\n\n    try {\n      logWorklet('wrapping Comlink proxy endpoint on the audioWorkletNode.port');\n      this.workletProxy = Comlink.wrap(this.audioWorkletNode.port);\n    } catch (error) {\n      log.error('COMLINK ERROR', error);\n    }\n  }\n\n  async initialize() {\n    const newAudioContext = new AudioContext({\n      latencyHint: 'interactive',\n      sampleRate: this.sampleRate,\n    });\n\n    this.audioCtx = newAudioContext;\n\n    logWorklet('new AudioContext');\n    await newAudioContext.audioWorklet.addModule(WorkletWorker());\n    logWorklet('WorkletWorker module added');\n\n    if (!this.csoundWorkerMain) {\n      log.error(`fatal: worker not reachable from worklet-main thread`);\n      return;\n    }\n\n    const createWorkletNode = (audoContext, inputsCount) => {\n      return new AudioWorkletNode(audoContext, 'csound-worklet-processor', {\n        numberOfInputs: 1,\n        numberOfOutputs: 1,\n        inputChannelCount: [inputsCount],\n        outputChannelCount: [this.outputsCount],\n        processorOptions: {\n          hardwareBufferSize: this.hardwareBufferSize,\n          softwareBufferSize: this.softwareBufferSize,\n          isRequestingInput: this.isRequestingInput,\n          inputsCount,\n          outputsCount: this.outputsCount,\n          sampleRate: this.sampleRate,\n          maybeSharedArrayBuffer:\n            this.csoundWorkerMain.hasSharedArrayBuffer && this.csoundWorkerMain.audioStatePointer,\n          maybeSharedArrayBufferAudioIn:\n            this.csoundWorkerMain.hasSharedArrayBuffer && this.csoundWorkerMain.audioStreamIn,\n          maybeSharedArrayBufferAudioOut:\n            this.csoundWorkerMain.hasSharedArrayBuffer && this.csoundWorkerMain.audioStreamOut,\n        },\n      });\n    };\n\n    if (this.isRequestingMidi) {\n      emitInternalCsoundLogEvent(this.csoundWorkerMain, 'requesting for web-midi connection');\n      if (navigator && navigator.requestMIDIAccess) {\n        try {\n          const midiDevices = await navigator.requestMIDIAccess();\n          if (midiDevices.inputs) {\n            const midiInputs = midiDevices.inputs.values();\n            for (let input = midiInputs.next(); input && !input.done; input = midiInputs.next()) {\n              emitInternalCsoundLogEvent(\n                this.csoundWorkerMain,\n                `Connecting midi-input: ${input.value.name || 'unkown'}`,\n              );\n              if (!connectedMidiDevices.has(input.value.name || 'unkown')) {\n                input.value.onmidimessage = this.csoundWorkerMain.handleMidiInput.bind(\n                  this.csoundWorkerMain,\n                );\n                connectedMidiDevices.add(input.value.name || 'unkown');\n              }\n            }\n          } else {\n            emitInternalCsoundLogEvent(this.csoundWorkerMain, 'no midi-device detected');\n          }\n        } catch (error) {\n          emitInternalCsoundLogEvent(\n            this.csoundWorkerMain,\n            'error while connecting web-midi: ' + error,\n          );\n        }\n      } else {\n        emitInternalCsoundLogEvent(\n          this.csoundWorkerMain,\n          'no web-midi support found, midi-input will not work!',\n        );\n      }\n    }\n\n    if (this.isRequestingInput) {\n      const getUserMedia =\n        typeof navigator.mediaDevices !== 'undefined'\n          ? navigator.mediaDevices.getUserMedia\n          : navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;\n\n      const microphoneCallback = (stream) => {\n        if (stream) {\n          const liveInput = newAudioContext.createMediaStreamSource(stream);\n          this.inputsCount = liveInput.channelCount;\n          const newNode = createWorkletNode(newAudioContext, liveInput.channelCount);\n          this.audioWorkletNode = newNode;\n          liveInput.connect(newNode).connect(newAudioContext.destination);\n        } else {\n          // Continue as before if user cancels\n          this.inputsCount = 0;\n          const newNode = createWorkletNode(newAudioContext, 0);\n          this.audioWorkletNode = newNode;\n          this.audioWorkletNode.connect(newAudioContext.destination);\n        }\n        !this.csoundWorkerMain.hasSharedArrayBuffer && this.connectPorts();\n      };\n\n      logWorklet('requesting microphone access');\n      typeof navigator.mediaDevices !== 'undefined'\n        ? getUserMedia\n            .call(navigator.mediaDevices, {\n              audio: { echoCancellation: false, sampleSize: 32 },\n            })\n            .then(microphoneCallback)\n            .catch(log.error)\n        : getUserMedia.call(\n            navigator,\n            {\n              audio: {\n                optional: [{ echoCancellation: false, sampleSize: 32 }],\n              },\n            },\n            microphoneCallback,\n            log.error,\n          );\n    } else {\n      const newNode = createWorkletNode(newAudioContext, 0);\n      this.audioWorkletNode = newNode;\n      logWorklet('connecting Node to AudioContext destination');\n      this.audioWorkletNode.connect(newAudioContext.destination);\n      !this.csoundWorkerMain.hasSharedArrayBuffer && this.connectPorts();\n    }\n  }\n}\n\nexport default AudioWorkletMainThread;\n","import * as Comlink from 'comlink';\nimport ScriptProcessorNodeWorker from '@root/workers/old-spn.worker';\nimport { logSPN } from '@root/logger';\nimport {\n  audioWorkerAudioInputPort,\n  audioWorkerFrameRequestPort,\n  cleanupPorts,\n  emitInternalCsoundLogEvent,\n  workerMessagePortAudio,\n} from '@root/mains/messages.main';\n\nconst connectedMidiDevices = new Set();\n\nclass ScriptProcessorNodeMainThread {\n  constructor() {\n    this.audioCtx = undefined;\n    this.currentPlayState = undefined;\n    this.csoundWorkerMain = undefined;\n\n    // never default these, get it from\n    // csound-worker before starting\n    this.sampleRate = undefined;\n    this.inputsCount = undefined;\n    this.outputsCount = undefined;\n    this.hardwareBufferSize = undefined;\n    this.softwareBufferSize = undefined;\n\n    this.initIframe = this.initIframe.bind(this);\n    this.initialize = this.initialize.bind(this);\n    this.onPlayStateChange = this.onPlayStateChange.bind(this);\n    this.scriptProcessorNode = true;\n    logSPN('ScriptProcessorNodeMainThread was constructed');\n  }\n\n  async onPlayStateChange(newPlayState) {\n    this.currentPlayState = newPlayState;\n    this.spnWorker && this.spnWorker.postMessage({ playStateChange: newPlayState }, '*');\n    switch (newPlayState) {\n      case 'realtimePerformanceStarted': {\n        logSPN('event received: realtimePerformanceStarted');\n        try {\n          await this.initialize();\n        } catch (error) {\n          console.log(error);\n        }\n        break;\n      }\n      case 'realtimePerformanceEnded': {\n        logSPN('event received: realtimePerformanceEnded');\n        cleanupPorts(this.csoundWorkerMain);\n        this.currentPlayState = undefined;\n        this.sampleRate = undefined;\n        this.inputsCount = undefined;\n        this.outputsCount = undefined;\n        this.hardwareBufferSize = undefined;\n        this.softwareBufferSize = undefined;\n        break;\n      }\n      default: {\n        break;\n      }\n    }\n  }\n\n  connectPorts() {\n    logSPN('initializing MessagePort on worker threads');\n    this.spnWorker.postMessage({ msg: 'initMessagePort' }, '*', [workerMessagePortAudio]);\n    this.spnWorker.postMessage({ msg: 'initAudioInputPort' }, '*', [audioWorkerAudioInputPort]);\n    this.spnWorker.postMessage({ msg: 'initRequestPort' }, '*', [audioWorkerFrameRequestPort]);\n    this.spnWorker.postMessage({ playStateChange: this.currentPlayState }, '*');\n  }\n\n  async initIframe() {\n    // HACK FROM (but it works just fine when adding modern security models)\n    // https://github.com/GoogleChromeLabs/audioworklet-polyfill/blob/274792e5e3d189e04c9496bed24129118539b4b5/src/realm.js#L18-L20\n    if (typeof window === 'undefined' || typeof window.document === 'undefined') {\n      throw 'Can only run SPN in Browser scope';\n    }\n\n    const parentScope = window.document;\n    const iFrameHtml = [\n      `<!doctype html>`,\n      `<html lang=\"en\">`,\n      `<head>`,\n      `</head>`,\n      `<body>`,\n      `<script type=\"text/javascript\" src=\"${ScriptProcessorNodeWorker()}\"></script>`,\n      `</body>`,\n    ].join('\\n');\n\n    const iFrameBlob = new Blob([iFrameHtml], { type: 'text/html' });\n    const iFrame = document.createElement('iframe');\n\n    iFrame.src = URL.createObjectURL(iFrameBlob);\n    iFrame.sandbox.add('allow-scripts', 'allow-same-origin');\n\n    iFrame.style.cssText = 'position:absolute;left:0;top:-999px;width:1px;height:1px;';\n\n    // appending early to have access to contentWindow\n    const iFrameOnLoad = new Promise((resolve) => {\n      iFrame.onload = () => {\n        resolve();\n      };\n    });\n\n    parentScope.body.appendChild(iFrame);\n\n    try {\n      await iFrameOnLoad;\n    } catch (error) {\n      console.error(error);\n    }\n\n    const iFrameWin = iFrame.contentWindow;\n    const iFrameDoc = iFrameWin.document;\n\n    this.spnWorker = iFrameWin;\n  }\n\n  async initialize() {\n    if (!this.spnWorker) {\n      await this.initIframe();\n      if (!this.spnWorker) {\n        console.error(\"SPN FATAL: Couldn't create iFrame\");\n        return;\n      }\n    }\n\n    this.connectPorts();\n\n    this.spnWorker.postMessage(\n      {\n        msg: 'makeSPNClass',\n        argumentz: {\n          hardwareBufferSize: 32768,\n          softwareBufferSize: 2048,\n          inputsCount: this.inputsCount,\n          outputsCount: this.outputsCount,\n          sampleRate: this.sampleRate,\n        },\n      },\n      '*',\n    );\n\n    if (!this.csoundWorkerMain) {\n      log.error(`fatal: worker not reachable from worklet-main thread`);\n      return;\n    }\n\n    if (this.isRequestingMidi) {\n      console.error('todo');\n    }\n\n    if (this.isRequestingInput) {\n      console.error('todo');\n    }\n  }\n}\n\nexport default ScriptProcessorNodeMainThread;\n","// eslint-disable-next-line no-unused-vars\nimport * as Comlink from 'comlink';\nimport VanillaWorkerMainThread from '@root/mains/vanilla.main';\nimport unmuteIosAudio from 'unmute-ios-audio';\nimport SharedArrayBufferMainThread from '@root/mains/sab.main';\nimport AudioWorkletMainThread from '@root/mains/worklet.main';\nimport ScriptProcessorNodeMainThread from '@root/mains/old-spn.main';\nimport wasmDataURI from '../lib/libcsound.wasm.zlib';\nimport log, { logSAB, logWorklet, logVAN } from '@root/logger';\nimport { areWorkletsSupportet, isSabSupported, isScriptProcessorNodeSupported } from '@root/utils';\n\n\nlet audioWorker, csoundWasmApi;\n\n/**\n * The default entry for libcsound es7 module\n * @async\n * @return {Promise.<Object>}\n */\nexport async function Csound() {\n  // prevent multiple initializations\n  if (csoundWasmApi) {\n    return csoundWasmApi;\n  } else {\n    unmuteIosAudio();\n  }\n  const workletSupport = areWorkletsSupportet();\n  const spnSupport = isScriptProcessorNodeSupported();\n\n  if (workletSupport) {\n    logWorklet(`support detected`);\n  } else if (spnSupport) {\n    logVAN(`support detected`);\n  } else {\n    log.warn(`No WebAudio Support detected`);\n  }\n\n  if (workletSupport) {\n    audioWorker = new AudioWorkletMainThread();\n  } else if (spnSupport) {\n    audioWorker = new ScriptProcessorNodeMainThread();\n  }\n\n  if (!audioWorker) {\n    log.error('No detectable WebAudioAPI in current environment');\n    return {};\n  }\n\n  const hasSABSupport = isSabSupported();\n\n  if (!hasSABSupport) {\n    log.warn(`SharedArrayBuffers not found, falling back to Vanilla concurrency`);\n  } else {\n    logSAB(`using SharedArrayBuffers`);\n  }\n\n  const worker =\n    hasSABSupport && workletSupport\n      ? new SharedArrayBufferMainThread(audioWorker, wasmDataURI)\n      : new VanillaWorkerMainThread(audioWorker, wasmDataURI);\n\n  if (worker) {\n    log(`starting Csound thread initialization via WebWorker`);\n    await worker.initialize();\n    csoundWasmApi = worker.api;\n  } else {\n    log.error('No detectable WebAssembly support in current environment');\n    return {};\n  }\n\n  return csoundWasmApi;\n}\n\nexport default Csound;\n"],"names":["proxyMarker","Symbol","createEndpoint","releaseProxy","throwMarker","isObject","val","transferHandlers","Map","canHandle","[object Object]","obj","port1","port2","MessageChannel","expose","ep","self","addEventListener","callback","ev","data","id","type","path","Object","assign","argumentList","map","fromWireValue","returnValue","parent","slice","reduce","prop","rawValue","value","apply","proxy","transfers","transferCache","set","transfer","undefined","Promise","resolve","catch","then","wireValue","transferables","toWireValue","postMessage","removeEventListener","closeEndPoint","start","deserialize","port","wrap","serialized","Error","isError","message","name","stack","endpoint","constructor","isMessagePort","close","target","createProxy","isProxyReleased","Proxy","_target","throwIfProxyReleased","requestResponseMessage","p","toString","length","r","bind","_thisArg","rawArgumentList","last","processArguments","isReleased","processed","v","arr","Array","prototype","concat","WeakMap","handler","serializedValue","serialize","get","msg","fill","Math","floor","random","Number","MAX_SAFE_INTEGER","join","l","global","window","defaultSetTimout","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","runTimeout","fun","setTimeout","e","call","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","on","addListener","once","off","removeListener","removeAllListeners","emit","performance","performanceNow","now","mozNow","msNow","oNow","webkitNow","Date","getTime","startTime","browser$1","nextTick","args","arguments","i","push","title","browser","env","argv","version","versions","binding","cwd","chdir","dir","umask","hrtime","previousTimestamp","clocktime","seconds","nanoseconds","platform","release","config","uptime","intToCharMap","split","number","TypeError","charCode","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","base64","aStr","aIndex","aOutParam","continuation","shifted","strLen","result","shift","charCodeAt","charAt","rest","exports","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","match","scheme","auth","host","urlGenerate","aParsedUrl","url","normalize","aPath","part","isAbsolute","parts","up","splice","aRoot","aPathUrl","aRootUrl","joined","replace","test","level","indexOf","index","lastIndexOf","substr","supportsNullProto","create","identity","s","isProtoString","strcmp","aStr1","aStr2","mappingA","mappingB","onlyCompareOriginal","cmp","source","originalLine","originalColumn","generatedColumn","generatedLine","onlyCompareGenerated","str","JSON","parse","sourceRoot","sourceURL","sourceMapURL","parsed","substring","has","hasOwnProperty","hasNativeMap","ArraySet","_array","_set","fromArray","aArray","aAllowDuplicates","add","size","getOwnPropertyNames","sStr","util","toSetString","isDuplicate","idx","at","aIdx","toArray","MappingList","_sorted","_last","unsortedForEach","aCallback","aThisArg","forEach","aMapping","lineA","lineB","columnA","columnB","compareByGeneratedPositionsInflated","sort","require$$0","SourceMapGenerator","_file","getArg","_sourceRoot","_skipValidation","_sources","_names","_mappings","_sourcesContents","_version","fromSourceMap","aSourceMapConsumer","generator","file","eachMapping","mapping","newMapping","generated","line","column","relative","original","addMapping","sources","sourceFile","sourceRelative","content","sourceContentFor","setSourceContent","_validateMapping","String","aSourceFile","aSourceContent","keys","applySourceMap","aSourceMapPath","newSources","newNames","originalPositionFor","aGenerated","aOriginal","aSource","stringify","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","mappings","base64VLQ","_generateSourcesContent","aSources","aSourceRoot","key","toJSON","names","sourcesContent","aNeedle","aHaystack","aCompare","aBias","recursiveSearch","aLow","aHigh","mid","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","swap","ary","x","y","temp","doQuickSort","comparator","low","high","round","pivot","j","q","quickSort","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","parseSourceMapInput","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","__generatedMappings","defineProperty","configurable","enumerable","_parseMappings","__originalMappings","_charIsMappingSeparator","c","GENERATED_ORDER","ORIGINAL_ORDER","aContext","aOrder","context","_generatedMappings","_originalMappings","computeSourceURL","_sourceMapURL","allGeneratedPositionsFor","needle","_findSourceIndex","_findMapping","compareByOriginalPositions","binarySearch","lastColumn","_absoluteSources","Mapping","consumer","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","originalMappings","compareByGeneratedPositionsDeflated","aMappings","aLineName","aColumnName","aComparator","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","some","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","sectionIndex","section","bias","every","generatedPosition","sectionMappings","adjustedMapping","REGEX_NEWLINE","isSourceNode","SourceNode","aLine","aColumn","aChunks","children","sourceContents","fromStringWithSourceMap","aGeneratedCode","aRelativePath","node","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","lastGeneratedLine","lastMapping","code","nextLine","addMappingWithCode","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","fromSetString","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","require$$1","module","reverse","filter","skip","isData","isURL","a","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","num","output","buffer","isLE","mLen","nBytes","m","eLen","eMax","eBias","nBits","d","NaN","pow","rt","abs","isNaN","log","LN2","customInspectSymbol","for","Buffer","alloc","K_MAX_LENGTH","createBuffer","RangeError","buf","setPrototypeOf","arg","encodingOrOffset","allocUnsafe","from","string","encoding","isEncoding","byteLength","actual","write","fromString","ArrayBuffer","isView","fromArrayLike","isInstance","fromArrayBuffer","SharedArrayBuffer","valueOf","b","isBuffer","checked","copy","numberIsNaN","fromObject","toPrimitive","assertSize","byteOffset","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","n","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","remaining","parseInt","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","poolSize","allocUnsafeSlow","_isBuffer","compare","list","pos","swap16","swap32","swap64","toLocaleString","equals","inspect","max","INSPECT_MAX_BYTES","trim","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","subarray","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","leadSurrogate","toByteArray","base64clean","src","dst","alphabet","table","i16","meta","uri","typeFull","charset","O","isBrowser","navigator","memoize","f","cache","forgetEverything","newSourceFileMemoized","SourceFile","getSource","resetCache","getCache","SourceMap","originalFilePath","sourceMapPath","startsWith","dataURIToBuffer","relativeToFile","text","sourceFor","fullPath","loc","originalLoc","xhr","XMLHttpRequest","open","send","responseText","readFileSync","lines","lines_","sourceMap_","re","lastMatch","exec","sourceMapError","newLoc","sourceLine","_slicedToArray","iterator","_n","_d","_e","_s","_i","done","err","sliceIterator","ansiEscapeCode","zeroWidthCharactersExceptNewline","RegExp","zeroWidthCharacters","partition","ansiEscapeCodes","strlen","isBlank","blank","spans","lastIndex","_ref","_ref2","nonPrintable","printable","_toConsumableArray","arr2","first","_require","asColumns","rows","cfg_","zip","arrs","cells","cellWidths","maxWidths","cfg","delimiter","minColumnWidths","maxTotalWidth","delimiterLength","totalWidth","relativeWidths","w","excessWidth","computedWidths","restCellWidths","widths","right","repeat","asTable","print","colNames","Set","columns","o","dash","configure","newConfig","normalizeArray","allowAboveRoot","splitPathRe","splitPath","filename","resolvedPath","resolvedAbsolute","isPathAbsolute","trailingSlash","paths","to","fromParts","toParts","samePartsLength","outputParts","dirname","root","basename","extname","sep","xs","ctor","superCtor","super_","writable","TempCtor","formatRegExp","format","isString","objects","_","isNull","deprecate","fn","isUndefined","process","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","debuglog","NODE_DEBUG","toUpperCase","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","hash","arrayToHash","formatError","isRegExp","isDate","base","braces","toUTCString","formatProperty","formatArray","pop","prev","cur","reduceToSingleString","desc","getOwnPropertyDescriptor","ar","isNullOrUndefined","isSymbol","objectToString","isPrimitive","maybeBuf","pad","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","date","regexp","months","timestamp","time","getHours","getMinutes","getSeconds","getDate","getMonth","origin","inherits","lastOf","nixSlashes","input","isParseableSyntaxError","rawLines","fileLine","calleeShort","fileRelative","fileShort","StackTracey","shortenPath","relativePath","callee","planA","beforeParse","native","resolved","hide","arr_","pred","span","label","items","entry","memo","maxColumnWidths","_createClass","defineProperties","props","descriptor","Constructor","protoProps","staticProps","_classCallCheck","instance","colorCodes","colorCodesLight","styleCodes","asBright","lightGray","types","0","2","3","9","4","10","subtypes","color","colorLight","bgColor","bgColorLight","unstyle","clean","k","Color","background","brightness","inverted","rgbName","Code","bright","rgb","Colors","alpha","dim","noBrightness","reset","noItalic","noUnderline","noInverse","noColor","noBgColor","openCode","closeCode","denormalizeBrightness","camel","stringWrappingMethods","state","codes","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_code","return","rawParse","foreColor","defaultBrightness","styledSpan","css","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","isBrightness","subtype","delete","asChromeConsoleLogArguments","assignStringWrappingAPI","wrapBefore","_ref3","darkGray","lightRed","lightGreen","lightYellow","lightBlue","lightMagenta","lightCyan","bullet","indent","merge","pipez","functions_","functions","functionNames","Reflect","ownKeys","_len","initial","_key","initialArguments","overrides","modifiedFunctions","_loop","override","before","after","boundArgs","yes","newArgs","maybeFn","methods","methods_","subset","_k","takeFirstArgument","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_k2","_methods","impl","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","entries","_objectEntries","_step4$value","_k3","maxOf","pick","isInteger","escapeStr","parents","siblings","pretty","oneLine","maxLength","customFormat","formatter","jQuery","Float32Array","Float64Array","Int8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint32Array","isTypedArray","URL","pure","json","maxStringLength","object","precision","toFixed","assignProps","noPretty","noFancy","fancy","noRightAlignKeys","rightAlignKeys","maxArrayLength","maxObjectLength","maxDepth","indentation","rightAlign","strings","values","Element","tagName","className","Text","wholeText","tooDeep","tooBig","quoteKey","_objectValues","printedKeys","printedValues","brace","endBrace","leftPaddings","maxLeftPadding","padding","printed","lastLine","kv","why","isAssertion","MAX_VALUE","expected","ansi","leftPad","t","_t$split","linebreak","_t$split2","separator","_ref4$level","pattern","_ref5$level","_ref5$levelColor","levelColor","info","warn","_ref6$when","when","_ref6$format","_ref6","_ref6$locale","locale","_ref6$options","options","_ref6$print","_ref7$shift","_ref7","_ref7$where","where","_ref7$join","_ref7$print","_ref8$fileName","fileName","_ref8$line","_ref10","_ref10$engine","engine","_ref10$engines","engines","_ref10$consoleMethod","consoleMethod","defaults","_log$methods","defaultLogger","ololog","tag","getMilliseconds","locate","_isPlaceholder","_curry1","f1","_curry2","f2","_b","_a","_arity","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","curryN","_curryN","received","combined","argsIdx","left","combinedIdx","curry","_isNumber","range","csoundCreate","wasm","csoundCreateWasi","csoundDestroy","csound","csoundGetAPIVersion","csoundGetVersion","csoundInitialize","flags","sizeOf","int","MYFLT","char","decoder","TextDecoder","encoder","TextEncoder","uint2String","uint","decode","trimNull","string2ptr","memory","stringBuf","encode","allocStringMem","sizeofStruct","jsStruct","total","freeStringPtr","ptr","freeStringMem","structBuffer2Object","parameters","parameterName","currentSize","currentValue","isSabSupported","userAgent","Atomics","isScriptProcessorNodeSupported","audioContext","webkitAudioContext","AudioContext","createScriptProcessor","makeProxyCallback","proxyPort","apiK","async","arguments_","callUncloned","stopableStates","csoundParseOrc","orc","csoundCompileTree","tree","csoundCompileOrc","stringPtr","csoundEvalCode","csoundStart","csoundStartWasi","csoundCompileCsd","csoundCompileCsdText","csoundPerform","csoundPerformKsmps","csoundPerformKsmpsWasi","csoundPerformBuffer","csoundStop","csoundCleanup","csoundReset","csoundResetWasi","CSOUND_PARAMS","CS_MIDIDEVICE","csoundGetSr","csoundGetKr","csoundGetKsmps","csoundGetNchnls","csoundGetNchnlsInput","csoundGet0dBFS","csoundGetA4","csoundGetCurrentTimeSamples","csoundGetSizeOfMYFLT","csoundSetOption","option","csoundSetParams","csoundParameters","csoundGetParams","structLength","structOffset","allocCsoundParamsStruct","structBuffer","currentCsoundParameters","freeCsoundParams","csoundGetDebug","csoundSetDebug","debug","csoundGetInputBufferSize","csoundGetOutputBufferSize","csoundGetInputBuffer","csoundGetOutputBuffer","csoundGetSpin","csoundGetSpout","csoundInputMessage","scoEvent","csoundInputMessageAsync","csoundGetOutputName","stringBuffer","csoundGetInputName","csoundAppendEnv","variable","varStringPtr","valueStringPtr","api","csoundGetMIDIDevList","isOutput","numberOfDevices","allocCsMidiDeviceStruct","freeCsMidiDeviceStruct","csoundSetMidiCallbacks","csoundGetRtMidiName","getRtMidiName","csoundGetMidiOutFileName","getMidiOutFileName","csoundPushMidiMessage","status","data1","data2","pushMidiMessage","_isRequestingRtMidiInput","isRequestingRtMidiInput","setupWasmBrowserFS","initialSharedState","AUDIO_STATE","loggerPool","messageEventHandler","worker","event","messageCallbacks","onPlayStateChange","playStateChange","emitInternalCsoundLogEvent","mainMessagePort","workerMessagePort","mainMessagePortAudio","workerMessagePortAudio","csoundWorkerFrameRequestPort","audioWorkerFrameRequestPort","csoundWorkerAudioInputPort","audioWorkerAudioInputPort","csoundWorkerRtMidiPort","csoundMainRtMidiPort","iterableMessageChannel","safelyClosePorts","p1","p2","cleanupPorts","csoundWorkerMain","VanillaWorkerMainThread","audioWorker","wasmDataURI","audioStreamIn","MAX_CHANNELS","BYTES_PER_ELEMENT","audioStreamOut","midiBuffer","MIDI_BUFFER_SIZE","exportApi","currentPlayState","csoundPlayStateChangeCallbacks","midiPortStarted","handleMidiInput","payload","sampleRate","isRequestingInput","isRequestingMidi","outputsCount","inputsCount","hardwareBufferSize","softwareBufferSize","scriptProcessorNode","newPlayState","prepareRealtimePerformance","workletProxy","pause","resume","csoundWorker","Worker","Comlink","initialize","setMessageCallback","addMessageCallback","setCsoundPlayStateChangeCallback","addCsoundPlayStateChangeCallback","csoundPause","csoundResume","copyToFs","readFromFs","llFs","lsFs","rmrfFs","API","reference","proxyCallback","brodcastTheEnd","audio","htmlAudioState","webAudioState","silentAudioFile","arrayBuffer","dataView","DataView","setUint32","setUint16","btoa","createSilentAudioFile","handleUserActivation","document","createElement","setAttribute","preload","loop","load","play","maybeCleanup","removeAttribute","createBufferSource","connect","destination","disconnect","USER_ACTIVATION_EVENTS","eventName","capture","passive","SharedArrayBufferMainThread","csoundInstance","audioStateBuffer","audioStatePointer","midiBufferSAB","nextIndex","store","notify","inputCount","hasSharedArrayBuffer","connectedMidiDevices","AudioWorkletMainThread","audioCtx","audioWorkletNode","connectPorts","newAudioContext","latencyHint","audioWorklet","addModule","createWorkletNode","audoContext","AudioWorkletNode","numberOfInputs","numberOfOutputs","inputChannelCount","outputChannelCount","processorOptions","maybeSharedArrayBuffer","maybeSharedArrayBufferAudioIn","maybeSharedArrayBufferAudioOut","requestMIDIAccess","midiDevices","inputs","midiInputs","onmidimessage","getUserMedia","mediaDevices","webkitGetUserMedia","mozGetUserMedia","microphoneCallback","stream","liveInput","createMediaStreamSource","channelCount","newNode","echoCancellation","sampleSize","optional","ScriptProcessorNodeMainThread","initIframe","spnWorker","parentScope","iFrameHtml","iFrameBlob","Blob","iFrame","createObjectURL","sandbox","cssText","iFrameOnLoad","onload","body","appendChild","iFrameWin","contentWindow","argumentz","csoundWasmApi","Csound","unmuteIosAudio","workletSupport","AudioNode","spnSupport","hasSABSupport"],"mappings":"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"}